以前、ROS 1とRaspberry Pi Mouse(ラズパイマウス)でナビゲーションを行うためのパッケージ公開に関する記事を出しました。

今回はROS 2 Foxy版のパッケージ公開についての報告をしていきます。
ROS 2パッケージの概要について
こちらのパッケージは、ROS 2 Foxy環境でラズパイマウスを使ってSLAMとナビゲーションが行えます。SLAMではslam_toolboxを使い、ナビゲーションではNavigation2を使用しています。
使用するROS 2パッケージや機材など
本ブログでは、Raspberry Pi Mouse V3にRaspberry Pi 4とLiDARを搭載したラズパイマウスを使用します。また、ラズパイマウスを遠隔操作するためのPC(Remote PC)も用意します。
ラズパイマウスとRemote PCは共にUbuntu 20.04とROS 2 Foxyをインストールして使用します。
Raspberry Pi 3Bの代わりにRaspberry Pi 4を搭載する際に、ラズパイマウス本体と接続するためのが必要になります。
また、本ブログでは以下の機材も使用します。
- ゲームパッド:Logicool Wireless Gamepad F710
- レーザ測域センサ: Slamtec RPLIDAR A1
その他、機材などの詳細については、rt-net/raspimouse_slam_navigationのREADMEを参照してください。
デバイスドライバーのインストールについては、RT Software Tutorialsを参照してください。
また、ラズパイマウスとRemote PCは同じネットワークに繋がっている必要があります。また、同じROS_DOMAIN_IDも設定している必要があります。詳しくはこちらのRT Software TutorialsのROS 2タブを参照してください。
インストール方法
Raspberry Pi Mouse V3
まずは、ラズパイマウス側で必要なROS 2パッケージをインストールします。以下のコマンドを実行しましょう。
cd ~/ros2_ws/src # Clone the ROS packages git clone -b $ROS_DISTRO-devel https://github.com/rt-net/raspimouse_ros2_examples git clone -b $ROS_DISTRO-devel https://github.com/rt-net/raspimouse_description git clone -b $ROS_DISTRO-devel https://github.com/rt-net/raspimouse_slam_navigation_ros2 # Install dependencies rosdep install -r -y -i --from-paths . --ignore-src # make and install cd ~/ros2_ws colcon build --symlink-install source ~/ros2_ws/install/setup.bash
Remote PC
次に、Remote PC側に必要なROS 2パッケージをインストールします。以下のコマンドを実行しましょう。
cd ~/ros2_ws/src # Clone the ROS packages git clone -b $ROS_DISTRO-devel https://github.com/rt-net/raspimouse_description git clone -b $ROS_DISTRO-devel https://github.com/rt-net/raspimouse_slam_navigation_ros2 # Install dependencies rosdep install -r -y -i --from-paths . --ignore-src # make and install cd ~/ros2_ws colcon build --symlink-install source ~/ros2_ws/install/setup.bash
実行方法
SLAM
slam_toolboxパッケージを使用して、ラズパイマウスの周辺地図を生成します。
まずはラズパイマウス上で、次のコマンドを実行します。ラズパイマウスのモータやLiDARを起動したり、ゲームパッドで制御するためのノードを起動しています。
ros2 launch raspimouse_slam robot_bringup.launch.py lidar:=rplidar joyconfig:=f710
そして、Remote PC側で次のコマンドを実行します。モータの回転数とLiDARから受け取ったデータを使って地図を作るノードを起動しています。
ros2 launch raspimouse_slam pc_slam.launch.py
下記画像のようなRVizの画面が表示されます。
ラズパイマウスを動かして、目的の地図が完成したら次のコマンドを実行しましょう。地図の保存を行なうノードを起動しています。MAP_NAMEは保存したい地図の名前にしましょう。
ros2 run nav2_map_server map_saver_cli -f ~/MAP_NAME
コマンドを実行すると、MAP_NAME.yamlとMAP_NAME.pngの2つのファイルが生成されます。
pngファイルを開くと生成された地図を確認できます。
ナビゲーション
SLAMで生成した地図をNavigatoin2パッケージに取り込み、ラズパイマウスを自律移動させます。
まずはラズパイマウス上で、次のコマンドを実行します。ラズパイマウスのモータとLiDARを起動するためのノードを起動しています。
ros2 launch raspimouse_navigation robot_navigation.launch lidar:=rplidar
Remote PC上で、次のコマンドを実行します。自己位置推定と経路生成用のノードを起動し、RVizを立ち上げます。(下記画像を参照)
引数のmap_fileパラメータには、SLAMで生成した地図(yamlファイル)を指定してください。
ros2 launch raspimouse_navigation pc_navigation.launch.py map:=/path/to/MAP_NAME.yaml
無事RVizが起動したら、まずは初期位置・姿勢を合わせます。RVizの画面上部の2D Pose Estimateをクリックしましょう。 地図上でラズパイマウスが存在すべき尤もらしい位置をクリックし、そのままホールドします。 ホールドしながらカーソルを動かし、表示されている矢印の向きをラズパイマウスの尤もらしい向きに合わせてからボタンを離します。
初期位置・姿勢の指示が完了したら、次は目標位置・姿勢を指示します。RVizの画面上部のNavigation2 Goalをクリックしましょう。地図上で、初期位置・姿勢を合わせた時と同様に、地図上をクリックして目標位置を、ホールドしたままカーソルを動かして目標姿勢を指示しましょう。すると、ラズパイマウスが自律移動を開始します。
Raspberry Pi Mouseの停止方法
下記画像のようなナビゲーション用のパネルがRViz左下に表示されます。 Cancelボタンを押すと自律移動が中断されます。
ラズパイマウスを停止させる別の方法として、モータへの電源供給を止める方法もあります。
安全に気をつけながらラズパイマウスに搭載されたスイッチを操作してモータ用電源をOFFにしましょう。
また、次のコマンドを実行すると、ソフトウェア側からモータ電源をON / OFFできます。
# モータ電源をOFFにする ros2 service call /motor_power std_srvs/srv/SetBool data:\ false # モータ電源をONにする ros2 service call /motor_power std_srvs/srv/SetBool data:\ true
まとめ
今回はラズパイマウスのROS 2パッケージのうち
- SLAM ナビゲーションパッケージのインストール方法
- SLAMの実行と地図の保存方法
- ナビゲーションの実行とRVizの操作方法
についてご説明しました。
次回はラズパイマウス用のslam_toolboxおよびNavigation2のパラメータチューニング方法について説明します。