第一章:Nav2避障概述
1.1 避障在导航栈中的位置
大家好,我是你们这门课的老朋友。做机器人导航这些年,我最大的感触就是:定位和规划决定了机器人能不能走,而避障决定了它能不能活着走到终点。
在Nav2的架构里,避障模块位于全局规划器和控制执行器之间。说白了,全局规划器画了一条大路,局部规划器(也就是避障模块)负责在这条路上躲开突然冒出来的障碍物。
我习惯把导航栈比作一个司机团队:
- 全局规划器:看地图的老司机,知道从北京到上海走哪条高速
- 避障模块:眼前盯着路况的驾驶员,看到前面有坑就绕一下
- 里程计/定位:司机的眼睛和耳朵,告诉车现在在哪
你想想看,如果避障模块调得不好,全局规划得再完美也没用。我在项目里见过太多次了——全局路径画得漂漂亮亮,结果机器人原地转圈,就是因为避障参数没调对。
核心观点:避障是导航系统中最贴近物理世界的一层。它直接面对传感器数据,处理的是真实环境中的不确定性。调参的好坏,决定了机器人是「优雅通过」还是「撞墙卡死」。
1.2 常见避障算法分类
Nav2里主流的避障算法有三种:DWA、TEB、MPC。嗯,这里要注意,它们不是互斥的,你可以根据场景选一个,也可以组合使用。
| 算法 | 核心思想 | 适用场景 | 我踩过的坑 |
|---|---|---|---|
| DWA (动态窗口法) | 在速度空间采样,选一条最优轨迹 | 室内、低速、环境变化不剧烈 | 曾经在走廊里,DWA老往墙边蹭,因为代价地图膨胀层设太小了 |
| TEB (时间弹性带) | 把路径看作弹性带,优化时间和形状 | 狭窄通道、需要精确绕障 | 有一次TEB在U型弯里来回震荡,最后发现是时间分辨率设太高了 |
| MPC (模型预测控制) | 预测未来N步,滚动优化 | 高速、动态障碍物多、需要平滑运动 | MPC计算量大,我在树莓派上跑差点把CPU干烧了 |
我个人习惯这样选:简单场景用DWA,复杂静态环境用TEB,动态人流多的场景上MPC。当然,这只是经验之谈,具体还得看你的机器人底盘和传感器配置。
1.3 课程目标与前置知识
这门课的目标很明确:让你拿到一个机器人,能独立完成避障调参,解决实际运行中的各种问题。
具体来说,学完这30章,你应该能:
- 看懂Nav2避障相关的所有参数,知道每个参数是干嘛的
- 遇到机器人抖动、绕远路、卡死等问题,能快速定位到参数
- 根据不同的场景(仓库、家庭、医院)定制避障策略
- 甚至能自己改源码,加一些奇奇怪怪的功能
前置知识提醒:你需要了解ROS2的基本概念(节点、话题、服务),会用Nav2跑起来一个demo。如果还不会,建议先花两天时间跑通Nav2的turtlebot3示例。嗯,真的只要两天。
1.4 本章知识体系总览
下面这张图是我亲手画的,把第一章的核心逻辑串起来了。你看完应该能明白避障在整个导航栈里扮演什么角色。
从这张图你能看到,避障模块夹在全局规划和执行控制之间,它既要接收全局路径的指引,又要实时处理传感器数据。说白了,它是个「翻译官」——把宏观的路线规划翻译成微观的、能躲开障碍物的具体动作。
避坑指南:我曾经犯过一个低级错误——把避障模块的更新频率设得比传感器频率还高。结果机器人疯狂抖动,因为每次规划还没算完,新的传感器数据又来了。记住:避障频率 ≤ 传感器频率,这是铁律。
好了,第一章就到这里。你理解了避障在导航栈中的位置,知道了三种主流算法的区别,也清楚了这门课要带你达到什么水平。从下一章开始,我们会深入DWA的每一个参数,手把手教你调出一套丝滑的避障配置。