タグアーカイブ pc

著者: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

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

著者:yamamoto.yosuke

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

iRobot 社のお掃除ロボット「ルンバ(Roomba)」は 700 シリーズ以前のモデルでは mini-DIN のインターフェースポートがありシリアル通信にて外部からルンバを操作するためのインタフェース Roomba Open Interface (ROI) が提供されていました.またルンバ 900 シリーズではシリアルポートが micro USB となり USB ケーブル経由で外部コンピュータと簡単につなげて ROI が利用できるようになっていました.

そしてルンバから派生した掃除機能を廃して趣味や教育用をターゲットとした Create ロボットもルンバと共通の ROI で操作可能です.なおかつ Create 向けとして ROI の ROS インタフェースが GitHub で提供されているので この ROI-ROS インタフェースを用いることでシリアルポートの付いているルンバを ROS から操作することが可能となっています.

本シリーズの記事では PC やラズパイから USB ケーブルで 900 シリーズのルンバに接続して ROS からルンバを操縦する方法を紹介します.

記事のシリーズ構成は次のようになる予定です.

  • ルンバを Ubuntu PC から ROS を使って USB 有線操縦する(→本記事)
  • ルンバを Raspberry Pi に接続して ROS を使って WiFi 経由で無線遠隔操作ロボットにする(→次回記事)

実行環境

ルンバを 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

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 して利用しています.

インストール・ビルド

Ubuntu 24.04 に ROS Jazzy のインストールする手順は下記リンク先の ROS 2 Documentation: Jazzy – Installation Ubuntu (deb packages) を参照して実行してください.

依存パッケージをインストールできるように rosdep をセットアップしておきます.

$ sudo apt install python3-rosdep
$ sudo rosdep init
$ rosdep update

ビルドのために colcon 関連パッケージをインストールします.

$ sudo apt install python3-colcon-common-extensions

ROS ワークスペースを作成して GitHub からコードをクローンし,インストール・ビルドを実行します.

$ source /opt/ros/jazzy/setup.bash
$ mkdir -p ~/roomba_ws/src
$ cd ~/roomba_ws/src/
$ git clone -b humble-add-setmode https://github.com/y-yosuke/create_robot.git
$ git clone https://github.com/AutonomyLab/libcreate.git
$ gnome-text-editor ~/roomba_ws/src/libcreate/include/create/packet.h
$ cd ~/roomba_ws/
$ rosdep install -r -y --from-paths src --ignore-src
$ colcon build
$ source ~/roomba_ws/install/setup.bash

2024.09.20 追記

上記手順の libcreate を git clone したあとに下記コマンドを追加しています.

$ gnome-text-editor ~/roomba_ws/src/libcreate/include/create/packet.h

本コマンドを実行するとテキストエディタが起動して修正が必要なファイル packet.h が開かれます.

下のように packet.h の 35行目 に #include <string> を挿入してファイルを保存してからテキストエディタを閉じます.

libcreate / include / create / packet.h

#define CREATE_PACKET_H

#include <mutex>
#include <string>

namespace create {
  class Packet {

これはビルドするのに必要な下記リンク先の修正のプルリクエストがまだ反映されていないための修正作業です.今後このプルリクエストが libcreate の master ブランチにマージされた後は不要となります.

ルンバの USB 有線操縦

ハードウェアのセットアップ

Ubuntu PC のソフトウェアのセットアップが終了したら Ubuntu PC にルンバとゲームパッドもしくは 3D マウスを接続します.

Ubuntu PC + ゲームパッド <==(USBケーブル)==> ルンバ 900シリーズ

ルンバ 900 シリーズの micro USB ソケットは上面右側にある細長いカバーを外すとあります.このカバーは工具なしで手で外すことができます.

デバイスの権限設定

ルンバが接続されているシリアルポートの権限を変更してユーザからもアクセス可能な状態にします.

$ sudo chmod a+rw /dev/ttyACM0
$ sudo usermod -a -G dialout $USER

ソフトウェアの実行

ターミナル 1

$ source ~/roomba_ws/install/setup.bash
$ ros2 launch create_bringup create_1.launch

launch 後,正常に 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 

spacenav_teleop.launch においてはデッドマン・スイッチの設定はないので SpaceMouse の前後・ヨー軸のねじり入力がそのままルンバへの速度指令として出力されます.

次の動画はゲームパットを用いてルンバを動かしたときのものです.デッドマン・スイッチの L1 を押しながらアナログスティック R を操作することでルンバへの速度指令が出力されている様子が見て取れるかと思います.

ルンバ操作を終了するときは各ターミナルで実行しているプロセスを Ctrl+C で終了してください.

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


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

著者:yamamoto.yosuke

パソコン1台で出来るロボットの学習素材集

ROS(ロス/Robot Operating System)の学習は実際にロボットがなくてもロボットのシミュレータが入手できるのでネットワークにつながるパソコンが1台あればできますので結構自習に向いています.この記事では ROS の学習を始める,進めるにあたり必要な情報がある Web へのリンクを中心に紹介します.

大まかに言うと次のインストールを行えば ROS の学習をスタートすることができます.

