YAML、占用阈值与地图坐标

通过一个明确参数的例子计算灰度分类、像素中心坐标与裁剪后的原点。

pgmXT 站点维护 · 更新:2026 年 10 月 14 日

一份可检查的 YAML

image: demo-before.pgm
mode: trinary
resolution: 0.05
origin: [-1.6, -1.2, 0.0]
negate: 0
occupied_thresh: 0.65
free_thresh: 0.196

image 的相对路径按 YAML 所在目录解析。resolution 单位是米/像素,应为正数;origin 的三项是 x、y、yaw,yaw 单位为弧度。Nav2 的 mode 使用 trinary、scale 或 raw 等字符串,不能用数字 0 代替。

用灰度算一次占用量

对 8 位灰度图,negate=0 时可用 p=(255-g)/255 理解 trinary 的分类。g=0 得到 p=1;g=254 得到 p≈0.0039;g=205 得到 p≈0.19608。使用上方阈值时,前两者分别为 occupied 和 free,205 落入 unknown。阈值边界的实现应核对所用 ROS/Nav2 版本。

gp(negate=0)本例分类
01.000000占用
1280.498039未知
2050.196078未知
2540.003922空闲

灰度检查器

以下只计算本页固定参数的 8 位 trinary 示例,不替代地图服务。可以更改灰度和 negate,观察语义变化。

p=0.196078,未知

图像行号为什么要翻转

PGM 的行从上往下增加;地图栅格的 y 通常从下往上增加。设图像高度 H、列号 c、从顶端计数的行号 r,索引均从 0 开始。yaw=0 时该像素中心的地图坐标为:

x = origin_x + (c + 0.5) * resolution
y = origin_y + (H - r - 0.5) * resolution

本站 64×48 示例的 r=0、c=0 像素中心位于 (-1.575, 1.175) 米。origin 指向地图栅格的左下边界参考位置,不能解释成图像左上角像素中心。yaw 不为 0 时,还需要用对应旋转矩阵把局部坐标转到地图坐标系。

裁剪后的 origin 怎么变化

假设从左边去掉 L 列、从下边去掉 B 行,分辨率不变且 yaw=0,则新的 origin 为 (origin_x+L·resolution, origin_y+B·resolution)。例如左裁 10 列、底裁 4 行,本例新原点为 (-1.1, -1.0)。从顶部裁剪不会直接抬高左下原点。存在旋转时,应先旋转裁剪偏移再加到原点。

只修改地图像素,不修改几何关系时保留元数据。缩放、裁剪和旋转都需要单独核对,不能靠文件名相同判断地图配套。

参考资料

继续阅读