TurtleReal
ー Raspberry PiとROSで動かす安価な2軸駆動ロボット －第五回ROS勉強会@名古屋 2015/4/11

なぜTurtleReal ? - 動機と名前の由来 -ROSで動く安価なロボットを作りたい。
TurtleSimの実機版なのでTurtleReal

第五回ROS勉強会@名古屋 2015/4/11

2

TurtleSimって何？

TurtleSimはROSのチュートリアルでよく使われるウミガメロボットのシミュレーター です。

第五回ROS勉強会@名古屋 2015/4/11

3

TurtleSimデモンストレーション

TurtleSimのデモンストレーション

第五回ROS勉強会@名古屋 2015/4/11

4

TurtleRealで学べる３つの技術的ポイント(1) Raspberry Pi でのROS利用(2) 異種マシン間でROSを協調させて動かす(3) パッケージの使い回し（TurtleSimの操作ソフトを流用）

第五回ROS勉強会@名古屋 2015/4/11

5

TurtleRealで学べる３つの技術的ポイント (1)(1) Raspberry Pi でのROS利用(2) 異種マシン間でROSを協調させて動かす(3) パッケージの使い回し（TurtleSimの操作ソフトを流用）

第五回ROS勉強会@名古屋 2015/4/11

6

Raspberry Piって何？

Raspberry Piは、Raspberry Pi財団 によって開発されたARMプロセッサを載せた格安の教育用シングルボードコンピュータでOSとしてRaspberry Pi版
Debian(Raspbian)が動作します。
Model A $25 (2013)

Model B $35 (2012)

第五回ROS勉強会@名古屋 2015/4/11

Model A+ $20 (2014)

Model B+ $35 (2014)

2 Model B $35 (2015)7

２台のマシンをつなぐ
Raspberry
Piの操作環境(1) PC的な操作環境（GUI）
HDMIディスプレイ
Raspberry PiHDMIUSB

キーボード

USB

マウス

(2) 組み込み的な操作環境（CUI）
USB-UART変換器
USB

Raspberry Pi

UARTPCUSB
WLAN
WLAN-USBドングル
第五回ROS勉強会@名古屋 2015/4/11

8

Raspberry PiへのROSインストール■ROS（Hydro)の場合、バイナリーパッケージがないのでソースからのビルドになりますので結構時間がかかります。
手順も複雑なので詳細は以下のリンクを参照ください。

http://forestofazumino.web.fc2.com/ros/ros_install.html■最新のRaspberry Pi 2 Model B の場合はUbuntu14.04とUbutuで動作確認されたROS(Indigo)のバイナリーパッケージがありますのでインストールは容易です。

第五回ROS勉強会@名古屋 2015/4/11

9

TurtleRealで学べる３つの技術的ポイント (2)(1) Raspberry Pi でのROS利用(2) 異種マシン間でROSを協調させて動かす(3) パッケージの使い回し（TurtleSimの操作ソフトを流用）

第五回ROS勉強会@名古屋 2015/4/11

10

複数マシン間のメッセージ通信

ROSではネットワークで繋がれたマシンのどこにノードがあってもメッセージを送ることが出来ますので、 遠隔操作、モニタリング、負荷分散などが簡単に出来ます。
単一マシン
ノード
１

ノード
２

メッセージ

トピック

第五回ROS勉強会@名古屋 2015/4/11

論理的には等価マシン１

マシン２

ノード
１

ノード
２

メッセージ

ネットワーク11

Raspberry PiとノートPCをつなぐ(1) 各マシンの/etc/hostsに以下例のようにIPアドレスとホスト名を記載します。
192.168.1.10 NotePC
192.168.1.11 RaspberryPi(2) ノートPC側をマスターにする場合、各マシンで以下のコマンドで環境変数ROS_MASTER_URIを設定します。
$ export ROS_MASTER_URI=http://NotePC:11311(3) 以下のコマンドでノートPCでマスターを起動します。
$ roscore

ネットワークが正常に繋がって入れば、以上で 2台のマシン間が繋がります。
第五回ROS勉強会@名古屋 2015/4/11

12

TurtleRealで学べる３つの技術的ポイント (3)(1) Raspberry Pi でのROS利用(2) 異種マシン間でROSを協調させて動かす(3) パッケージの使い回し（TurtleSimの操作ソフトを流用）

第五回ROS勉強会@名古屋 2015/4/11

