4、定位基础:轮式里程计模型与标定,运动学模型(阿克曼、差速)

各位同学,今天我们聊点实在的。定位模块里,轮式里程计是成本最低、最可靠的“保底”手段。你想想看,GPS 会丢星,激光雷达会退化,但只要你轮子还在转,里程计就能给你一个相对位置。我做了这么多年自动驾驶,见过太多团队一上来就搞多传感器融合,结果轮子标定都没做准,最后定位飘得一塌糊涂。

这一章,我们就来把轮式里程计的底子打扎实。我会从最基本的模型讲起,再到标定方法,最后对比阿克曼和差速这两种最常见的运动学模型。嗯,都是我在项目里踩过坑、填过土的东西。

4.1 轮式里程计的核心思想

说白了,里程计就是“用轮子转了多少圈,来推算车走了多远”。这个思路很朴素,但实现起来有不少细节。

核心公式其实就一个:

位移 = 轮子周长 × 编码器脉冲数 / 每圈脉冲数

但这里有个关键问题——轮子周长不是一成不变的。轮胎气压、负载、磨损都会改变它。我曾经在一个项目中,就因为换了批新轮胎没重新标定,导致定位误差在 100 米内累积了 3 米多。所以,标定不是一次性的,得定期做。

里程计误差来源(按影响程度排序):

  1. 轮子半径误差——最常见,影响比例因子
  2. 轮距误差——影响转弯时的角速度
  3. 编码器分辨率——低速时尤其明显
  4. 打滑——无法避免,只能通过模型补偿

4.2 差速模型:两轮驱动的“直觉”

差速模型在扫地机器人、AGV 上用得最多。它的原理很简单:左右轮速度不同,车就会转弯。

我习惯把差速模型拆成两步来理解:

  1. 先算线速度:左右轮速度的平均值
  2. 再算角速度:左右轮速度差除以轮距

公式长这样:

v = (v_left + v_right) / 2
ω = (v_right - v_left) / L

其中 L 是左右轮的轮距

有了 v 和 ω,我们就可以用下面的方式更新位姿:

Δx = v * cos(θ) * Δt
Δy = v * sin(θ) * Δt
Δθ = ω * Δt

我的经验:差速模型在低速(< 1m/s)时非常准,但一旦速度上去,打滑效应会急剧放大。我曾经在测试一台 1.5m/s 的 AGV 时,转弯处的误差直接飙到了 15%。后来加了 IMU 辅助才压下来。

4.3 阿克曼模型:汽车的“标准答案”

阿克曼模型模拟的是汽车转向几何。它的核心是:转弯时,内外侧轮的转弯半径不同,但所有轮子的转向中心交于一点。

这个模型比差速复杂一些,但更贴近真实车辆。我建议你记住两个关键参数:

  • 轴距(Wheelbase):前后轴的距离
  • 轮距(Track):左右轮的距离

阿克曼模型的运动学公式:

v = 后轴中心速度
ω = v * tan(δ) / L

其中 δ 是前轮等效转角,L 是轴距

位姿更新方式和差速模型一样,只是 v 和 ω 的计算方式不同。

注意:阿克曼模型假设车轮纯滚动,没有侧滑。但在实际中,尤其是高速过弯时,侧偏角不可忽略。我建议在 5m/s 以上时,引入一个侧偏刚度补偿项。

4.4 两种模型的对比

我把两种模型的核心差异整理成了表格,方便你对照:

对比项 差速模型 阿克曼模型
适用平台 两轮差速底盘、履带车 汽车、三轮车
控制输入 左右轮速度 后轮速度 + 前轮转角
转弯方式 差速转向 前轮转向
低速精度 高 中
高速精度 低(打滑严重) 中(需补偿侧偏)
标定参数 轮距、左右轮半径 轴距、轮距、转角零偏

4.5 里程计标定:从理论到实战

标定是里程计落地的关键一步。我见过太多人直接拿理论参数用,结果误差大得离谱。

我个人习惯用 UMBmark 方法来标定差速底盘。这个方法的核心思路是:让机器人走一个正方形,然后看终点误差。

具体步骤:

  1. 让机器人从起点出发,走一个 4m × 4m 的正方形
  2. 记录终点位置和朝向的误差
  3. 根据误差反推轮距和轮半径的修正系数

对于阿克曼模型,标定稍微复杂一些。我通常分两步走:

  • 直线标定:让车走直线,修正轮半径比例因子
  • 转弯标定:让车走固定半径的圆,修正轴距和转角零偏

避坑指南:我曾经在标定阿克曼底盘时,发现直线标定怎么都做不准。后来排查了半天,发现是轮胎气压不一致导致的。所以标定前,先检查轮胎气压,这是最容易被忽略的一步。

4.6 知识体系总览

下面这张图把本章的核心知识点串了起来。你可以把它当作一个快速索引:

轮式里程计知识体系 轮式里程计知识体系 轮式里程计 运动学模型 标定方法 误差处理 差速模型 阿克曼模型 UMBmark 直线+圆标定 打滑补偿 v = (vL+vR)/2 v = v_rear 走正方形 走直线+圆 IMU辅助补偿 核心要点 1. 差速模型适合低速,阿克曼模型适合中高速 2. 标定是里程计精度的关键,不要跳过

4.7 实战建议

最后,我结合自己的项目经验,给你几条实在的建议:

  • 先做标定,再做融合——很多团队一上来就搞 EKF 融合,结果里程计本身误差就很大,融合效果自然好不到哪去。先把里程计标定到 1% 以内的误差,再谈融合。
  • 注意编码器安装——编码器和轮轴的同心度很重要。我见过一个案例,编码器安装偏了 1mm,结果每转一圈就多计 6mm 的位移,累积下来非常可观。
  • 定期重新标定——轮胎磨损、气压变化都会改变轮子半径。我建议每 3 个月或每 1000 公里重新标定一次。
  • 不要迷信理论参数——理论轮距和实际轮距往往有差异。我建议用 UMBmark 方法实测修正,而不是直接拿设计图纸上的参数用。

最后提醒一句:里程计在长距离、长时间运行下,误差一定会累积。它适合做短距离的局部定位,或者作为融合定位的一个输入源。千万别指望单靠里程计就能搞定全局定位,那是不现实的。