■はじめに

こんにちは!
前回は ROS 2 Jazzy + TurtleBot3 のシミュレーション環境を整えて、地図データを作り、その中をキー操作で動かすところまで進みました。

今回は、その続きとして、
1️⃣ 保存した地図を使って「地図あり」で自律走行する方法
2️⃣ さらに「地図なし」でリアルタイムに探索しながら走る方法

の2つを実験していきます。



トラブルもつきものなので、今回もChatGPTさんに相談しながら進めていきます💬

■環境

Ubuntu 24.04

ROS 2 Jazzy

Gazebo Classic

PC:NECのLL750/L(ノートパソコン)

■前回の地図を使ってみよう

地図作成の流れをざっくり復習しておきます(ターミナル4つを使用)。

🖥 ターミナル1:シミュレーション起動

source /opt/ros/jazzy/setup.bash
export TURTLEBOT3_MODEL=burger
ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py

🧭 ターミナル2:SLAMノード起動(Cartographer)

source ~/turtlebot3_jazzy_ws/install/setup.bash
export TURTLEBOT3_MODEL=burger
ros2 launch turtlebot3_cartographer cartographer.launch.py use_sim_time:=True

⌨️ ターミナル3:ロボット操作

source ~/turtlebot3_jazzy_ws/install/setup.bash
export TURTLEBOT3_MODEL=burger
ros2 run turtlebot3_teleop teleop_keyboard

💾 ターミナル4:地図を保存

source /opt/ros/jazzy/setup.bash
ros2 run nav2_map_server map_saver_cli -f ~/map

■地図ありの自律走行

いよいよ保存した地図を使って、自動で走らせます。
ROS2では「Navigation2(Nav2)」という仕組みを使って、地図上で経路を計算しながらゴールへ移動します。

🖥 ターミナル構成

✅ ターミナル1:Gazeboシミュレーション

source /opt/ros/jazzy/setup.bash
export TURTLEBOT3_MODEL=burger
ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py

✅ ターミナル2:Navigation2(地図を使用)

source ~/turtlebot3_jazzy_ws/install/setup.bash
export TURTLEBOT3_MODEL=burger
ros2 launch turtlebot3_navigation2 navigation2.launch.py \
  use_sim_time:=True map:=$HOME/map.yaml

起動すると、RViz2 という可視化ツールが立ち上がり、保存した地図が表示されます。
ここからはRViz2上で操作します。

🧭 RViz2での操作方法

1. 「2D Pose Estimate」 をクリック
 → 地図上でロボットの位置と向きをドラッグで指定します。
 (地図とロボットの初期位置を合わせる作業です)

2. 「2D Goal Pose」 をクリック
 → ゴール地点をクリック、向きをドラッグで指定します。

これでNav2が自動的に経路を計算し、ロボットが自律走行します!

💡 コツ

Pose Estimate を正確に合わせると成功率が高いです。ずれるとロボットが迷子になります。
特に方向合わせが大事です。





■地図なし自律走行

続いて、「地図なし」での自律走行にチャレンジ。
これは地図ファイルを読み込まず、LIDARセンサーの情報からその場で障害物を検知しながら進むモードです。

【特徴】

起動時に地図を使わない

LIDAR(/scan)で障害物を検知

壁を避けたり、未探索エリアを自動で探索

RViz2で「2D Goal Pose」を指定すれば、未探索のエリアにも進んでくれます。

🖥 ターミナル構成

✅ ターミナル1:Gazebo

source /opt/ros/jazzy/setup.bash
export TURTLEBOT3_MODEL=burger
ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py

✅ ターミナル2:Cartographer(リアルタイム地図)

source ~/turtlebot3_jazzy_ws/install/setup.bash
export TURTLEBOT3_MODEL=burger
ros2 launch turtlebot3_cartographer cartographer.launch.py use_sim_time:=True

✅ ターミナル3:Nav2(地図指定なし)

source ~/turtlebot3_jazzy_ws/install/setup.bash
export TURTLEBOT3_MODEL=burger
ros2 launch turtlebot3_navigation2 navigation2.launch.py use_sim_time:=True

地図ファイルがないぶん、ロボットが自分で周囲をスキャンしながら走る姿はちょっと感動です✨


■まとめ

今回できたこと👇
1️⃣ RViz上に保存した地図を読み込み、自律走行できた。
2️⃣ 地図ファイルを使わず、リアルタイムで地図を作りながら走らせた。

そして何より、ここまで一行もコードを書いていません!
ROS2の仕組みを理解すれば、コマンドと設定だけでここまで動くんです。

次回は、いよいよ「動きのコード」を自作してみようと思います。

お楽しみに!!