こんにちは、アールティの加藤です。
アールティが販売する小型移動プラットフォームロボットRaspberry Pi MouseのROS 2パッケージに、カメラによるライントレースサンプルを追加しました。このサンプルは実機とシミュレータの両方で動作します。本記事ではカメラによるライントレースサンプルの詳細や実行方法についてご紹介します。
Raspberry Pi Mouseの紹介
Raspberry Pi MouseはメインボードにRaspberry Piを使用した左右独立二輪方式の小型移動プラットフォームロボットです。全長13cm、重さ700gと小型であるため、持ち運びや開発スペースの確保も簡単です。
ROS 2パッケージを利用すると、たとえば次の動画のように、特定の色の物体を追従するような動作や周囲環境の地図を作成するSLAMなどが簡単に行えます。
Raspberry Pi Mouseの詳細な特徴については、下記の製品ページをご覧ください。
Raspberry Pi Mouseは下記の販売ページから購入できます。ROS 2パッケージは無償で公開しているため、購入前の参考にご利用ください。
カメラによるライントレースサンプルの紹介
今回追加されたライントレースサンプルでは、搭載したWebカメラで黒いラインを検出し、そのラインに沿ってRaspberry Pi Mouseを走行させることができます。実際の動作については下記の動画をご覧ください。
シミュレータ環境における動作については下記の動画をご覧ください。
Raspberry Pi MouseにWebカメラを搭載する際、オプションキット No.4 [Webカメラマウント]を使用すると簡単に取り付けることができて便利です! 詳しい情報は下記のリンクからアールティロボットショップの商品ページをご覧ください。
インストール方法
ROS 2環境のセッティングやパッケージのインストール方法は、下記のSoftware Tutorialsをご覧ください。
Raspberry Pi MouseのROS 2パッケージのリリース作業が完了し、ROSのリポジトリに反映され次第、サンプルパッケージは下記のコマンドでもインストールできる予定です。
sudo apt install ros-humble-raspimouse-ros2-examples
同じくシミュレータパッケージも下記のコマンドでインストールできるようになる予定です。
sudo apt install ros-humble-raspimouse-sim
シミュレータパッケージのインストールについては、下記のSoftware Tutorialsもあわせてご覧ください。
以上でインストールは完了です。
実機でカメラによるライントレースサンプルを動かす手順
次のコマンドを実行すると、カメラによるライントレースサンプルが実行されます。
ros2 launch raspimouse_ros2_examples camera_line_follower.launch.py video_device:=/dev/video0
ライン上にRaspberry Pi Mouseを置き、SW2を押してライントレースを開始します。 停止させる場合はSW0を押します。
シミュレータでカメラによるライントレースサンプルを動かす手順
まずはじめに、次のコマンドを実行してRaspberry Pi Mouseとライントレースのコースを配置したシミュレータ環境を表示します。
ros2 launch raspimouse_gazebo raspimouse_with_line_follower_field.launch.py use_rgb_camera:=true camera_downward:=true
GazeboとRVizが起動します。

GazeboとRViz
さらに、次のコマンドを実行してライントレースサンプルを実行します。
ros2 launch raspimouse_ros2_examples camera_line_follower.launch.py mouse:=false use_camera_node:=false
RVizでライン検出結果を表示できます。

ライン検出結果を表示
最後に、次のコマンドを実行してRaspberry Pi Mouseの走行を開始させます。
ros2 topic pub --once /switches raspimouse_msgs/msg/Switches "{switch0: false, switch1: false, switch2: true}"
Raspberry Pi Mouseを停止させたい場合は次のコマンドを実行します。
ros2 topic pub --once /switches raspimouse_msgs/msg/Switches "{switch0: true, switch1: false, switch2: false}"
ライントレースサンプルのカスタマイズ
このライントレースサンプルは、パラメータの変更やライントレースコースのカスタマイズが簡単に行えるように作成されています。ここでは例として、走行速度の変更とコースの作成についてご紹介します。
走行速度の変更
直進速度の最大値はデフォルトで0.05 [m/s]に設定されていますが、下記のコマンドを実行すると0.1 [m/s]に設定できます。
ros2 param set /camera_follower max_linear_vel 0.1
また、下記のコマンドを実行すると、ライントレースサンプルで設定できるパラメータを確認できます。
ros2 param list /camera_follower
実行結果は以下の通りです。
area_threshold max_angular_vel max_brightness max_linear_vel min_brightness use_sim_time
このように走行速度や輝度のしきい値などが簡単に設定できますので、ぜひご活用ください!
シミュレータ環境のライントレースコースの作成
ライントレースサンプルにあらかじめ用意されているサンプルコースを元にして、オリジナルのコースを簡単に作成することができます。

サンプルコース
サンプルコースはraspimouse_sim/raspimouse_gazebo/worlds/にあるline_follower_field1.sdfです。このSDFファイルを複製、もしくは直接編集してオリジナルのコースを作成します。SDFファイル内では、あらかじめ用意されている直線コースパネルと曲線コースパネルを組み合わせることでライントレースコースを作成できます。
直線コースパネルは下記のように記述して配置できます。
<model name="straight_1"> <include> <uri>model://course_straight_50x50cm</uri> </include> <pose>0 0 0.01 0 0 0</pose> </model>
曲線コースパネルは下記のように記述して配置できます。
<model name="curve_1"> <include> <uri>model://course_curve_50x50cm</uri> </include> <pose>0.5 0 0.01 0 0 0</pose> </model>
直線コースパネルと曲線コースパネルを組み合わせると、たとえば下図のようなオリジナルのコースが作成可能です。

オリジナルコースの例
このようにオリジナルのコースを簡単に作成してテスト走行できますので、ぜひお手元でお試しください!
おわりに
本記事ではRaspberry Pi MouseのROS 2パッケージに新しく追加されたカメラによるライントレースサンプルについてご紹介しました。このサンプルは実機のRaspberry Pi Mouseだけでなくシミュレータ環境でも動作します。お手元で簡単にお試しいただけますので、ぜひご活用ください。また、サンプルのソースコードは下記のGitHubリポジトリで公開しています。