TurtleBot3 + Gazebo + Navigation2 (ROS 2 Jazzy)

ROS 2 JazzyでGazebo(旧Ignition)上のTurtleBot3をNavigation2(Nav2)を動かすまで+その過程で調べたことのメモです。

背景

ROS 2 HumbleまではROBOTIS公式のe-manualを参照すればよかったのですが、現状はJazzyのサポートがないためその他のリソースを参照しながら実行する必要があります。

Foxyのときに試してみたログはZennのスクラップに公開しています。

ちなみに、2024年5月ごろに実機を動かした際のログを下記のスクラップに公開しています。Gazeboではなく実機で動かしたい場合はこの内容が参考になると思います。

Nav2では検証用にTurtlebot3を動かすためのlaunchを用意しており、それがJazzyに対応しているとXで@dandelion1124さんに教えていただきました

調べてみると、Nav2のドキュメントに使い方の記載がありました。今回は基本的にこのページに書かれていることをなぞって進めていきますが、ドキュメント内の画像はだいぶ古いので本記事には適宜スクリーンショットを貼り付けておきます。

Turtlebot3のJazzy対応について

2022年11月頃のHumble向けの更新を最後にしばらく更新が停止していましたが、2024年12月ごろから更新が再開しているようです(現状はREADMEの更新のみです)。

手順

ROS 2 Jazzyがインストールされた環境の用意

docker-ros2-desktop-vncをWEBブラウザ経由で使うか、ros2_setup_scripts_ubuntuを使ってUbuntuにインストールするのがおすすめです。今回はdocker-ros2-desktop-vncをWEBブラウザ経由で使います。

ROSパッケージのインストール

nav2-bringup(とその依存パッケージ)をインストールすることで必要なパッケージをまとめてそろえることができます。

sudo apt install ros-jazzy-nav2-bringup

Jazzy以降では新しいGazebo(Gazebo Classicではない方)に対応するためのdescriptionパッケージとしてROBOTIS公式ではなくNav2で用意しているdescriptionパッケージを使用します。今回使用するのは、nav2_minimal_tb3_simパッケージです。URDFもこのパッケージにまとまっています。

起動

source /opt/ros/jazzy/setup.bash
ros2 launch nav2_bringup tb3_simulation_launch.py headless:=False

RViz

2D Pose Estimateで適当にそれっぽい位置・姿勢を指定します。

たまにNavigationがinactiveのまま反応しないこともありました。理由はきちんと調べていませんが、ノードの再起動で復活しました。

Nav2 Goalで目標とする位置・姿勢を指定します。走行中はNavigation 2のパネルのFeedbackがactiveになります。

指定位置(ゴール)までたどり着くとNavigation 2のパネルのFeedbackがreachedになります。

一連の動画です。

チュートリアルの手順は以上です。

@dandelion1124さんに教えていただくまでは、ROBOTISが公式で公開しているパッケージを調整したりしていたのですが、Nav2のドキュメントに従えば特にコードを編集したりすることなくあっという間にチュートリアルを終えることができました。次は実機をNav2で動かしたいと思います。

調べている過程で気づいたことのメモ

いくつか気づきがあったのでメモしておきます。HumbleからJazzyへ移行する際はリンク先の内容を参考にしていただくと良いと思います。

JazzyではTwistメッセージからTwistStampedメッセージに切り替わっていくようです

Gazeboのバージョン

Gazebo Classicではなく、新しい方のGazeboを使います。

GazeboもROSと同様にアルファベット順に名称が決まっており、ROS 2 JazzyではGazebo Harmonicを使います。

※2025年でGazebo Classicはサポート終了予定です。

Share — X · Bluesky · はてブ ·