3. 运动学模型基础:两轮差速模型、阿克曼模型、全向移动模型
做轨迹跟踪,第一步不是调PID,也不是写MPC。
第一步是搞清楚你的机器人到底怎么动。说白了,就是它的运动学模型。
我见过太多人,上来就套算法,结果轮子打滑、转向卡死、轨迹飞了,最后查半天发现是模型选错了。嗯,我自己也踩过这个坑。
这一章,咱们就把三种最常用的模型掰开揉碎讲清楚。两轮差速、阿克曼、全向移动。你搞懂了它们,后面的控制算法才有根。
3.1 两轮差速模型
这是最经典的模型。扫地机器人、AGV小车,大部分都是它。
原理很简单:两个驱动轮独立控制转速,通过转速差实现转向。你想想看,左轮转得快、右轮转得慢,车就往右拐。
核心公式:
设左右轮转速为 ωL、ωR,轮半径为 r,轮距为 L。
- 线速度 v = r · (ωR + ωL) / 2
- 角速度 ω = r · (ωR - ωL) / L
- 转弯半径 R = v / ω = L · (ωR + ωL) / (2 · (ωR - ωL))
我在项目里用这个模型做室内导航时,发现一个关键点:轮距L的测量误差影响极大。差1毫米,转弯半径就偏一大截。所以我的习惯是,装好车先跑个圆,反算L值校准一下。
避坑指南:
我曾经以为差速模型可以原地转弯(ωR = -ωL),但实际地面摩擦不均匀时,车会飘移。所以做轨迹跟踪时,尽量别让机器人长时间原地旋转,容易累积航向误差。
3.2 阿克曼模型
汽车就是典型的阿克曼模型。前轮转向,后轮驱动。
它的特点是:所有车轮的轴线必须交于一点(瞬时转动中心)。这样轮胎才不会侧滑。
| 参数 | 符号 | 说明 |
|---|---|---|
| 轴距 | L | 前后轴距离 |
| 前轮转角 | δ | 实际是左右轮转角平均值 |
| 后轮速度 | v | 车身纵向速度 |
运动学方程其实很简洁:
// 阿克曼模型状态方程
x_dot = v * cos(θ)
y_dot = v * sin(θ)
θ_dot = v * tan(δ) / L
为什么阿克曼模型比差速模型难控制?因为它的运动是非完整约束。说白了,你不能横着走,也不能原地转。倒车入库为什么难?就是因为这个约束。
我的经验:
做阿克曼轨迹跟踪时,前轮转角δ千万别直接给大角度。我曾经在高速测试时猛打方向,结果车直接甩尾。阿克曼模型在低速时(v < 1 m/s)线性度很好,但速度一上来,轮胎侧偏效应就出来了,模型会失准。
3.3 全向移动模型
这个就厉害了。全向轮(麦克纳姆轮、全向轮)可以让机器人任意方向平移,同时还能旋转。
你想想看,差速车要侧方停车得来回揉库,全向车直接横着就进去了。爽不爽?
以四轮麦克纳姆轮为例,每个轮子有独立的转速。运动学解算是个线性变换:
// 四轮麦克纳姆轮逆运动学
// 输入:车身速度 (vx, vy, ω)
// 输出:四个轮子转速 (w1, w2, w3, w4)
// Lx: 轮子纵向间距的一半
// Ly: 轮子横向间距的一半
// r: 轮子半径
w1 = (vx - vy - (Lx + Ly) * ω) / r
w2 = (vx + vy + (Lx + Ly) * ω) / r
w3 = (vx + vy - (Lx + Ly) * ω) / r
w4 = (vx - vy + (Lx + Ly) * ω) / r
关键点:
全向模型虽然灵活,但有个致命弱点——地面适应性差。全向轮的小滚子在粗糙地面会剧烈抖动,导致编码器读数噪声极大。我做仓储机器人时,在环氧地坪上跑得好好的,换到水泥地就崩了。
3.4 三种模型对比
我习惯用一个表格来选型。你直接对着看就行:
| 特性 | 两轮差速 | 阿克曼 | 全向移动 |
|---|---|---|---|
| 自由度 | 2 (v, ω) | 2 (v, δ) | 3 (vx, vy, ω) |
| 能否横移 | 否 | 否 | 是 |
| 原地旋转 | 可以 | 不可以 | 可以 |
| 地面要求 | 低 | 低 | 高 |
| 控制难度 | 低 | 中 | 中高 |
| 典型应用 | 室内AGV、扫地机 | 无人车、机器人小车 | 仓储、竞赛机器人 |
选型时我的建议很简单:
- 室内平地、需要频繁原地转向 → 差速
- 室外、高速、需要载重 → 阿克曼
- 空间狭小、需要全方位移动 → 全向
3.5 知识体系总览
下面这张图,是我自己梳理的三种模型的核心逻辑。你看一眼就能记住它们的关系:
3.6 模型选型实战建议
最后,我分享一个真实案例。
去年做一款室内配送机器人,甲方要求能进电梯、能侧方停靠。我一开始选了全向模型,觉得灵活。结果在电梯口的地缝里,全向轮卡住了,编码器数据直接炸了。
后来换成差速模型,虽然侧方停车要多揉两把,但可靠性高了一个量级。
我的建议:
别为了「看起来高级」选全向模型。除非你的地面是镜面级别的平整,否则差速和阿克曼永远是更稳妥的选择。轨迹跟踪算法再牛,也救不了物理模型本身的缺陷。