  • パソコンにオペレーティングシステムの Ubuntu Linux をインストール
  • Ubuntu Linux に ROS をインストール
  • ROS 上で動くロボットソフトウェアのインストール
    • → 紹介 ROS チュートリアル内にて

ROS と Ubuntu Linux のバージョンは後述する ROS 学習のチュートリアルが現時点では ROS Kinetic というバージョンを基本としているので下記の組み合わせをお勧めします.

  • Ubuntu 16.04
  • ROS Kinetic

ROS Melodic は ROS Kinetic と基本的な操作のほとんどは変わらないので ROS Kinetic で学習してから ROS Melodic に移行しても難なく可能です.

 

パソコンへの Ubuntu Linux のインストール

パソコンはどのようなものを使えば良いのか?については下記記事を参考にしてください.

ROS 導入ノートパソコン比較調査

ROS 導入ノートパソコン比較調査

最新高性能パソコンよりも数年型落ちや廉価の機種のほうが Ubuntu Linux をインストールしやすい傾向にあるように思います.

 

Ubuntu Linux への ROS のインストール

下記リンク先に各 ROS のバージョンにおけるインストール手順が書かれています.

また,Ubuntu のバージョンと ROS のバージョンには1対1の対応関係があるので組み合わせを気をつける必要があります.

 

ROS のチュートリアル

各チュートリアルを進めるとそれらの中で ROS シミュレータなどのインストールも行います.

TORK MoveIt チュートリアル

ROS の入門には TORK MoveIt チュートリアルをお薦めします.MoveIt は ROS のマニピュレーションロボット動作計画ソフトウェアです.このチュートリアルでは数種のロボットの ROS シミュレータのインストールや基本的な操作,プログラムでのロボット操作を学習することができます.TORK MoveIt チュートリアルではプログラミング言語に Python を用いていますが,プログラミングの経験がほとんどない人にもプログラムによるロボット操作の体験と学習ができるように構成しています.

ROS を初めて使う方に TORK MoveIt チュートリアルを学習したときのレポートも下記の記事に書いてもらっています.学習過程でいろいろと疑問をもった点などの体験を書いてもらいましたので参考にしてみてください.

初めてのROS(ROSチュートリアルを使って)

 

ROS-Industrial トレーニング(日本語版)

より発展的な ROS プログラミングを学習したい場合は ROS-Industrial トレーニングを行ってみるのも良いでしょう.この教材で取り上げられているプログラミング言語は主に C++ と Python です.C++ によるロボット制御や画像処理,3D ポイントクラウド処理などとそれらの組み合わせのプログラムの学習ができます.

ROS-Industrialのトレーニング教材を日本語訳しました!

 

ROS で質問したいことが出てきたら

ROS Discourse やチュートリアル,パッケージの GitHub Issues に質問を投稿してみてください.

 

入門的な実機マニピュレーションロボット

1台のパソコンだけ,シミュレータだけでなく入門的な実機マニピュレータを利用してみたいと思った方は入門的なマニピュレーションロボット2例の導入検証を行った記事を参考にしてみてください.

ROS 入門向けマニピュレータ導入検証