えもいえんじにあ

忘れっぽいエンジニアのメモblogです。仮想通貨とROSに興味があります。

ROSでRoombaを動かす

定番ですが、ROSでRoombaを制御してみました。
f:id:r17u:20170617221602j:plain

環境

Ubuntu 16.04
ROS Kinetic

ROSのExampleでは5XXシリーズがよく紹介されているが、当方のルンバは「Roomba 780 12年製」。
昨年の夏にヤフオクにて15000円でゲットしました。amazonでも入手可。

iRobot Roomba 自動掃除機 ルンバ 780

iRobot Roomba 自動掃除機 ルンバ 780

PCとルンバをつなげるためのシリアルケーブル。
cp2102が使われているものをamazonで入手しました。

セットアップ

以下2つのパッケージをcatkin_ws/srcにダウンロードして展開。
GitHub - NetBUG/roomba_500_series: Refreshed project to be built within Catkin workspace
GitHub - NetBUG/cereal_port: Updated to meet catkin requirements

ビルド。

$ cd ~/catkin_ws
$ catkin_make

シリアルケーブルをPCに挿し、以下でアクセス権を取得。

$ sudo chmod a+rw /dev/ttyUSB0

以下を参考にルンバのシリアルポートにケーブルを繋げる。
趣味で作るロボット用ソフトウェア: ルンバの制御について

コネクタ無くてもジャンパピンでいけます。
f:id:r17u:20170617221722j:plain

正常にシリアルケーブルが繋がっているか以下で確認。

$ dmesg | grep tty
[    0.000000] console [tty0] enabled
[ 5188.227001] usb 2-1.2: cp210x converter now attached to ttyUSB0
[ 5201.881354] cp210x ttyUSB0: cp210x converter now disconnected from ttyUSB0
[ 5282.413205] usb 2-1.2: cp210x converter now attached to ttyUSB0

動作確認

ルンバの電源を入れる。
念の為タイヤを地面から浮かせて置く。

ROSを起動。

$ roscore

別端末でルンバ用のノードを起動。
成功すると以下のように表示されます。

$ rosrun roomba_500_series roomba500_light_node
[ INFO] [1497691731.874399741]: Roomba for ROS 2.01
[ INFO] [1497691732.150674646]: Connected to Roomba.

新しい端末でコマンドを送る。
このコマンドで動かなければ、一度ルンバのボタンを押して電源を切り、
再度ボタンを押してランプ点灯を確認した後、上のroomba500_light_nodeの手順を行います。何度か繰り返すと動きました。

$ rostopic pub -1 cmd_vel geometry_msgs/Twist '[0.1, 0, 0]' '[0, 0, 0]' && rostopic pub -1 cmd_vel geometry_msgs/Twist '[0, 0, 0]' '[0, 0, 0]'
publishing and latching message for 3.0 seconds
publishing and latching message for 3.0 seconds

タイヤが動いているときにrqt_graphでノード一覧を確認。

$ rosrun rqt_graph rqt_graph

f:id:r17u:20170617190955p:plain

上手く動いたことを確認したので、起動しているノードをすべて終了して、ルンバの電源もoffにする。

ジョイスティックで動かしてみる

亀を動かしたときのノードをベースにする。

~/catkin_ws/src/learning_joy/src/turtle_teleop_joy.cpp を、
以下のように19, 35, 47行を追加修正。

ビルド。

$ cd ~/catkin_ws
$ catkin_make

launchを起動。

$ roslaunch learning_joy turtle_joy.launch

ルンバの電源を入れて、
接続用のノードを起動。

$ rosrun roomba_500_series roomba500_light_node
[ INFO] [1497702693.051808634]: Roomba for ROS 2.01
[ INFO] [1497702693.334845298]: Connected to Roomba.

ジョイスティックを動かすとそれに合わせてルンバが動きます。

ルンバの動きと多少ずれるが裏で亀も動いてる。
f:id:r17u:20170617213333p:plain

rqt_graphでノード一覧を確認。

$ rosrun rqt_graph rqt_graph

f:id:r17u:20170617213508p:plain

ということで無事に動かせた。