コンテンツにスキップ

ROS 占有格子マップの形式

ROS の占有格子マップは、map.pgm(地図画像)と map.yaml(メタデータ)の 2 ファイルで構成され、ロボットの周辺環境を 2D 俯瞰で表したものです。ROS のナビゲーションスタック(nav1 の map_servernav2 の map_server)が読み込む標準形式で、gmappingCartographerslam_toolbox などの SLAM パッケージが書き出します。

.pgm ファイルPortable Gray Map というシンプルなグレースケール画像です。画素値で各位置の状態を表します。

  • 暗い画素:占有(壁や障害物がある)
  • 明るい画素:自由空間(通行できる)
  • 特定のグレー(よく 205):未観測

.yaml ファイル は、その画像をメートル単位の座標系に対応づけるメタデータです。

image: map.pgm
resolution: 0.05 # 1 画素あたりのメートル数
origin: [-12.2, -28.5, 0.0] # 画像の左下隅に対応する世界座標 (x, y, yaw)
negate: 0
occupied_thresh: 0.65
free_thresh: 0.196

resolutionorigin があれば、画素座標と世界座標を相互に変換できます。

代表的なパイプラインは次の 3 通りです。

  1. ロボットを手動で動かし、オドメトリと 2D LiDAR を gmapping や slam_toolbox に流し込んでマップを保存する。
  2. 録音した bag ファイルに対して Cartographer をオフラインで実行し、占有格子マップとして書き出す。
  3. 別形式(.bt、OctoMap の投影、独自形式など)から変換する。

できあがったマップは map_server 経由で、自己位置推定(AMCL)や経路計画(nav2)に渡されます。

drawtonomy は .pgm + .yaml のペアを読み込み、ブラウザ上で占有格子マップに注釈を書き込めます。

  • yaml の resolutionorigin を使って、キャンバス上に正しい縮尺で配置する。
  • その上にレーン、交差点、車両、歩行者、標識などを書き加える。
  • 注釈は drawtonomy のシェイプとして別管理で、元の .pgm 自体は書き換えない。
  • 論文の図(経路を描き込んだ SLAM マップ)、講義資料(Planner が見ているものを示す)、簡単な ground truth ラベル付けなどに活用できる。

読み込みは一方向のみで、drawtonomy は nav2 のマップ編集ツールの代わりにはなりません。「SLAM マップに見やすい注釈を書き加えたい」というユースケース向けのツールです。

詳細は ROS 占有格子マップを取り込む を参照してください。