Nav2 代价地图结合了关于移动机器人可能行进位置的多个主张。静态层贡献地图上的占用率,观测层添加并清除动态障碍物,膨胀将几何结构转化为分级净空成本,过滤器则应用如禁止进入或速度限制等规则。最终网格是规划器与控制器共同依赖的接口约定。
在 RViz 中,配置看起来可以很有说服力,但却带有陈旧的观察值、错误的足迹或帧不匹配。只有在其源、时间戳、转换、更新行为和故障响应都可观察到后,才对图层进行调优。否则,参数更改可能会隐藏症状,而非纠正环境模型。
请将此指南与 机器人 SLAM 指南 及 TF2 框架指南一起使用。在生产发布前,在代表性的地板、障碍物和交通状况上验证机器人。
将代价地图视为分层环境合同
代价地图不是原始传感器图像。每个插件都会根据声明的帧、尺寸、组合规则和时序,将特定源转换为单元成本。记录哪层拥有映射的墙体、瞬态障碍物、净空、限制区和未知空间,避免两层相互矛盾。
当前 Nav2 Costmap 2D文档 分别描述插件和过滤器。在配置审查中保持区分:普通插件贡献于合并代价地图,而过滤器则在分层地图之后应用,以处理策略效果,如禁止或限速。

选择全局和本地地图职责
全局代价地图通常代表稳定全局框架下的路线尺度环境,而局部滚动代价地图则提供当前附近的约束以供控制。它们可能使用不同的维度、更新率和观测源。将一个配置复制到两个地图中会浪费资源并混淆故障归属。
对于每张地图,说明其规划消费者、帧、滚动窗口行为、分辨率及最大可接受年龄。全局规划器可能容忍地图更新速度低于本地控制器,但两者都不应使用变换或源新鲜度超过导航契约的网格。
| 图层或设置 | 主要工作 | 失败症状 | 首次证据 |
|---|---|---|---|
| 静态层 | 地图占用率 | 路线穿墙或堵住通道开口 | 地图版本与框架 |
| 障碍层 | 2D标记与清除 | 暂时对象缺失或持续幽灵 | 扫描年龄与光线追踪 |
| 体素层 | 3D观测缓冲 | 高度障碍物处理不当 | 点云和体素设置 |
| 膨胀层 | 清场成本 | 偷工减料或无谓绕道 | 覆盖面积与成本梯度 |
| 隔水滤波器 | 策略限制 | 机器人进入禁区 | 掩膜对齐和滤波器信息 |
在调校间隙前冻结机器人几何体
当底座不被圆圈很好地表示时,使用多边形封装。包含可能碰撞的固定突出部分,并定义附件或携带载荷如何更新封装。填充是额外的余裕;它不应补偿因条件变化而产生的物理轮廓错误或定位不确定性。
通过在静止机器人周围放置已知点,并在多个航向处检查碰撞分类,验证几何形状。旋转不对称的足迹可能会暴露直线路径上隐藏的误差。将脚印调整为机械配置,拒绝未知有效载荷形状,而不是假设最小基底。
将静态层配置为版本管理地图证据
静态层通常订阅占用网格,并将映射的结构转移到代价地图中。确认地图主题、框架、持久性策略以及是否预期更新。在收到预期地图前启动的机器人,可能看起来就绪,环境模型为空或旧。
将地图身份和校验和存储在部署记录中。测试替换、重启和地图服务器丢失。决定机器人在静态证据消失时是停止、继续有界间隔,还是降级为其他模式;正确选择取决于本地地图和操作风险。