13

TurtleSimのグラフ図

TurtleSimのグラフ（ノード、トピックの接続状態）をrqt_graphで可視化すると以下のようになります。

操作ノード

トピック

シミュレータノード

ここをTurtleRealの制御ノードで置き換えます。

第五回ROS勉強会@名古屋 2015/4/11

14

メッセージ構造

TurtleSimで使っている位置・姿勢指令のメッセージ構造
geometry_msgs/Twist ← メッセージ名
geometry_msgs/Vector3 linear
float64 x ← X位置
float64 y ← Y位置
float64 z ← Z位置（今回未使用）
geometry_msgs/Vector3 angularfloat64 x ← X軸回りの回転角（今回未使用）
float64 y ← Y軸回りの回転角（今回未使用）
float64 z ← Z軸回りの回転角

第五回ROS勉強会@名古屋 2015/4/1115

TurtleRealにロボットとして必要な機能(1) 車輪で位置・姿勢を変える(2) 位置・姿勢検出(3) 車輪駆動用モーター制御回路(4) Raspberry Piとモーター制御回路のインターフェース(5) バッテリー駆動(6) メッセージを指令値とする位置・姿勢制御

第五回ROS勉強会@名古屋 2015/4/11

16

機能の実現手段 (1)(1) 車輪で位置・姿勢を変える→２軸車輪による移動(2) 位置・姿勢検出→USB光学マウス(3) 車輪駆動用モーター制御回路→Hブリッジ回路でPWM制御(4) Raspberry Piとモーター制御回路のインターフェース→Raspberry PiのGPIO直結(5) バッテリー駆動→モータ―電源は6Vバッテリー直結→その他は低損失の5Vレギュレーターを使用(6) メッセージを指令値とする位置・姿勢制御→位置計算ノード→位置制御ノード
第五回ROS勉強会@名古屋 2015/4/11

17

二次元平面による位置・姿勢の変更

二次元平面で最短かつ同時に位置・姿勢を変えるには３自由度(X, Y, Yaw)が必要です。
自動車（2自由度）の場合、姿勢変更のために距離を長くして経路を調整することで姿勢を変えています。

YZYaw

X
第五回ROS勉強会@名古屋 2015/4/11

Y

経路計算が面倒、タイヤ摩擦による誤差が大きい。

X
18

２軸車輪による位置・姿勢の変更

２軸車輪によるロボットは車輪２軸を逆回転させることでYaw回転を実現します。従って位置・姿勢制御は以下の３ステップで行いますが制御は簡単になります。

YY
位置２

ステップ３（回転）ステップ２（前進）位置１

ステップ１（回転）X

第五回ROS勉強会@名古屋 2015/4/11

X
19

機能の実現手段 (2)(1) 車輪で位置・姿勢を変える→２軸車輪による移動(2) 位置・姿勢検出→USB光学マウス(3) 車輪駆動用モーター制御回路→Hブリッジ回路でPWM制御(4) Raspberry Piとモーター制御回路のインターフェース→Raspberry PiのGPIO直結(5) バッテリー駆動→モータ―電源は6Vバッテリー直結→その他は低損失の5Vレギュレーターを使用(6) メッセージを指令値とする位置・姿勢制御→位置計算ノード→位置制御ノード
第五回ROS勉強会@名古屋 2015/4/11

20

マウスによる位置・姿勢計算

位置・姿勢は車軸から離れた場所に配置した光学マウスの移動量mx, myから以下のように計算します。

Y移動先位置(x, y)

θ = π / 2 - mx / L [rad]x = my x cos(θ)
y = my x sin(θ)θmx：マウスX方向移動量
my：マウスY方向移動量
L：マウスレンズ・車軸間距離
θ：ロボット回転角

myLmx
マウス
レンズ位置

第五回ROS勉強会@名古屋 2015/4/11

X

21

機能の実現手段 (3)(1) 車輪で位置・姿勢を変える→２軸車輪による移動(2) 位置・姿勢検出→USB光学マウス(3) 車輪駆動用モーター制御回路→Hブリッジ回路でPWM制御(4) Raspberry Piとモーター制御回路のインターフェース→Raspberry PiのGPIO直結(5) バッテリー駆動→モータ―電源は6Vバッテリー直結→その他は低損失の5Vレギュレーターを使用(6) メッセージを指令値とする位置・姿勢制御→位置計算ノード→位置制御ノード
第五回ROS勉強会@名古屋 2015/4/11

