ROS2でルンバを動かすパッケージを作成したので、議事録的にまとめました。
環境
・PC : Rasberry Pi3 Model B
・OS : Ubuntu 18.04
・ROS2 : dashing
・Roomba : Roomba606
おそらくRoomba606以外でも動きますが、動作確認は実施していませんのでご了承ください。
ハードウェアの選定
下記の記事・資料をもとに必要な部品構成を選定しました。
・ROSを使ってルンバが操作できるまで feat. Raspberry Pi3とPS4コントローラーとUSBカメラ
・ROS2ではじめよう 次世代ロボットプログラミング
部品 | 名称 | 役割 |
---|---|---|
Roomba | Roomba606 | 今回動かしたいRoomba本体 |
制御用PC | Raspberry Pi3 Model B | ルンバ制御するためのPC |
モニタ用PC | Desktop PC | Raspberry Piのプログラムを起動/Roombaの状態を可視化する |
Joy Stick | PS4コントローラ | Roombaに制御指示(速度・角速度)を送る |
通信ケーブル 1 | USB to DIN | Roomba-制御用PC 通信ケーブル |
通信ケーブル 2※ | USB to Micro USB | 制御用PC-PS4コントローラ 通信ケーブル |
バッテリー | モバイルバッテリー | Raspberry Pi用バッテリー |
電源ケーブル | USB to Micro USB | Raspberry Pi-バッテリー 電源ケーブル |
今回のハードウェア構成は下記になります。
モニタ用PCはUbuntu18.04/ROS2(dashsing)/sshがセットアップされているものであればOKです。
Raspberry Piを使わない場合、制御用PCとモニタ用PCはThinkPadなどのノートPCにて代替可能です。
※通信ケーブル2について
PCとPS4コントローラ間をBuletoothにて通信可能なds4drvというパッケージがあるので、PC側のBluetooth機能を有効にできる場合、通信ケーブル2は不要です。Raspberry Pi側の問題なのか、Bluetoothを有効にできなかったため、PS4との通信を有線にて行うために購入しました。上記の環境で問題なくRaspberry PiとPS4間をds4drvにて通信可能な方がいましたら解決方法を教えていただけると幸いです。
Raspberry Piのセットアップ
SDカード書き込み
ROS2にてルンバを制御するため、Ubuntu18.04 serverを入れます。
下記事を参照。操作はUbuntu18.04が入ったPC上で行います。
[Raspberry Pi3へのUbuntu18.04 serverの導入]
(https://qiita.com/Jumpei-Arima/items/790236ac66bcc9ec434e)
ROS2(Dashing)のインストール
公式ホームページに従ってインストールすれば問題なくできると思います。
ROS2作業ディレクトリを作成
ROS2用の作業ディレクトリを作成します。
今後、作業ディレクトリ名をros2として説明をしていきます。
$ mkdir -p ~/ros2/src && cd ~/ros2
$ colcon build
$ . install/setup.bash
ルンバ制御用ノードのインストール
ルンバ制御用ノードを制御用PC(RaspberryPi)にインストールします。
ルンバの制御用ドライバとして代表的なのに
・libcreate
・PyRoombaAdapter
があります。
create_autonomyはlibcrateをラッパーしてROS1にて使用可能なパッケージとなっているため、今回はこちらをROS2にて利用できるように書き換えたパッケージを使用します。
(youtalkさんがすでにgit hub上にros2対応のcreate_autonomyをアップしていますが、使い方を間違えている?or動かないため、こちらで書き換えたものを使用していきます。)
libcreateのインストール
ros2の作業ディレクトリにlibcreateをインストールしてください。
$ cd ~/ros2/src/
$ git clone https://github.com/AutonomyLab/libcreate
$ cd ~/ros2
$ colcon build
create_autonomyのインストール
create_autonomyのbranchがdashing-develになっているか確認
してからコンパイルを実施してください
$ cd ~/ros2/src
$ git clone https://github.com/Sadaku1993/create_autonomy
$ cd ~/ros2
$ colcon build
$ . install/setup.bash
ルンバをコマンドから動かす
ルンバがコマンドからの指示受け取り、動作するか確認します。
USBのアクセス権を取得
・USB-DINシリアル変換ケーブルをルンバとRaspberry Piに繋ぐ
・USBのアクセス権を付与
$ sudo chmod a+rw /dev/ttyUSB0
アクセス権を毎回付与するのは面倒なので、udevで設定してしまった方が楽です。
(参考:USBシリアルデバイスの権限設定)
create_autonomyの起動
create_autonomyを起動します。
モードに関するエラーが出ますが、動作には問題ありません。今後修正します。
$ ros2 launch roomba_600_driver roomba_600_driver.launch.py
直進コマンドをルンバに送る
下記コマンドにてルンバに直進する指示を送ります。
正しく通信ができている場合、ルンバが動き出すので周辺環境に気をつけて起動してください。
$ ros2 topic pub /cmd_vel geometry_msgs/Twist '{linear: {x: 0.2}, angular: {z: 0.0}}' -r 100
ルンバが真っ直ぐ動き始めたでしょうか?
あとはPS4コントローラから動かせれば完璧です。
PS4コントローラからルンバを動かす
PS4コントローラの指示をルンバに伝え、ユーザの思うがままにルンバを動かせるようにします。
PS4コントローラの認識
Raspberry PiにPS4コントローラを接続し、コントローラが認識されているか確認します。
基本コントローラは/dev/input/js0として認識されます。
下記コマンドにて/js0が表示されていればOKです。
(環境によっては異なる可能性があります)
$ ls /dev/input
by-id event0 event10 event12 event14 event16 event18 event2 event21 event3 event5 event7 event9 mice mouse1
by-path event1 event11 event13 event15 event17 event19 event20 event22 event4 event6 event8 js0 mouse0
Joyパッケージにてコントローラの信号が出力されているか確認
PS4コントローラの信号をros2のメッセージとして出力できているか確認します。
1つ目のターミナルにてjoy nodeを起動
$ ros2 run joy joy_node
2つ目のターミナルにて、コントローラの信号が出力されているかを確認
$ ros2 topic echo /joy
sensor_msgs/msg/Twist型でコントローラの信号が出力されていることがわかります。
出力が確認できたら上記2つのターミナルは閉じてください。
PS4コントローラにてルンバを動かす
joy nodeはコントローラの出力をsensor_msgs/msg/Joy型にて出力します。create_autonomyはgeometry_msgs/msg/Twist型にて速度と角速度受け取る仕様です。
sensor_msgs/msg/Joy⇨geometry_msgs/msg/Twistに変換するプログラムを起動します。
(※joy nodeも一緒に立ち上がります)
$ ros2 launch rommba_600_driver teleop.launch.py
実際に動かす
-
Raspberry Piをしてsshで繋ぐ
-
PS4コントローラを繋ぐ
-
ルンバの電源を入れる
-
USB-DINシリアル通信ケーブルを繋いで、アクセス権を取得する
$ sudo chmod a+rw /dev/ttyUSB0
5.ルンバの電源を入れてから、ルンバ制御パッケージを起動
$ ros2 launch roomba_600_driver roomba_600_driver.launch.py
6.twist変換ノードを起動
$ ros2 launch roomba_600_driver teleop.launch.py
まとめ
ROS2にてRoombaを動かすことができるようになりました。
これまでROS1を使っている人でROS2への移行に移り始めないといけないと思っている人にも
ちょうど良いレベルの題材となっているので参考にしていただけたら幸いです。
参考資料
先駆者に感謝いたします。
・ROSを使ってルンバが操作できるまで feat. Raspberry Pi3とPS4コントローラーとUSBカメラ
・ROS2ではじめよう 次世代ロボットプログラミング