本シリーズ前回の記事では 900 シリーズのルンバと Ubuntu PC を USB ケーブルで 接続して ROS からルンバを有線操縦する方法を紹介しました.
今回の記事ではルンバが独立して動きやすいようにバッテリー駆動のラズベリーパイ(ラズパイ・Raspberry Pi)をルンバと USB 接続し,併せて USB カメラもそのラズパイに接続することで,ルンバ 900 シリーズを WiFi を介した ROS 遠隔操作ロボットのようにしてみる様子を紹介します.
前回の記事においてルンバを Ubuntu PC から ROS を使って USB 有線操縦することを目的としたハードウェア・ソフトウェア構成は以下のようになっていました.
今回はこれらのハードウェアに加えて下記のラズパイとその周辺機器のセットをルンバに接続したシステムも使用します.
OS などの環境については本記事執筆直近の動作検証では Ubuntu 24.04 と ROS Jazzy (ROS2) の組み合わせで行っていますが,過去に行った検証では Ubuntu 22.04 と ROS Humble の組み合わせでも動作確認しています.
使用コードについては前回の記事と同様に今回のシステム構成において使いやすいように Create Robot のソフトウェア GitHub リポジトリ https://github.com/AutonomyLab/create_robot からフォーク https://github.com/y-yosuke/create_robot/tree/humble-add-setmode して利用しています.
今回追加した Raspberry Pi 4B に Ubuntu 24.04 + ROS Jazzy と必要なソフトウェアをインストール・ビルドします.
Ubuntu 24.04 ディスクイメージを microSD カードに書き込みます.
Install Ubuntu on a Raspberry Pi を参照して microSD カードに Ubuntu 24.04.1 以降ののインストーライメージを書き込みます.
Raspberry Pi への ROS Jazzy と必要なパッケージのインストール・ビルドについては基本的に前回の記事のインストール手順 ルンバ 900 シリーズを ROS で遠隔操作ロボットに – USB 有線操縦編 : インストール・ビルド と同じですのでそちらを参照して進めてください.
1ヶ所 libcreate/include/create/packet.h
を編集するときに gnome-text-editor
がコマンドラインから起動できないことがありました.
$ gnome-text-editor ~/roomba_ws/src/libcreate/include/create/packet.h
その場合は本記事最後にあるトラブルシューティングの項目を参考に nano
や gedit
その他お好みの gnome-text-editor
以外のテキストエディタを使用してください.
Ubuntu 24.04.1 インストール時点では ssh サーバが入っていないのでインストールして「設定(Settings)」で ssh 接続を有効化してください.
$ sudo apt update $ sudo apt install openssh-server
今回使用するパッケージで依存関係記述から漏れていたパッケージ v4l2_camera
をインストールします.
$ sudo apt install ros-jazzy-v4l2-camera
Raspberry Pi にルンバ,USB カメラ,バッテリーを接続します.Ubuntu PC 側にはゲームコントローラなどを接続します.
次の画像はルンバ側のハードウェアを接続した様子です.
次の画像は Ubuntu PC 側のハードウェアを接続した様子です.この画像内の PC ディスプレイには後述する「ソフトウェアの実行」を行ったときのルンバに設置した USB カメラからの映像が映し出されています.
Ubuntu PC のターミナルからルンバと USB 接続されている Raspberry Pi に ssh 接続します.
下記の例では robotuser-rp4b
というホスト名をつけた Raspberry Pi に robotuser
というユーザ名で接続しています.ホスト名やユーザ名,接続時のパスワードは適宜読者の環境に沿ったもので実行してください.
ssh 接続ができたらルンバとのシリアル通信ポートの権限を chmod
で変更します.
Ubuntu PC: Raspberry Pi に ssh 接続するターミナル
$ ssh robotuser@robotuser-rp4b.local robotuser@robotuser-rp4b:~$ sudo chmod 777 /dev/ttyACM0
このターミナルの ssh は接続したままににします.
Raspberry Pi に ssh 接続したターミナルで次のコマンドを実行して create_1_camera.launch
を起動します.
Ubuntu PC: Raspberry Pi に ssh 接続したターミナル
robotuser@robotuser-rp4b:~$ source ~/roomba_ws/install/setup.bash robotuser@robotuser-rp4b:~$ ros2 launch create_bringup create_1_camera.launch
次にルンバを遠隔操作する側の Ubuntu PC 上の2つのターミナルで次のコマンドを実行してルンバに接続した Raspberry Pi のカメラ映像を表示しながらゲームパッドノードからルンバへの速度指令のトピックを発行します.
Ubuntu PC: ターミナル 1(カメラ映像の表示)
$ source ~/roomba_ws/install/setup.bash $ ros2 run rqt_image_view rqt_image_view
画像トピック名に image_raw
を選択するとウィンドウ内に映像が表示されます.
Ubuntu PC: ターミナル 2(速度指令発行ノードの実行)
ルンバへの速度指令を出すためのゲームパッドもしくは 3D マウスのノードを実行するためにターミナルをもう1つ開いて実行します.
< Xbox360 互換ゲームパッド使用の場合 >
joy_teleop.launch
を起動します.
$ source ~/roomba_ws/install/setup.bash $ ros2 launch create_bringup joy_teleop.launch
< 3Dマウス( 3DConnexion SpaceMouse Wireless )使用の場合 >
spacenav_telelop.launch
を起動します.
$ source ~/roomba_ws/install/setup.bash $ ros2 launch create_bringup spacenav_teleop.launch
次の動画ではルンバとラズパイのシステムが外部接続ケーブルが無く独立しており,Ubuntu PC 側のゲームパッドで操縦されルンバ上の USB カメラの映像も取得できている様子が見て取れると思います.
この動画内では撮影の都合で Ubuntu PC で操作を行っている操縦者の有視界内にルンバもありますが,Ubuntu PC とルンバは WiFi ネットワークを介してつながっているので例えば別の部屋などの視界外からもルンバ上の USB カメラからの映像や他の ROS トピックを参照しながら遠隔操縦できそうであることは想像できるのではないでしょうか.
ルンバ操作を終了するときは各ターミナルで実行しているプロセスを Ctrl+C で終了してください.
ルンバから派生した趣味や教育用をターゲットとした Create Robot は掃除機能を廃してしまっていますが今回使用しているのはお掃除ロボットのルンバそのものです.
ルンバが普通に掃除している間もその状態を Roomba Open Interface (ROI) を通じて取得できるのが ROI のパッシブモードです.
create_1_camera.launch
でも launch オプションで control_mode:=passive
を指定すると,ROI のパッシブモードでルンバを操作せずに通信してその状態を ROS トピックとして発行します.
Ubuntu PC: Raspberry Pi に ssh 接続したターミナル
robotuser@robotuser-rp4b:~$ source ~/roomba_ws/install/setup.bash robotuser@robotuser-rp4b:~$ ros2 launch create_bringup create_1_camera.launch control_mode:=passive
パッシブモードを実行中にルンバの CLEAN ボタンを押すか iRobot アプリから開始することで掃除が始まります.
create_1_camera.launch
パッシブモード時に発行される ROS トピックのリスト出力は次の様になっています.
Ubuntu PC: ターミナル 1
$ source ~/roomba_ws/install/setup.bash $ ros2 topic list /battery/capacity /battery/charge /battery/charge_ratio /battery/charging_state /battery/current /battery/temperature /battery/voltage /bumper /camera_info /check_led /clean_button /cliff /cmd_vel /day_button /debris_led /define_song /diagnostics /dock /dock_button /dock_led /hour_button /image_raw /ir_omni /joint_states /main_brush_motor /minute_button /mode /odom /parameter_events /play_song /power_led /robot_description /rosout /set_ascii /side_brush_motor /spot_button /spot_led /tf /tf_static /undock /vacuum_motor /wheeldrop
Ubuntu 24.04.1 でターミナルが起動しなかったのですが,その時は /etc/default/locale の内容を LANG="en_US.UTF-8"
に修正したら起動するようになりました.
/etc/default/locale
LANG="en_US.UTF-8"
gnome-text-editor がコマンドラインから起動できない場合は他のテキストエディタ nano や gedit などを使用してください.
$ nano ~/roomba_ws/src/libcreate/include/create/packet.h
$ sudo apt update $ sudo apt install gedit $ gedit ~/roomba_ws/src/libcreate/include/create/packet.h
今回の記事はここまでです.
新しい ROS パッケージ cis_camera( https://github.com/tork-a/cis_camera )をリリースしました.
この ROS パッケージは 株式会社シーアイエス( https://www.ciscorp.co.jp/ ) ToF (Time of Flight) カメラセンサ DCC-RGBD1 のためのドライバパッケージです.
DCC-RGBD1 は小型ながら広いレンジの深度画像が取得可能な ToF カメラセンサ(ディベロップメントキット)です.
本パッケージでは CIS ToF カメラセンサの ROS ドライバに加え,ノイズ除去,平面検出・除去,対象物点群抽出とフレーム座標算出のポイントクラウド処理ならびに,それらの処理結果を RViz で 3D 表示するためのサンプルプログラムおよび launch ファイルを同梱しています.
使い方は GitHub のドキュメントをご参照ください.
もし問題にぶつかった場合は GitHub Issues で報告をお願いします.
CIS ToF カメラセンサのハードウェアの入手などに関するお問い合わせは下記連絡先までお願いします.
ハードウェアに関するお問合せ先:株式会社シーアイエス 営業担当
メールアドレス:newbiz@ciscorp.co.jp
電話番号:042-664-5568