ラズパイマウスでROS 2を動かしてみた

Raspberry Pi MouseのROS 2パッケージJazzy版をリリースしました

ラズパイマウスでROS 2を動かしてみた

こんにちは、アールティの倉澤ズズくんです。

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をご覧ください。

インストール方法

以下のコマンドでインストールできます。詳細なセットアップ方法は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ファイル内でも起動方法が変更されました。

Lifecycleノードとは、ライフサイクル管理を統一された形で扱えるように設計されたノードです。ノードの状態遷移、ノード同士での実行開始、接続順を明示的に制御できるように標準化されています。これにより、不完全な初期化や予期しない動作を防止できます。

 

cmd_velトピックの変更

Raspberry Pi Mouseの速度を扱うトピックcmd_velのメッセージ型がTwistからTwistStampedになりました。

ros2_controllersは、タイムスタンプ付きのメッセージTwistStampedのみの対応となりました。それに伴い、ros2_controllersに依存しているRaspberry Pi Mouseのcmd_velTwistStampedに変更しました。

 

Ignition GazeboからGazebo Simへの変更

使用するシミュレータの名前がIgnition GazeboからGazebo Simに変更されたため、ソースコード内での呼び出しを適宜変更しています。

 

Nav2による変更

ナビゲーションを行うパッケージNav2の変更に伴うRaspberry Pi Mouseの変更点です。

bt_navigatorの変更

Nav2のビヘイビアツリーを指定するノードであるbt_navigatorのファイルとライブラリの指定を削除しました。

ファイルを指定しない場合、Nav2のデフォルトのビヘイビアツリーが読み込まれるようになったため、default_nav_to_pose_bt_xmldefault_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などの面白い機能が搭載されているので、是非色々試して遊んでみてください。

タイトルとURLをコピーしました