459 lines
11 KiB
Markdown
459 lines
11 KiB
Markdown
|
|
# 固定地图赛道的混合导航说明
|
|||
|
|
|
|||
|
|
## 1. 文档目的
|
|||
|
|
|
|||
|
|
本文档面向后续接手项目的人,说明当前比赛场景下为什么推荐采用一种“混合导航”方案,而不是单纯依赖局部传感器闭环,也不是直接上通用 SLAM / 全局路径规划。
|
|||
|
|
|
|||
|
|
这里的“混合导航”特指:
|
|||
|
|
|
|||
|
|
- 上层使用固定地图和拓扑状态机
|
|||
|
|
- 中层使用段落动作与事件切换
|
|||
|
|
- 下层使用局部传感器闭环稳定控制
|
|||
|
|
|
|||
|
|
这套思路适用于当前这类:
|
|||
|
|
|
|||
|
|
- 场地结构固定
|
|||
|
|
- 任务流程固定
|
|||
|
|
- 局部几何约束很强
|
|||
|
|
- 但局部传感器看不到全局目标
|
|||
|
|
|
|||
|
|
的比赛型机器人系统。
|
|||
|
|
|
|||
|
|
## 2. 场地与任务本质
|
|||
|
|
|
|||
|
|
根据比赛规则与 `HANDOFF.md`:
|
|||
|
|
|
|||
|
|
- 场地大小为 `390cm x 300cm`
|
|||
|
|
- 内部有 `5` 条田垄
|
|||
|
|
- 实际需要遍历的是 `6` 条垄沟
|
|||
|
|
- 每条垄沟宽 `40cm`
|
|||
|
|
- 每条田垄长 `220cm`
|
|||
|
|
- 只有 `1` 个出入口
|
|||
|
|
- 出入口外有启动区
|
|||
|
|
|
|||
|
|
从导航角度,这不是自由环境中的随机移动问题,而是一个非常明确的固定任务:
|
|||
|
|
|
|||
|
|
1. 从启动区进入场地
|
|||
|
|
2. 进入某一条垄沟
|
|||
|
|
3. 沿垄沟稳定前进并作业
|
|||
|
|
4. 到达端部后完成转向与换沟
|
|||
|
|
5. 依次遍历全部 `6` 条垄沟
|
|||
|
|
6. 最终从唯一出口驶离场地
|
|||
|
|
7. 自主停回启动区
|
|||
|
|
|
|||
|
|
如果把整个任务抽象出来,本质上就是一个 **S 形遍历任务**。
|
|||
|
|
|
|||
|
|
示意如下:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
入口 -> 沟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. 一句话总结
|
|||
|
|
|
|||
|
|
这类比赛不是“靠一套万能定位算法解决全部问题”,而是“让合适的层做合适的事”:
|
|||
|
|
|
|||
|
|
- 地图负责全局流程
|
|||
|
|
- 状态机负责阶段切换
|
|||
|
|
- 传感器负责局部闭环
|
|||
|
|
- 控制器负责把每一小段稳稳跑完
|
|||
|
|
|
|||
|
|
这就是混合导航的核心价值。
|