让障碍标记和清除过程可以独立观察
观测层通常标记检测单元并沿传感器射线清除。数据源可以正确标记障碍物,但清除失败,因为光线追踪距离、最小距离、变换时序或无效回波不同。检查这两种操作时,都有一个临时障碍物进出传感器场的每个部分。
设置障碍物和光线追踪范围,基于已验证的传感器性能,而非最大宣传册距离。记录源类型、主题、帧、持久性和预期速率。当源停止时,测量其障碍物证据持续多久,以及持续时间是否符合停止距离假设。
| 测试 | 受控变更 | 期望映射响应 | 拒绝 |
|---|---|---|---|
| 标记 | 插入目标 | 栅格单元在限制范围内变为占用状态 | 目标被遗漏或延迟 |
| 清理 | 移除目标 | 射线将单元返回允许状态 | 幽灵持续存在,超出极限 |
| 源流损失 | 停止信息 | 声明过时的数据策略发生 | 旧网格看起来很现代 |
| 变换延迟 | 延迟TF | 更新被拒绝或被限制 | 错误的障碍已接受 |
| 重启 | 重启传感器和代价地图 | 层恢复时没有重复状态 | 未知的缺口被隐藏 |
只有在高度改变决策时才使用体素数据
体素层可以在将碰撞信息投影到二维之前缓冲三维观测。当障碍物高度和悬垂行为重要时,体素层非常有用,但其垂直起点、分辨率、体素计数和标记阈值会形成另一个模型,必须与机器人身体进行测试。
根据碰撞几何和传感器位置选择障碍物的最小和最大高度。测试低托盘、桌面边缘、叉形和悬垂。当地面移除、稀疏回波或投影阈值丢弃相关结构时, 3D点云无法保证正确的障碍物选择。
通过封装净空和行为调节膨胀
通胀会在接近致命障碍物时赋予更高的成本,因此规划器和控制者可以优先考虑净空。通胀半径定义受影响的邻域,而缩放因子则决定成本下降的速度。这些参数会影响偏好;它们不能取代精确的足迹碰撞检查。
从所需的物理间隙和定位不确定性开始,然后测试走廊、门口和拐角。测量无接触通过率、路径长度和假阻挡。如果机器人在狭窄开口附近振荡,检查几何形状、定位和控制器行为,然后再简单地缩小膨胀。
使用对齐面罩应用禁入和速度策略
代价地图过滤器可以表达策略叠加层,如禁区或速度区。它们的掩码和元数据必须与预期的地图帧、原点和分辨率对齐。即使滤波器插件处于激活状态且无报错,目视可见的错位掩码也可能造成危险的策略缺口。
测试每个边界的两侧,并在地图重新加载后进行测试。记录谁负责规则变更,以及机器人同步规则的速度。将缺失或过时的强制过滤视为准备失败,而非许可使用未过滤的代价地图。
预算更新、发布和转换时机分别进行
更新频率控制地图处理输入的频率;发布频率控制向消费者或可视化发送表示的频率。传感器速率、转换可用性和执行者延迟也影响栅格单元的数据时效。提高发布频率无法使陈旧源证据保持新鲜。
对观测时间戳进行测量,并测量在CPU和网络负载下的到达到地图延迟。跟踪最坏情况和高百分位年龄,而不仅仅是平均速率。为每个所需源定义超时响应,确保控制器不会继续,因为最后显示的网格看起来仍然合理。
将未知空间与确认的自由空间分离
未知意味着系统缺乏证据,而非该区域有人居住或自由。追踪未知空间的选择以及规划器是否能穿越该空间应遵循任务背景。探索、绘制地图的仓库和公共走廊可能需要不同的策略。
练习绘制边界、传感器阴影和新开放区域。报告日志中的未知单元行为和验收结果。将未知转换为自由,可能改善可达性,同时消除解释机器人为何进入未被观察区域的证据。
参数调优前诊断层所有权
当导航失败时,将各个层的输出、合并代价地图、变换、占地、传感器样本和规划器请求保存在一个共同的时间线上。阻塞的路线可能来自静态墙、未清理的观测、膨胀或禁止遮罩;纠正措施因所有者而异。
一次改变一个假设,并在可能的情况下重演相同证据。比较假阳性停车、错过障碍物、路径清理和恢复时间。避免仅凭一次视觉改善的跑步就宣布成功,因为环境变异可能掩盖原始缺陷。
发布带有物理回归套件的代价地图
构建玻璃、深色材料、细腿、低矮物体、悬垂、门、狭窄通道、移动人员和源头失效的试验。包括机器人旋转和载重。验证检测和清除,以及变换或地图在运动中重新启动时的响应。
存储软件版本、插件顺序、参数、地图、传感器固件和测试分发及结果。每当几何、感测、定位或导航插件发生变化时,请使用此发布清单。
评估“Nav2代价地图层:静态、障碍、体素与膨胀配置”时,还应保存模型版本、机器人配置、标定文件、测试日期和全部试验记录。把成功、失败、恢复与人工介入放在同一份数据中,才能区分模型能力、系统接口和现场流程造成的差异。
- 为每层标明来源、帧和年龄限制。
- 确认标记和清除是两个不同的行为。
- 调整策略面罩,摒弃陈旧的强制过滤。
- 测量与已部署足迹的物理间隙。
- 保留单个层次的证据以供事件诊断。
常见问题
默认 Nav2 costmap插件有哪些?
当前 Nav2 文档默认在插件列表未覆盖时,默认设置是静态层、障碍层和膨胀层。
全局和局部代价地图应该使用相同的图层吗?
不一定。它们的受众、帧、空间范围、更新率和所需证据可能不同。
通胀会让机器人在物理上变大吗?
不会。它改变了障碍物周围的单元成本。封地和填充描述了碰撞几何和边界。
为什么障碍物被移除后依然存在?
清除可能缺少有效的射线、距离、变换或时间。检查清除应独立于标记。
RViz的代价地图足够接受吗?
不行。验收需要定时体能测试、源损失行为和在代表性条件下的测量许可。
CostMap证据与安全边界
代价地图是一个应用环境模型,而非独立的安全防护装置。验证机器人及工作场所风险的感知、时序与停止防护措施。