ROS 占有格子マップの形式
ROS の占有格子マップは、map.pgm(地図画像)と map.yaml(メタデータ)の 2 ファイルで構成され、ロボットの周辺環境を 2D 俯瞰で表したものです。ROS のナビゲーションスタック(nav1 の map_server、nav2 の map_server)が読み込む標準形式で、gmapping、Cartographer、slam_toolbox などの SLAM パッケージが書き出します。
2 つのファイルの中身
Section titled “2 つのファイルの中身”.pgm ファイル は Portable Gray Map というシンプルなグレースケール画像です。画素値で各位置の状態を表します。
- 暗い画素:占有(壁や障害物がある)
- 明るい画素:自由空間(通行できる)
- 特定のグレー(よく 205):未観測
.yaml ファイル は、その画像をメートル単位の座標系に対応づけるメタデータです。
image: map.pgmresolution: 0.05 # 1 画素あたりのメートル数origin: [-12.2, -28.5, 0.0] # 画像の左下隅に対応する世界座標 (x, y, yaw)negate: 0occupied_thresh: 0.65free_thresh: 0.196resolution と origin があれば、画素座標と世界座標を相互に変換できます。
実際にどう作られるか
Section titled “実際にどう作られるか”代表的なパイプラインは次の 3 通りです。
- ロボットを手動で動かし、オドメトリと 2D LiDAR を gmapping や slam_toolbox に流し込んでマップを保存する。
- 録音した bag ファイルに対して Cartographer をオフラインで実行し、占有格子マップとして書き出す。
- 別形式(
.bt、OctoMap の投影、独自形式など)から変換する。
できあがったマップは map_server 経由で、自己位置推定(AMCL)や経路計画(nav2)に渡されます。
drawtonomy の位置づけ
Section titled “drawtonomy の位置づけ”drawtonomy は .pgm + .yaml のペアを読み込み、ブラウザ上で占有格子マップに注釈を書き込めます。
- yaml の
resolutionとoriginを使って、キャンバス上に正しい縮尺で配置する。 - その上にレーン、交差点、車両、歩行者、標識などを書き加える。
- 注釈は drawtonomy のシェイプとして別管理で、元の
.pgm自体は書き換えない。 - 論文の図(経路を描き込んだ SLAM マップ)、講義資料(Planner が見ているものを示す)、簡単な ground truth ラベル付けなどに活用できる。
読み込みは一方向のみで、drawtonomy は nav2 のマップ編集ツールの代わりにはなりません。「SLAM マップに見やすい注釈を書き加えたい」というユースケース向けのツールです。
詳細は ROS 占有格子マップを取り込む を参照してください。