22

Hブリッジ回路によるモーター駆動

Hブリッジ回路でモーターの前進、後進、ブレーキ制御をします。
前進＋＋

Ｍ

―＋

後進

Ｍ

―
回生ブレーキ＋Ｍ―
第五回ROS勉強会@名古屋 2015/4/11

空転Ｍ―
23

機能の実現手段 (4)(5)(1) 車輪で位置・姿勢を変える→２軸車輪による移動(2) 位置・姿勢検出→USB光学マウス(3) 車輪駆動用モーター制御回路→Hブリッジ回路でPWM制御(4) Raspberry Piとモーター制御回路のインターフェース→Raspberry PiのGPIO直結(5) バッテリー駆動→モータ―電源は6Vバッテリー直結→その他は低損失の5Vレギュレーターを使用(6) メッセージを指令値とする位置・姿勢制御→位置計算ノード→位置制御ノード
第五回ROS勉強会@名古屋 2015/4/11

24

ハードウェア構成

TurtleRealのハードウェア構成は以下のようになります。
メインはHブリッジ回路内臓のモータードライバーと電源回路です。
Mouse

Motor R
USB
Hub

WLAN

GPIOUSB

RaspberryPi

MotorDriver
Motor L

6V

Battery

第五回ROS勉強会@名古屋 2015/4/11

Regulator

5V

25TurtleReal回路図
Mouse

Ｃ
WLAN

Raspberry Pi

USB HubＣＣUSB
Host
VCC
D+DGND

GPIO7
GPIO8
PWM

Ｃ
GPIO25
GPIO24

NJM2670
VSA
INA1
INA2

OUTA1
OUTA2

SENSEAENABLEATSDSRM
VCC Ｃ
OUTB1
VSB
OUTB2
INB1
INB2 SENSEB

Motor RＣ

Motor LＣENABLEB GND
Micro USB
VCC GND

5V Regulator

6V

1000uF 100uF

第五回ROS勉強会@名古屋 2015/4/11

0.1uF

1000uF26

機能の実現手段 (6)(1) 車輪で位置・姿勢を変える→２軸車輪による移動(2) 位置・姿勢検出→USB光学マウス(3) 車輪駆動用モーター制御回路→Hブリッジ回路でPWM制御(4) Raspberry Piとモーター制御回路のインターフェース→Raspberry PiのGPIO直結(5) バッテリー駆動→モータ―電源は6Vバッテリー直結→その他は低損失の5Vレギュレーターを使用(6) メッセージを指令値とする位置・姿勢制御→位置計算ノード→位置制御ノード
第五回ROS勉強会@名古屋 2015/4/1127

全体ソフトウェア構成

全体のソフトウェア構成は下図のようになります。
PCの「turtlesim_teleop_key 」とTurtleRealの「制御プログラム」がメッセージ通信を行います。
PC

TurtleReal

turtlesim_teleop_key

制御プログラム
ROSROSsshsmbLinuxLinuxネットワーク
第五回ROS勉強会@名古屋 2015/4/1128

制御プログラム構成

TurtleRealの制御プログラムの構成は下図のようになります。
制御プログラム

マウス入力

位置計算ノード

現在
位置・姿勢メッセージ

位置制御ノード

モーター
制御用
GPIO出力

位置・姿勢
指令メッセージ

第五回ROS勉強会@名古屋 2015/4/1129

位置計算ノードのマウス入力

