ROS 2のSLAM Toolboxを用いた自律制御ロボットで、点群データ取得まで成功しているにも関わらずOccupancyGridマップがRVizに表示されない問題を解消するため、原因推定と確認手順を具体的に解説します。
また、私が実際に開発しているロボットと使用しているLiDARについても以下の記事で解説していますので、あわせてご覧ください。


チェック手順と各項目の解説
以下のステップで順に環境を点検し、何が足りず/ずれているかを特定します。
1. LiDARデータの取得確認
ros2 topic list | grep scan
ros2 topic echo /scan --once
意味と目的:LiDARセンサーからの生データ(sensor_msgs/LaserScan
)がROSトピックに流れているかを確認します。
なぜ必要か:SLAM Toolboxはスキャンデータを入力に地図を生成するため、まずデータ取得自体が問題なく行われることが前提です。
わかること:取得できなければ、ドライバやUSB/I2Cなどのインターフェース問題を疑います。
2. TFツリーの確認
ros2 run tf2_tools view_frames.py
ros2 run tf2_ros tf2_echo odom base_link
意味と目的:odom
(オドメトリ基準)→base_link
(ロボット本体)→laser
(スキャンセンサ)までの座標変換が連続しているかチェックします。
なぜ必要か:SLAM Toolboxはロボットの動きを基に地図を更新するため、移動に伴う座標変換が正しく提供される必要があります。
わかること:TFが欠けていれば、静的/動的変換(static_transform_publisher
等)の設定ミスやフレーム名不一致を発見できます。
3. SLAM Toolboxノードの起動とパブリッシュ状況確認
ros2 launch slam_toolbox online_sync_launch.py
ros2 node info /slam_toolbox
意味と目的:SLAM Toolboxノードが稼働し、マップ関連トピック(/map_metadata
、/map
)をPublisherとして持つかどうかを見ます。
なぜ必要か:ノードがエラー等で機能停止していると、地図生成処理自体が始まりません。
わかること:Publisherに対象トピックがなければ、起動設定やパラメータ読み込み問題を疑います。
4. /map_metadata
の取得確認
ros2 topic echo /map_metadata --once
意味と目的:初回マップ生成時に一度だけ流れるメタデータ(nav_msgs/MapMetaData
)を受信できるか確認します。
なぜ必要か:Transient Local
QoSのため、一度流れると以降の購読開始では取得できず、初回受信が成功するかどうかが鍵です。
わかること:受信できなければ、「まだ地図を生成していない」「QoSが合っていない」「TFが動いていない」等の原因を切り分けます。
5. QoS設定の整合性確認
- RVizのMapディスプレイ設定:Reliabilityを
Reliable
、DurabilityをTransient Local
に合わせる
意味と目的:マップトピックは標準でReliable + Transient Local
で配信されるため、RViz側でも同じプロファイルで購読する必要があります。
なぜ必要か:QoSミスマッチがあると、パブリッシュされたメッセージをRVizが受け取れません。
わかること:設定を合わせることで、「受信し損ね」が原因かどうかを判断できます。
6. Odometry情報の有無確認
- 手動移動のみでは動的TFが発生せずSLAMが動かない
/odom
トピックやIMU+robot_localization
で擬似odomを供給する必要あり
意味と目的:SLAM Toolboxはロボット位置の変動を前提に地図を積み重ねるため、動的なオドメトリ情報が必須です。
なぜ必要か:滑らかな動きがないとスキャンマッチングがスキップされ、地図生成が開始されません。
わかること:Odometry情報が欠けている場合はハード/ソフト両面での補完策が必要です。
7. scan_topic/base_frame設定の見直し
ros2 param set /slam_toolbox scan_topic /scan
ros2 param set /slam_toolbox odom_frame laser
ros2 param set /slam_toolbox base_frame laser
意味と目的:使用するスキャンデータやフレーム参照を正確にSLAM Toolboxに伝えるためのパラメータ設定です。
なぜ必要か:デフォルト設定と異なるフレーム名やトピック名を使っていると、SLAMがデータを見つけられません。
わかること:タイプミスやリマップ設定の漏れをこの段階で見つけられます。
推定される主な原因
- 動的Odometry情報不足:手押し移動ではTF更新なし。エンコーダやIMUとの組み合わせが必要。
- TFミスマッチ:
odom_frame
とbase_frame
、laser
フレームの不整合。 - QoSミスマッチ:Transient Local+ReliableがRVizと合っていない。
- パラメータの設定漏れ:
scan_topic
やフレーム名のタイプミス。
まとめ
SLAM Toolboxで地図が生成されない問題は、主に「動的Odometry情報が不足している」「TFやQoSの設定不整合」に起因します。本ガイドの詳細なチェック手順を順に実施し、必要なTF変換やパラメータ変更、適切なOdometry情報の投入を行うことで、多くの場合解決できます。ぜひお試しください。
コメント