Files
ASER/Doc/HYBRID_NAVIGATION_GUIDE.md
2026-04-03 07:57:57 +08:00

11 KiB
Raw Blame History

固定地图赛道的混合导航说明

1. 文档目的

本文档面向后续接手项目的人,说明当前比赛场景下为什么推荐采用一种“混合导航”方案,而不是单纯依赖局部传感器闭环,也不是直接上通用 SLAM / 全局路径规划。

这里的“混合导航”特指:

  • 上层使用固定地图和拓扑状态机
  • 中层使用段落动作与事件切换
  • 下层使用局部传感器闭环稳定控制

这套思路适用于当前这类:

  • 场地结构固定
  • 任务流程固定
  • 局部几何约束很强
  • 但局部传感器看不到全局目标

的比赛型机器人系统。

2. 场地与任务本质

根据比赛规则与 HANDOFF.md

  • 场地大小为 390cm x 300cm
  • 内部有 5 条田垄
  • 实际需要遍历的是 6 条垄沟
  • 每条垄沟宽 40cm
  • 每条田垄长 220cm
  • 只有 1 个出入口
  • 出入口外有启动区

从导航角度,这不是自由环境中的随机移动问题,而是一个非常明确的固定任务:

  1. 从启动区进入场地
  2. 进入某一条垄沟
  3. 沿垄沟稳定前进并作业
  4. 到达端部后完成转向与换沟
  5. 依次遍历全部 6 条垄沟
  6. 最终从唯一出口驶离场地
  7. 自主停回启动区

如果把整个任务抽象出来,本质上就是一个 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. 启动区准备
  2. 入口对准
  3. 垄沟 1 前进
  4. 端部换沟 1
  5. 垄沟 2 返回
  6. 端部换沟 2
  7. 垄沟 3 前进
  8. ...
  9. 最后一沟结束
  10. 出场
  11. 回停启动区

这就是“固定地图导航”的核心,不是基于任意坐标规划,而是基于已知赛道结构推进任务。

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. 推荐结论

对于当前比赛场景,推荐的总体思路是:

  1. 用固定地图描述整条 S 形任务路线
  2. 用拓扑状态机管理“当前在哪一段、下一步去哪一段”
  3. 用 IMU 和里程计支撑跨局部观测空窗的动作执行
  4. 用左右 VL53 负责局部垄沟内的高精度横向闭环与重捕获
  5. 用前后长距测距做端部识别与安全保护

这就是当前场景最合适的混合导航方案。

13. 一句话总结

这类比赛不是“靠一套万能定位算法解决全部问题”,而是“让合适的层做合适的事”:

  • 地图负责全局流程
  • 状态机负责阶段切换
  • 传感器负责局部闭环
  • 控制器负责把每一小段稳稳跑完

这就是混合导航的核心价值。