目次 — 知りたいところから読む

最初のNav2実験では、独自ロボットの設定をすべて同時に持ち込まず、公式のTurtleBotシミュレーションで「地図を作る」と「保存済み地図で移動する」を分けて確認する。2026年9月7日時点のJazzy向け資料に基づく手順であり、この執筆環境ではGazeboを起動していない。

環境と版を記録する

対象はUbuntu 24.04、ROS 2 Jazzy、対応するGazebo環境。ROS 2導入済みのGUI端末で、Nav2 Quickstartに従って必要なパッケージを準備する。Humble向けGazebo Classicの手順とは混ぜない。

source /opt/ros/jazzy/setup.bash
sudo apt update
sudo apt install ros-jazzy-navigation2 ros-jazzy-nav2-bringup ros-jazzy-slam-toolbox ros-jazzy-nav2-minimal-tb3-sim
dpkg-query -W ros-jazzy-navigation2 ros-jazzy-nav2-bringup ros-jazzy-slam-toolbox ros-jazzy-nav2-minimal-tb3-sim
ros2 launch nav2_bringup tb3_simulation_launch.py --show-args

インストール時の版を記録し、slammapuse_sim_time引数があることを確認する。Jazzyのlaunchファイルを対応する資料として読む。

地図作成モードで起動する

図1 · 横にスクロールして図を読む
シミュレータ、SLAM Toolbox、Nav2を接続して地図を保存し、再起動後にAMCLを使う

実機と通信しない専用のROS環境で起動する。以下のROS_DOMAIN_IDは例であり、同じIDの実機が存在しないことを確認する。以後、新しい端末でも同じ設定を使う。

source /opt/ros/jazzy/setup.bash
export ROS_DOMAIN_ID=73
ros2 launch nav2_bringup tb3_simulation_launch.py slam:=True headless:=False use_sim_time:=True

公式SLAM手順ではSLAMが/mapmap → odomを提供する。このモードへAMCLを別途追加して、同じTFを二重に配信しない。

小さいゴールで地図が更新されるかを見る

別端末で環境を読み込み、export ROS_DOMAIN_ID=73を設定してから確認する。

ros2 topic list
ros2 topic hz /scan
ros2 run tf2_ros tf2_echo map base_link

RVizで地図、LaserScan、ロボットの位置が対応していることを確認する。まず既に観測できている近い自由空間へNav2 Goalを置き、到達したら隣の領域へ進む。未知領域の奥をいきなり指定して経路が出ないことと、SLAMが動いていないことを混同しない。

地図を保存して再起動する

同じ環境の別端末で、新しい作業フォルダへ地図を保存する。mapは保存ファイルの名前であり、既存の地図を上書きしない名前を選ぶ。

mkdir -p nav2-map-lab
cd nav2-map-lab
ros2 run nav2_map_server map_saver_cli -f map --ros-args -p use_sim_time:=true

生成されたmap.yamlと、それが参照する画像の両方を保持する。元のlaunchをCtrl+Cで止めて終了を待ち、nav2-map-labフォルダから保存地図で起動する。

ros2 launch nav2_bringup tb3_simulation_launch.py slam:=False map:="$PWD/map.yaml" headless:=False use_sim_time:=True

RVizの2D Pose Estimateでシミュレータ上の現在位置・向きを指定する。その後、近いゴールを指定し、経路の生成と到達を確認する。保存地図モードは地図を更新するSLAMモードと役割が異なる。

失敗を境界ごとに切り分ける

症状 先に確認すること
ロボットや世界が表示されない シミュレータの起動ログとモデルの導入
地図が出ない /scan、SLAMノード、シミュレーション時計
TFが見つからない ノード間のdomain、時刻、frame名
保存地図で位置が合わない YAMLの画像参照と初期位置・向き
経路が出ない ゴールが既知の自由空間内か、車体の大きさを含めて通れるか

各段階で使用した版、起動コマンド、地図、成功・失敗のログを残す。newbotの実装記録は3D LiDARと別のオドメトリ構成を含むため、この最小手順からの変更点を一つずつ追って読む。

次に読む

トピックとTFの基礎へ戻るROS 2入門 — ノード・トピック・DDSでロボットを安全に分散制御する動いた後の精度を評価するSLAMの精度をどう測るか — ATE・RPE・処理時間と失敗例シリーズの次の内容へ進むロボットアーム運動学入門 — 順運動学・逆運動学・ヤコビアン