本文最后更新于:2025年7月14日 中午

Nav2 对地图文件(PGM/YAML)有明确的规范要求,本文记录相关标准。

图像文件规范(PGM/PNG)

  • 格式要求

    • 推荐使用 PGM(便携式灰度图),也可用 PNG(需8位灰度)
    • 必须是 灰度图(非RGB彩色)
    • 像素深度:8位(0-255)
  • 像素值含义

    像素值 含义 RViz 颜色
    0 障碍物(Occupied) 黑色
    100 自由空间(Free) 灰色
    255 未知区域(Unknown) 白色

YAML 配置文件规范

1
2
3
4
5
6
7
8
image: map.pgm       # 地图图像路径(相对于YAML文件)
resolution: 0.05 # 分辨率(米/像素)
origin: [0.0, 0.0, 0.0] # 地图原点[x,y,theta](单位:米/弧度)
negate: 0 # 是否反转像素值(0:不反转,1:反转)
occupied_thresh: 0.65 # 大于此值为障碍物(比例:像素值/255)
free_thresh: 0.196 # 小于此值为自由空间
mode: "scale" # 处理模式(scale/trinary/raw)
frame_id: map # 地图坐标系

关键参数说明

  • mode
    • scale(默认):按阈值连续分类(推荐)
    • trinary:严格三值分类(0/100/255)
    • raw:直接使用原始像素值
  • negate
    • 0:黑=障碍物,白=自由空间(SLAM标准)
    • 1:白=障碍物,黑=自由空间(某些ROS1传统)

数据转换

PGM 到 PNG

1
convert output_map.pgm output_map.png

PNG 转 PGM

1
convert hospital_04.png hospital_04.pgm

Python 编辑 PGM 图像

1
2
3
4
5
6
7
8
9
10
11
12
13
# convert_pgm.py
from PIL import Image
import numpy as np


img = Image.open("hospital_04.pgm")
arr = np.array(img)

arr[arr == 254] = 100
arr[arr == 205] = 255

Image.fromarray(arr).save("hospital_fixed.pgm")
pass



文章链接:
https://www.zywvvd.com/notes/tools/ros2/nav2-map-build/nav2-map-build/


“觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭”

微信二维码

微信支付

支付宝二维码

支付宝支付

Nav2 地图文件(PGM/YAML)规范标准
https://www.zywvvd.com/notes/tools/ros2/nav2-map-build/nav2-map-build/
作者
Yiwei Zhang
发布于
2025年7月14日
许可协议