
室内导航系统 01:先定义运行边界,再谈 SLAM 和路径规划
很多机器人项目从“用视觉还是雷达”“选哪套 SLAM”开始,做到一半才发现真正的问题是:电梯要不要进、玻璃墙能不能识别、地图多久变化一次、人群密度多高、断网后是否必须继续、定位丢失时怎样安全停下。
导航不是一个算法,而是一组在明确运行边界内共同工作的状态估计、地图、规划、控制与安全机制。第一步应定义 ODD(Operational Design Domain,运行设计域)。
用四张表写清 ODD
环境边界
| 维度 | 需要量化的内容 |
|---|---|
| 空间 | 单层/多层、面积、最窄通道、最小转弯区 |
| 地面 | 平地、地毯、门槛、坡道、台阶、湿滑区域 |
| 几何 | 玻璃、镜面、黑色吸光物、低矮/悬空障碍 |
| 动态 | 人流密度、叉车速度、门、电梯、临时堆物 |
| 光照 | 逆光、夜间、频闪、全黑、日照变化 |
| 通信 | Wi-Fi 覆盖、允许断网时间、时钟同步条件 |
“室内办公楼”不是可测试的 ODD。“两层、单层 3,000 平方米、最窄通道 0.9 米、最大坡度 5°、高峰每分钟 30 人经过、玻璃隔断占墙面 20%”才是。
任务边界
任务要拆成可验收动作:
- 从已知点到指定房间;
- 沿路线巡检并停靠若干观察位;
- 自动进出电梯;
- 在充电量低于阈值时回充;
- 遇到封路后重规划;
- 任务超时或定位异常时进入安全状态。
“自主导航”太宽。每项任务都应有触发、完成条件、最大时长、失败码和人工接管方式。
机器人边界
底盘决定导航能否执行。至少明确:
- 差速、全向、阿克曼、四足或轮足;
- 机体 footprint、载荷变化和传感器外伸;
- 最大速度、加速度、角速度与制动距离;
- 轮滑、里程计尺度误差、腿部运动造成的机体振动;
- 控制频率、指令接口、急停链路和最低可控速度。
规划器生成的轨迹如果底盘跟不上,就不是“控制参数没调好”,而是系统约束没有传进去。
安全边界
安全不等于一个急停按钮。需要定义:
- 哪些传感器直接进入独立碰撞保护;
- 人与机器人允许的最小距离;
- 速度如何随区域、人流和可见距离变化;
- 定位协方差多大时必须降速;
- 地图外、传感器超时、计算过载分别怎样处理;
- 谁可以远程解除停车,解除前检查什么。
一套可落地的分层架构
任务层
目标、路线、房间、电梯、充电、任务状态机
↓
导航层
全局路线 → 局部路径 → 轨迹控制 → 恢复行为
↑
环境表示
静态地图 + 动态代价地图 + 语义/禁行/限速区域
↑
状态估计
wheel odom + IMU + LiDAR/VIO → odom;地图匹配 → map
↑
设备与安全
驱动、传感器、时间同步、急停、碰撞监控
任务层不应该直接输出左右轮速度。它描述“去哪个房间、需要通过哪扇门、何时调用电梯”。导航层把任务意图转成可执行路径;控制层只追踪短时轨迹;独立安全层保留随时覆盖运动指令的权力。
先冻结四个接口
1. 坐标系
至少保持:
map → odom → base_link → sensors
map允许全局修正和跳变;odom要连续,供控制器使用;base_link代表机器人机体;- 传感器外参由静态 TF 或经过管理的标定结果提供。
不要让两个节点同时发布同一段 TF,也不要把回环修正直接写进连续里程计。
2. 状态质量
位姿消息之外,还要传递协方差、时间戳、数据年龄和健康状态。规划器需要知道“位置大约在这里”与“位置可信到厘米级”是两种状态。
3. 地图产品
建图输出不只是 map.pgm。至少应包含:
- 地图版本与适用楼层;
- 分辨率、原点和坐标基准;
- 禁行区、限速区、停靠位、门和电梯;
- 建图时的传感器与标定版本;
- 验证轨迹与已知缺陷。
4. 失败码
区分无全局路径、局部被阻塞、控制不收敛、定位丢失、传感器超时、底盘故障和安全停车。所有失败都叫 navigation failed,现场就无法形成改进闭环。
降级设计比正常路径更重要
建议至少设计五个状态:
- 正常:全速、全传感器、地图定位稳定。
- 受限:部分传感器质量下降,降低速度并缩短规划视距。
- 等待:动态障碍短时阻塞,保持安全位置等待。
- 重定位:停止任务运动,旋转或退到已知区域恢复定位。
- 安全停车:状态不可恢复或进入危险边界,独立制动并请求人工。
降级触发应使用时间窗口和迟滞,避免状态在阈值附近反复切换。
第一阶段的验收目标
不要把“全楼自主运行”作为第一版目标。更好的最小闭环是:
- 一条 50—100 米代表性路线;
- 包含窄门、交叉口、玻璃、动态行人和一次临时封路;
- 连续运行 100 次;
- 到点成功率、最小人距、定位误差、接管率和 P95 时长可统计;
- 所有失败能归到明确模块和失败码;
- 换一台同型号机器人后可通过标定复现。
完成这一步,团队才真正拥有一个导航系统,而不是一段能在 RViz 里移动的演示。