ROS2でルンバを動かすまで


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の導入

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

実際に動かす

  1. Raspberry Piをしてsshで繋ぐ

  2. PS4コントローラを繋ぐ

  3. ルンバの電源を入れる

  4. 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ではじめよう 次世代ロボットプログラミング