タグアーカイブ raspberry pi

著者:yamamoto.yosuke

ルンバ 900 シリーズを ROS で遠隔操作ロボットに – 遠隔操縦編

本シリーズ前回の記事では 900 シリーズのルンバと Ubuntu PC を USB ケーブルで 接続して ROS からルンバを有線操縦する方法を紹介しました.

今回の記事ではルンバが独立して動きやすいようにバッテリー駆動のラズベリーパイ(ラズパイ・Raspberry Pi)をルンバと USB 接続し,併せて USB カメラもそのラズパイに接続することで,ルンバ 900 シリーズを WiFi を介した ROS 遠隔操作ロボットのようにしてみる様子を紹介します.

実行環境

前回の記事においてルンバを Ubuntu PC から ROS を使って USB 有線操縦することを目的としたハードウェア・ソフトウェア構成は以下のようになっていました.

  • ルンバ 961(→今回はラズパイに接続)
  • micro USB ケーブル(→今回はラズパイとルンバを接続するために使用)
  • PC: Dell Inspiron 13 5390
  • OS 等: Ubuntu 24.04 + ROS Jazzy (ROS2)
  • コントローラ(どちらか1つ)
    • Xbox360 互換ゲームパッド( 8bitDo SN30 pro – USB 有線 )
    • 3Dマウス( 3DConnexion SpaceMouse Wireless を有線で使用 )
  • 使用コード: https://github.com/y-yosuke/create_robot/tree/humble-add-setmode

今回はこれらのハードウェアに加えて下記のラズパイとその周辺機器のセットをルンバに接続したシステムも使用します.

  • Raspberry Pi 4B
    • OS をインストールする microSD カードは最大読込 100 MB/s 以上のスペックを推奨
  • OS 等: Ubuntu 24.04 + ROS Jazzy (ROS2)
  • USB 充電バッテリー( Anker Power Bank (10000mAh, 30W) )
  • USB カメラ( Buffalo WEBカメラ BSW505MBK )
  • 使用コード: https://github.com/y-yosuke/create_robot/tree/humble-add-setmode

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 と必要なソフトウェアをインストール・ビルドします.

Raspeberry Pi への Ubuntu 24.04.1 のインストール

Ubuntu 24.04 ディスクイメージを microSD カードに書き込みます.
Install Ubuntu on a Raspberry Pi を参照して microSD カードに Ubuntu 24.04.1 以降ののインストーライメージを書き込みます.

Raspeberry Pi へのソフトウェアのインストール・ビルド

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

その場合は本記事最後にあるトラブルシューティングの項目を参考に nanogedit その他お好みの 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 側にはゲームコントローラなどを接続します.

Raspberry Pi 4B + USB カメラ + バッテリー <==(USBケーブル)==> ルンバ 900 シリーズ
 ↑ /// ( WiFi ネットワーク ) /// ↓
Ubuntu PC + ゲームコントローラなど

次の画像はルンバ側のハードウェアを接続した様子です.

次の画像は Ubuntu PC 側のハードウェアを接続した様子です.この画像内の PC ディスプレイには後述する「ソフトウェアの実行」を行ったときのルンバに設置した USB カメラからの映像が映し出されています.

Raspberry Pi への ssh 接続とデバイスの権限設定

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 互換ゲームパッド使用の場合 >

Xbox360 互換ゲームパッドを用いてルンバに対する速度指令を出すノードを実行するのに joy_teleop.launch を起動します.

$ source ~/roomba_ws/install/setup.bash
$ ros2 launch create_bringup joy_teleop.launch
注)デッドマンスイッチ(現設定 L1 ボタン) を押しながらアナログスティック R を操作

< 3Dマウス( 3DConnexion SpaceMouse Wireless )使用の場合 >

3DConnexion SpaceMouse を用いてルンバに対する速度指令を出すノードを実行するのに 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 で終了してください.


付録-A. 掃除中ルンバの ROS トピック発信

ルンバから派生した趣味や教育用をターゲットとした 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

付録-B. トラブルシューティング

ターミナルが起動しない場合 → locale の LANG 設定を確認

Ubuntu 24.04.1 でターミナルが起動しなかったのですが,その時は /etc/default/locale の内容を LANG="en_US.UTF-8" に修正したら起動するようになりました.

/etc/default/locale

LANG="en_US.UTF-8"

gnome-text-editor が起動しない → 他のテキストエディタを使用

gnome-text-editor がコマンドラインから起動できない場合は他のテキストエディタ nano や gedit などを使用してください.

1. nano を使う
$ nano ~/roomba_ws/src/libcreate/include/create/packet.h
2. gedit を使う
$ sudo apt update
$ sudo apt install gedit
$ gedit ~/roomba_ws/src/libcreate/include/create/packet.h

今回の記事はここまでです.