1. 导航基础:机器人导航概述、坐标系与位姿表示、里程计模型与误差分析
1.1 机器人导航到底在解决什么问题?
说白了,机器人导航就是让机器人知道「我在哪」「要去哪」「怎么去」。听起来简单,对吧?但我在项目里见过太多翻车案例——机器人原地打转、撞墙、甚至从楼梯上掉下去。嗯,这些坑我们后面都会讲到。
导航系统通常包含三个核心模块:
- 定位:确定机器人在地图中的位置和朝向
- 建图:构建环境地图(通常是栅格地图或拓扑地图)
- 路径规划:从A点到B点找一条安全可走的路线
我个人习惯把导航比作「人找路」:你看地图、认路标、迈步子。机器人也一样——它用传感器认路标(激光雷达、摄像头),用里程计算步子(轮子转了多少圈),再用算法规划路线。
核心要点:导航的成败,90%取决于你对「位姿」和「坐标系」的理解。这两块地基没打牢,后面所有算法都是空中楼阁。
1.2 坐标系与位姿表示——机器人的「世界观」
坐标系是导航的通用语言。你想想看,如果我说「往前走2米」,你得知道这个「前」是相对于谁的「前」。机器人也一样,它需要多个坐标系来理解世界。
1.2.1 常用坐标系
| 坐标系 | 符号 | 说明 | 典型用途 |
|---|---|---|---|
| 世界坐标系 | W / map | 固定在地面上的全局参考系 | 地图构建、全局路径规划 |
| 机器人坐标系 | R / base_link | 固定在机器人本体上,通常以中心为原点 | 里程计、运动控制 |
| 传感器坐标系 | S / laser_frame | 固定在传感器(如激光雷达)上 | 传感器数据采集、坐标变换 |
我在项目中遇到过最头疼的问题,就是坐标系标定没做好。有一次,激光雷达的数据和里程计数据差了10厘米,结果机器人死活建不出正确的图。后来发现是传感器安装位置没校准——嗯,这种低级错误,犯过一次就记住了。
1.2.2 位姿表示
位姿 = 位置 + 姿态。在二维平面中,我们用 (x, y, θ) 来表示:
x, y:机器人在世界坐标系中的坐标(单位:米)θ:机器人的朝向角(单位:弧度),通常以x轴正方向为0,逆时针为正
三维空间里就复杂一些,需要用到四元数或旋转矩阵。不过咱们这门课主要讲二维导航,三维的后面有机会再聊。
小技巧:ROS里用 geometry_msgs/Pose 消息表示位姿。我个人习惯在代码里统一用四元数存储,需要角度时再转成欧拉角——这样可以避免万向锁问题。
1.3 里程计模型——机器人怎么「感觉」自己在动?
里程计,说白了就是机器人用自己的轮子来估算自己走了多远、转了多少。它不依赖外部传感器,所以也叫「航位推算」。
1.3.1 差速轮模型
最常见的两轮差速底盘,左右轮各有一个编码器。假设:
- 左轮速度:
v_l - 右轮速度:
v_r - 轮距(两轮中心距离):
L
那么机器人的线速度和角速度分别为:
v = (v_r + v_l) / 2
ω = (v_r - v_l) / L
有了 v 和 ω,我们就可以更新位姿:
Δx = v * cos(θ) * Δt
Δy = v * sin(θ) * Δt
Δθ = ω * Δt
这段代码看起来简单,但实际跑起来问题很多。我记得有一次在瓷砖地面上测试,机器人走直线走了不到5米就偏了30度——因为地面太滑,轮子打滑了。编码器还在转,但机器人根本没动。
避坑指南:我曾经在工厂地坪上吃过亏——地面有油污,轮子打滑导致里程计完全失效。后来我养成了一个习惯:每次部署前先做一次「空转测试」,确认轮子不打滑再跑导航。
1.3.2 其他常见底盘模型
| 模型类型 | 特点 | 适用场景 |
|---|---|---|
| 差速轮 | 结构简单,可原地旋转 | 室内服务机器人、AGV |
| 阿克曼 | 类似汽车,不能原地旋转 | 室外无人车、巡检机器人 |
| 全向轮 | 可横向移动,灵活性高 | 仓储机器人、竞赛机器人 |
1.4 误差分析——为什么里程计「越走越偏」?
里程计最大的问题就是误差会累积。你想想看,每走一步都有微小误差,走了一千步之后,误差可能已经大到离谱了。
1.4.1 误差来源
- 系统误差:轮子直径不准确、轮距测量偏差、编码器分辨率有限
- 非系统误差:地面打滑、地面不平、轮胎磨损
我做过一个实验:让机器人沿着一个2米×2米的正方形走一圈,回到起点。理论上位姿应该是 (0, 0, 0),但实际测出来是 (0.15, -0.08, 0.05)。这就是误差累积的结果。
1.4.2 误差模型
常用的误差模型是「概率里程计模型」,它把位姿更新看作一个概率分布:
p(x_t | x_{t-1}, u_t) ~ N(μ_t, Σ_t)
其中 μ_t 是预测位姿,Σ_t 是协方差矩阵,表示不确定性。随着时间推移,Σ_t 会越来越大——这就是为什么里程计不能单独用太久。
关键认知:里程计在短距离内(比如10米以内)精度还不错,但长距离必须结合其他传感器(激光雷达、IMU、GPS)做融合。我见过有人只用里程计跑了100米,结果定位误差超过2米——这种数据建出来的图根本没法用。
1.5 本章知识体系总览
下面这张图把本章的核心知识点串起来了。你可以把它当作导航基础的地图——后面每一章都会回到这里。
1.6 本章小结
这一章我们聊了导航的三大基础:
- 坐标系与位姿——机器人的「世界观」,搞不清楚坐标系,后面全是错的
- 里程计模型——机器人怎么估算自己的运动,差速轮是最常见的模型
- 误差分析——里程计会越走越偏,必须理解误差来源才能对症下药
我个人觉得,这一章最重要的不是记住公式,而是建立「坐标系思维」和「误差意识」。后面讲到卡尔曼滤波、粒子滤波、SLAM的时候,你会发现这些基础概念会反复出现。嗯,打好地基,后面才能盖高楼。