11 KiB
固定地图赛道的混合导航说明
1. 文档目的
本文档面向后续接手项目的人,说明当前比赛场景下为什么推荐采用一种“混合导航”方案,而不是单纯依赖局部传感器闭环,也不是直接上通用 SLAM / 全局路径规划。
这里的“混合导航”特指:
- 上层使用固定地图和拓扑状态机
- 中层使用段落动作与事件切换
- 下层使用局部传感器闭环稳定控制
这套思路适用于当前这类:
- 场地结构固定
- 任务流程固定
- 局部几何约束很强
- 但局部传感器看不到全局目标
的比赛型机器人系统。
2. 场地与任务本质
根据比赛规则与 HANDOFF.md:
- 场地大小为
390cm x 300cm - 内部有
5条田垄 - 实际需要遍历的是
6条垄沟 - 每条垄沟宽
40cm - 每条田垄长
220cm - 只有
1个出入口 - 出入口外有启动区
从导航角度,这不是自由环境中的随机移动问题,而是一个非常明确的固定任务:
- 从启动区进入场地
- 进入某一条垄沟
- 沿垄沟稳定前进并作业
- 到达端部后完成转向与换沟
- 依次遍历全部
6条垄沟 - 最终从唯一出口驶离场地
- 自主停回启动区
如果把整个任务抽象出来,本质上就是一个 S 形遍历任务。
示意如下:
入口 -> 沟1 ↑
↓ 沟2
↑ 沟3
↓ 沟4
↑ 沟5
↓ 沟6 -> 出口
这类问题最重要的不是“任意时刻知道自己在全局坐标中的绝对位置”,而是:
- 知道自己当前在第几条沟
- 知道下一条目标沟是哪一条
- 知道当前处于入沟、走沟、到端、换沟、出场还是回停阶段
- 在每个阶段里,用合适的传感器和控制策略去完成当前动作
3. 为什么不能只靠局部导航
当前项目已经具备很强的局部导航能力,尤其是在单条垄沟内:
- 侧向测距可以支撑居中或偏置行驶
- IMU 可以提供航向与转角信息
- 前向测距可以做端部触发
- 里程计可以做短时推进量估计
但只靠局部导航会遇到明显边界:
3.1 局部导航能解决什么
局部导航适合解决:
- 在窄沟内居中
- 在窄沟内保持姿态稳定
- 接近端部时减速或停车
- 在局部可观测条件下闭环修正误差
3.2 局部导航解决不了什么
局部导航不擅长解决:
- 我现在完成了第几条沟
- 下一条目标沟应该是左边还是右边
- 转完向后该走多远才能接近下一条沟入口
- 什么时候该结束整场遍历并朝唯一出口离场
这些问题需要:
- 全局任务记忆
- 地图拓扑信息
- 阶段状态机
- 跨局部观测空窗的动作脚本
所以,仅靠“看到什么就跟什么”的局部反应式导航,不足以稳定跑完整场比赛。
4. 为什么也不建议直接上通用 SLAM
有些人看到“局部导航不够”,第一反应会是“那就做全局 SLAM”。
但当前赛题并不适合直接走这条路线。
4.1 地图不是未知的
赛场结构高度固定:
- 垄沟数固定
- 相对排列固定
- 出入口固定
- 启动区固定
这意味着没有必要像服务机器人那样,在未知环境中一边探索一边建图。
4.2 场地高度对称
6 条垄沟在局部上非常相似。
这会让很多通用全局定位方法遇到典型问题:
- 局部观测相似
- 重定位歧义大
- 小误差可能让系统把“第 2 沟”认成“第 3 沟”附近
4.3 比赛更看重稳定完赛,而不是地图美观
比赛规则更关心:
- 能不能完整遍历
- 能不能不撞边
- 能不能顺利出场
- 能不能停回启动区
不是在考察一套通用 SLAM 系统的建图效果。
4.4 通用 SLAM 工程负担大
如果直接上完整 SLAM,通常还要处理:
- 更复杂的状态与数据关联
- 更高的开发和调参成本
- 更重的算力与调度开销
- 更难解释的失败模式
这和当前项目追求的工程目标并不匹配。
5. 什么是“混合导航”
当前场景下推荐的“混合导航”,可以概括成一句话:
用固定地图决定去哪,用状态机决定现在该做什么,用局部传感器闭环决定这一小段怎么稳稳地过去。
它不是纯局部,也不是纯全局,而是分层协作。
6. 混合导航的三层结构
6.1 上层:固定地图与拓扑状态机
上层负责的是“全局任务理解”。
它需要维护的信息包括:
- 当前所在赛道段编号
- 当前已经完成了第几条垄沟
- 下一条目标垄沟是哪一条
- 当前应该左换沟还是右换沟
- 当前处于:启动、入场、走沟、到端、换沟、再入沟、出场、回停 的哪一阶段
这一层不一定关心厘米级位置,而更关心:
- 拓扑顺序
- 阶段推进
- 事件触发
可以把整场任务拆成固定段落,例如:
- 启动区准备
- 入口对准
- 垄沟 1 前进
- 端部换沟 1
- 垄沟 2 返回
- 端部换沟 2
- 垄沟 3 前进
- ...
- 最后一沟结束
- 出场
- 回停启动区
这就是“固定地图导航”的核心,不是基于任意坐标规划,而是基于已知赛道结构推进任务。
6.2 中层:段落动作与事件切换
中层负责把“上层目标”翻译成可执行动作。
例如在某个阶段,机器人可能执行:
- 入口慢速直行,直到捕获双侧结构
- 沿当前垄沟闭环跟踪
- 到端后原地转
90°或180° - 保持某个航向横向推进一段距离
- 在接近预计位置后减速,并等待重新捕获新垄沟
- 切回垄沟跟踪模式
这一层的本质是“段脚本 + 事件触发”。
它依赖:
- IMU 姿态
- 里程计推进量
- 前向/后向安全距离
- 局部结构重新捕获结果
这层很重要,因为许多时候机器人会暂时处于“看不到完整走廊结构”的状态,比如端部换沟阶段。
6.3 下层:局部传感器闭环
下层负责在小范围内把车稳稳控制住。
典型任务:
- 在垄沟内居中
- 在垄沟内偏向 1/4 宽度行驶
- 根据 IMU 保持航向
- 根据前向测距做减速与停车
这一层应当追求:
- 高频
- 稳定
- 可降级
- 不依赖复杂全局推理
你现在已有的大部分控制能力,都属于这一层。
7. 各类传感器在混合导航中的角色
7.1 左右 VL53L0X
推荐职责:
- 走廊内横向定位
- 居中/偏置行驶
- 近场重捕获新垄沟
不推荐职责:
- 远距离识别下一条垄沟入口
- 独立承担换沟全流程导航
原因很简单:
- 它们是近场侧向传感器
- 强项是局部几何闭环
- 弱项是远距离赛道级感知
7.2 IMU
推荐职责:
- 航向估计主来源
- 转向角度判定
- 无侧墙约束阶段的短时姿态保持
- 换沟阶段的朝向控制
IMU 在混合导航里非常关键,因为它能帮助机器人跨过“局部结构暂时缺失”的区间。
7.3 编码器 / 里程计
推荐职责:
- 估算走过了多长距离
- 在换沟动作中提供推进量
- 与状态机结合做段落退出条件
限制:
- 遇到地毯、打滑、轮胎差异时会有误差
因此它适合作为“推进量参考”,但不适合作为唯一定位真值。
7.4 前后长距测距
推荐职责:
- 到端检测
- 防撞保护
- 开阔区事件辅助
- 出场或接近边界时的安全约束
这类传感器不一定直接告诉你“下一沟入口就在前方”,但能帮助你判断:
- 是否接近端部
- 是否接近围栏
- 是否该切换动作阶段
8. 为什么这种方案适合当前比赛
8.1 它符合固定地图的特点
比赛地图结构是已知的。
这意味着:
- 目标垄沟不是未知搜索对象
- 换沟不必靠“发现远处入口”
- 可以由状态机根据当前进度直接推导“下一步该去哪”
8.2 它承认局部传感器的边界
混合导航没有让 VL53 去做它不擅长的事情。
它承认:
- VL53 负责局部
- IMU 负责短时姿态保持
- 里程计负责推进量
- 上层状态机负责“全局流程”
这是符合传感器物理特性的分工。
8.3 它能兼容尺寸误差与地毯
规则里有两个现实问题:
- 场地尺寸允许
+-5% - 有
2条垄沟会随机铺地毯
这意味着:
- 不能死信地图上的绝对尺寸
- 不能死信纯里程推进
混合导航的好处是:
- 上层地图只给出大方向和段结构
- 局部闭环用实时传感器做最终修正
这样既利用了先验地图,又不会被固定脚本锁死。
9. 一个典型的工作流程
下面给出一个典型流程,帮助理解这套导航在比赛中的运行方式。
9.1 启动与入场
- 上层状态机进入“入口对准”阶段
- 机器人从启动区朝入口前进
- 一旦左右侧传感器稳定捕获到垄沟结构,切换为垄沟跟踪模式
9.2 垄沟内前进
- 下层局部控制根据左右侧测距维持横向位置
- IMU 维持航向
- 前向测距用于到端检测
- 状态机记录当前垄沟编号与方向
9.3 到端
- 前向距离达到阈值
- 状态机判定当前垄沟已到端
- 进入转向阶段
9.4 换沟
- IMU 控制转向到目标朝向
- 编码器推进预定距离
- 长距测距做安全约束
- 接近预期位置后减速
- 直到左右 VL53 再次捕获新垄沟结构
9.5 再入沟
- 一旦检测到新的局部走廊结构
- 状态机确认已进入下一条垄沟
- 切换回局部走廊跟踪
9.6 重复直到遍历完成
- 状态机更新“当前第几沟”
- 按 S 形顺序重复以上过程
9.7 最终离场与回停
- 当最后一条垄沟完成后
- 状态机切换到出场段
- 利用固定地图与局部感知朝唯一出口离开
- 出场后再执行停回启动区动作
10. 与当前项目的关系
当前项目已经具备混合导航中的一部分基础:
- 局部走廊控制
- IMU 航向处理
- 到端检测
- 原地转向
- 段脚本雏形
但当前仍偏向:
- 单垄沟验证
- 局部闭环主导
- 缺少完整的赛道级段落管理
所以后续真正需要补的,并不是完全推翻现有控制,而是:
- 把“局部走廊能力”封装成底层能力
- 在其上补一个完整的固定地图状态机
- 把换沟和出场逻辑系统化
11. 一个容易犯的错误
在这类项目里,最容易犯的错误是两种极端:
11.1 极端一:把所有问题都交给局部传感器
这会导致:
- 换沟阶段无从判断全局目标
- 容易在端部迷失
- 难以稳定完成多垄沟遍历
11.2 极端二:把所有问题都交给“全局定位”
这会导致:
- 系统复杂度暴涨
- 对称环境下定位歧义严重
- 与比赛需求不匹配
混合导航的价值就在于避开这两个极端。
12. 推荐结论
对于当前比赛场景,推荐的总体思路是:
- 用固定地图描述整条 S 形任务路线
- 用拓扑状态机管理“当前在哪一段、下一步去哪一段”
- 用 IMU 和里程计支撑跨局部观测空窗的动作执行
- 用左右 VL53 负责局部垄沟内的高精度横向闭环与重捕获
- 用前后长距测距做端部识别与安全保护
这就是当前场景最合适的混合导航方案。
13. 一句话总结
这类比赛不是“靠一套万能定位算法解决全部问题”,而是“让合适的层做合适的事”:
- 地图负责全局流程
- 状态机负责阶段切换
- 传感器负责局部闭环
- 控制器负责把每一小段稳稳跑完
这就是混合导航的核心价值。