こんにちは、アールティの倉澤ズズくんです。
Raspberry Pi Mouse(通称:ラズパイマウス)が、最新のROS 2長期サポートディストリビューションであるJazzyに対応しました。
本ブログでは、Raspberry Pi MouseのROS 2パッケージの導入方法と、HumbleからJazzy移行に伴う変更点をご紹介します。
Raspberry Pi Mouseの紹介
Raspberry Pi MouseはメインボードにRaspberry Piを使用した左右独立二輪方式の小型移動プラットフォームロボットです。全長13cm、重さ700gと小型であるため、持ち運びや開発スペースの確保も簡単です。LiDARやカメラを搭載して幅広い開発ができ、学習や研究用途に使用可能です。
ROS 2パッケージを利用すると、たとえば次の動画のように、基本的な車体の制御や周囲環境の地図を作成するSLAMなどが簡単に行えます。
Raspberry Pi Mouseの詳細な特徴については、下記の製品ページをご覧ください。
Raspberry Pi Mouseは下記の販売ページから購入できます。ROS 2パッケージは無償で公開しているため、購入前の参考にご利用ください。
Jazzy版パッケージの紹介
Raspberry Pi Mouseに関連した6つのROS 2パッケージがJazzyに対応しました。各パッケージの詳細についてはそれぞれのREADMEをご覧ください。
- raspimouse2 : 制御用パッケージ
- raspimouse_ros2_examples : サンプル集パッケージ
- raspimouse_slam_navigation_ros2 : SLAMとナビゲーションのパッケージ
- raspimouse_description : ロボットモデルパッケージ
- raspimouse_sim : シミュレータ用パッケージ
- rt_usb_9axisimu_driver : 9軸IMUパッケージ
インストール方法
以下のコマンドでインストールできます。詳細なセットアップ方法はSoftware Tutorials
のRaspberry Pi Mouse項をご覧ください。
$ source /opt/ros/jazzy/setup.bash
$ mkdir -p ~/ros2_ws/src
$ cd ~/ros2_ws/src
# Download packages
$ git clone -b $ROS_DISTRO https://github.com/rt-net/raspimouse2.git
$ git clone -b $ROS_DISTRO https://github.com/rt-net/raspimouse_ros2_examples.git
$ git clone -b $ROS_DISTRO https://github.com/rt-net/raspimouse_slam_navigation_ros2.git
# Install dependencies
$ rosdep install -r -y --from-paths . --ignore-src
# make & install
$ cd ~/ros2_ws
$ MAKEFLAGS=-j1 colcon build --symlink-install
$ source ~/ros2_ws/install/setup.bash
上記の方法はソースコードを直接ビルドする方法です。ROS Buildfarmでのリリースが開始されると、以下のようにapt
コマンドで簡単にバイナリをインストールできます。
$ sudo apt install ros-jazzy-raspimouse-slam-navigation
こちらは12月中にインストールできるようになる予定です。
サンプルの動作手順例
例として、Raspberry Pi Mouseにカメラを搭載して物体追従を行うサンプルを紹介します。ここでは、カメラとしてLogicool HD WEBCAM C310Nを使用しています。
以下のコマンドを実行すると、Raspberry Pi Mouseがオレンジ色のボールを認識して追いかけます。詳しい実行方法についてはREADMEをご覧ください。
$ ros2 launch raspimouse_ros2_examples object_tracking.launch.py video_device:=/dev/video0
Raspberry Pi Mouseの変更点
Raspberry Pi MouseのHumbleからJazzy移行の際の変更点は以下の通りです。
Lifecycleノードによるslam_toolboxの起動
SLAMのパッケージのslam_toolboxがLifecycleノードを使用するように変更されたため、Raspberry Pi Mouseのlaunchファイル内でも起動方法が変更されました。
cmd_velトピックの変更
Raspberry Pi Mouseの速度を扱うトピックcmd_vel
のメッセージ型がTwist
からTwistStamped
になりました。
ros2_controllers
は、タイムスタンプ付きのメッセージTwistStamped
のみの対応となりました。それに伴い、ros2_controllers
に依存しているRaspberry Pi Mouseのcmd_vel
もTwistStamped
に変更しました。
Ignition GazeboからGazebo Simへの変更
使用するシミュレータの名前がIgnition Gazebo
からGazebo Sim
に変更されたため、ソースコード内での呼び出しを適宜変更しています。
Nav2による変更
ナビゲーションを行うパッケージNav2の変更に伴うRaspberry Pi Mouseの変更点です。
bt_navigatorの変更
Nav2のビヘイビアツリーを指定するノードであるbt_navigator
のファイルとライブラリの指定を削除しました。
ファイルを指定しない場合、Nav2のデフォルトのビヘイビアツリーが読み込まれるようになったため、default_nav_to_pose_bt_xml
とdefault_nav_through_poses_bt_xml
の記述を削除しました。
Nav2がデフォルトで用意しているビヘイビアツリーであればライブラリの読み込みを自動で行うようになったため、plugin_lib_names
の指定を削除しました。
collision_monitor(衝突監視)の追加
collision_monitor
(衝突監視)ノードが追加され、Raspberry Pi Mouseのナビゲーション時に緊急時の制御停止や減速をさせることができるようになりました。
Raspberry Pi Mouseのデフォルトプログラムでは実質的に機能しないようにプログラムしていますが、本機能の設定や使用方法は後日別の記事で触れようと思います。
use_sim_timeの指定
use_sim_time
を指定するように変更し、シミュレーションと実機動作時でタイムスタンプの時間の基準を明確に設定するようにしました。
use_sim_time
の設定はlaunchファイルの実行時に行えます。シミュレーション時にはtrue
、実機動作時にはfalse
を指定します。(何も指定しないときはデフォルトでfalseになります
)
$ ros2 launch raspimouse_navigation pc_navigation.launch.py use_sim_time:=true map:=$HOME/MAP_NAME.yaml
おわりに
本記事ではRaspberry Pi MouseのROS 2パッケージJazzy版を紹介しました。基本動作自体はHumble版から変更は無いですが、collision_monitor
などの面白い機能が搭載されているので、是非色々試して遊んでみてください。