マウスの移動量はデバイスファイル/dev/input/eventN(N>=0 ）から読み取れます。
イベント構造体
デバイスファイル
/dev/input/eventNread( )

struct input_event {struct timeval time;__u16 type;__u16 code;__s32 value;};time = 入力のあった時間
type = EV_REL
code = REL_X / REL_Y
REL_X：マウスX軸方向
REL_Y：マウスY軸方向
value = マウスの相対移動動量

第五回ROS勉強会@名古屋 2015/4/1130

位置制御ノードのGPIO入出力Raspberry Piでは仮想ディレクトリ/sys/class/gpio を通してGPIOにアクセス出来ます。
(1) ポートオープン
Write( )/sys/class/gpio/export

ポート番号(2) 入出力モード設定
入出力方向 Write( )(“in” / “out”)/sys/class/gpio/gpio7/direction(3) ポート出力
Write( )/sys/class/gpio/gpio7/value

出力値(4) ポート入力
Read( )
入力値
第五回ROS勉強会@名古屋 2015/4/11/sys/class/gpio/gpio7/value
31位置制御ノードの位置制御 （１）■モーター軸がウォームギアなのでバックドライバビリティがありません。（出力軸を回してもモーターは回転しない。）

出典Wikipedia「ウォームギア」より■ローターイナーシャが小さいのでモータドライバーの回生ブレーキによりモーター自体は急速に減速します。
■停止指令が出てからモーターが５回転で停止と仮定すると減速比661:1とタイヤ直径58mmから停止距離は下式のようになります。
Ls = π x 58mm x 5回転 / 661 = 1.38mm
第五回ROS勉強会@名古屋 2015/4/1132

位置制御ノードの位置制御 （２）■ギアボックスのバックラッシュが実 測値では±3mmなので停止精度を6mmより小さくするのはかなり面倒です。

バックラッシュによる移動量以上から停止精度の目標は±3mmとしました。
■ロボットの重量も315gと軽いので慣性力の影響も少なく位置ループ制御は必要なさそう です。（指令位置に近づいたらモーターを停止させるだけで十分な停止精度が出る。）
第五回ROS勉強会@名古屋 2015/4/1133

TurtleSimの製作

TurtleSimの製作

第五回ROS勉強会@名古屋 2015/4/1134

TurtleReal構造（基板兼シャーシーとギアボックス）

ガラスエポキシ基板をシャーシとして小型のギアボックスを２つ付けています。

第五回ROS勉強会@名古屋 2015/4/1135

TurtleReal構造（主要回路）

基板中央にモータードライバーを付け基板右側にアルミの放熱板を立てて低損失レギュレーターを付けています。
低損失レギュレーター

モータードライバー

アルミ放熱板第五回ROS勉強会@名古屋 2015/4/1136

TurtleReal構造（位置検出用マウス基板）

マウスの内部基板です。点線の部分で切り取り、位置検出器のみをロボット底面に固定します。
この部分のみ使います。

ここで切断

第五回ROS勉強会@名古屋 2015/4/1137

TurtleReal構造（マウス基板取り付け）

位置検出用マウス基板はアルミ板で挟んで底面に固定しています。また、アルミ板にはマウスから剥がした樹脂製スベリ板を付けています。
マウス基板固定板

樹脂製スベリ板

第五回ROS勉強会@名古屋 2015/4/1138

TurtleReal構造（バッテリーケース固定）

バッテリーケースはコの字状に曲げたアルミ板に貼り付け、基板上におきます。バッテリーケースが動かない用にケース片側を放熱板にベルクロテープで固定しています。
ベルクロテープで固定

第五回ROS勉強会@名古屋 2015/4/1139

TurtleReal構造（Raspberry Pi取り付け）

基板の上にRaspberry Piを金属スペーサーで浮かせて取り付けています。

第五回ROS勉強会@名古屋 2015/4/1140

TurtleReal構造（USBハブ）

今回使用したRaspberry PiにはUSBポートが１つしかないので以下のようにしてUSBハブを取り付けます。
USBハブ

USB折り曲げコネクタ

無線LANドングル

第五回ROS勉強会@名古屋 2015/4/1141

TurtleReal構造（本体右側面）

タイヤ以外の全ての部品が付いた状態の右側面です。
USBハブ

電源スイッチ
低損失レギュレーター

第五回ROS勉強会@名古屋 2015/4/1142

TurtleReal構造（本体左側面）

タイヤ以外の全ての部品が付いた状態の左側面です。

第五回ROS勉強会@名古屋 2015/4/1143

TurtleReal構造（完成）

タイヤを取り付けて完成！

第五回ROS勉強会@名古屋 2015/4/1144

主要部品コスト
以下はRaspberry Piと、その周辺を除いたコストです。
小型化にこだわらなければ、あと¥1600は安くなります。

第五回ROS勉強会@名古屋 2015/4/1145

結論

Raspberry Piと合わせても\5000程度でROS搭載ロボットが作れます。

第五回ROS勉強会@名古屋 2015/4/1146

TurtleRealデモンストレーション

TurtleRealのデモンストレーション

第五回ROS勉強会@名古屋 2015/4/1147

ご静聴ありがとうございました。
詳しくは「安曇野 ROS」で検索！