4. 运动学模型:差速轮模型、阿克曼模型、全向轮模型,正逆运动学解算
聊到移动机器人的运动学,说白了就是回答两个问题:“我给了轮子什么速度,车体会怎么动?” 和 “我想让车体怎么动,轮子该转多快?”。前者叫正运动学,后者叫逆运动学。
我在项目里见过不少新手,一上来就调PID,结果车跑起来歪歪扭扭。查了半天,发现是运动学模型搞错了。嗯,基础不牢,地动山摇。今天咱们就把三种最常见的轮式模型掰开揉碎讲清楚。
4.1 差速轮模型
差速轮,最常见,也最直观。两个驱动轮独立控制,再加一个或两个万向轮做支撑。靠左右轮的速度差来实现转向。
4.1.1 正运动学解算
已知左右轮转速,求车体速度。公式其实很简单:
v = (v_right + v_left) / 2
ω = (v_right - v_left) / L
这里 v 是车体线速度,ω 是角速度,L 是轮距(左右轮中心距)。
L 别直接拿图纸尺寸用。装上轮胎,充好气,实测一下轮子接地点的距离。差个几毫米,转弯半径就不对了。
4.1.2 逆运动学解算
反过来,给定目标速度和角速度,求左右轮转速:
v_right = v + (ω * L) / 2
v_left = v - (ω * L) / 2
你看,其实就是正解的反推。但这里有个坑——轮子转速不能超过电机最大转速。我遇到过一回,给了一个很大的角速度指令,结果算出来的右轮转速直接爆表,电机堵转,车原地打转。所以逆解算之后,一定要加个限幅处理。
4.2 阿克曼模型
阿克曼模型,就是汽车转向模型。前轮转向,后轮驱动。它的核心是:转弯时,所有轮子的轴线要交于一点,这个点就是瞬时转动中心(ICR)。
4.2.1 几何关系
阿克曼转向的几何约束,说白了就是内侧轮转角要比外侧轮大一点。公式:
cot(δ_outer) - cot(δ_inner) = L / W
其中 L 是轴距,W 是轮距,δ 是转向角。
我建议你在做阿克曼底盘时,先画个图。把四个轮子的位置标出来,然后画一条通过后轴中点的垂线,再从前轮中心画两条线交于后轴延长线上。嗯,几何关系一目了然。
4.2.2 正逆运动学
正运动学:已知转向角 δ 和后轮速度 v,求车体状态:
v_body = v
ω = v * tan(δ) / L
逆运动学:已知目标 v 和 ω,求转向角和后轮速度:
δ = atan2(ω * L, v)
v_rear = v
v 接近 0),逆解算会出问题。因为 atan2 的分母很小,算出来的转向角会剧烈抖动。我一般会在速度低于某个阈值时,直接让转向角归零,只做原地转向。
4.3 全向轮模型
全向轮,也叫麦克纳姆轮。它的特点是:可以横向移动。每个轮子有多个小辊子,与地面接触时会产生斜向的摩擦力。
我个人觉得,全向轮是三种模型里最“反直觉”的。你让四个轮子都正转,车不一定往前走,可能斜着跑。为什么?因为辊子的角度决定了力的方向。
4.3.1 正运动学解算
以四轮麦克纳姆轮为例,假设辊子与轮子轴线成 45 度角。正运动学公式:
v_x = (v_fl + v_fr + v_rl + v_rr) / 4
v_y = (-v_fl + v_fr + v_rl - v_rr) / 4
ω = (-v_fl + v_fr - v_rl + v_rr) / (4 * (L + W))
这里 v_fl 是左前轮转速,v_fr 是右前轮,以此类推。L 是半轴距,W 是半轮距。
4.3.2 逆运动学解算
逆解算就是把上面的矩阵求逆。给定目标 v_x、v_y、ω:
v_fl = v_x - v_y - ω * (L + W)
v_fr = v_x + v_y + ω * (L + W)
v_rl = v_x + v_y - ω * (L + W)
v_rr = v_x - v_y + ω * (L + W)
4.4 三种模型对比
我把三种模型的核心差异整理成了一张表,方便你对照:
| 特性 | 差速轮 | 阿克曼 | 全向轮 |
|---|---|---|---|
| 自由度 | 2 (v, ω) | 2 (v, ω) | 3 (v_x, v_y, ω) |
| 横向移动 | 否 | 否 | 是 |
| 原地旋转 | 是 | 否 | 是 |
| 地面要求 | 低 | 低 | 高 |
| 控制复杂度 | 低 | 中 | 高 |
| 典型应用 | 扫地机、AGV | 汽车、无人车 | 仓储机器人 |
4.5 知识体系总览
下面这张图,把三种模型的正逆运动学关系串起来了。你可以把它当作本章的“地图”:
4.6 实际项目中的选型建议
说了这么多理论,最后聊聊怎么选。我个人的经验是:
- 差速轮:适合室内平地、需要频繁原地转向的场景。比如扫地机器人、服务机器人。成本低,控制简单。
- 阿克曼:适合室外、高速场景。比如无人配送车、自动驾驶汽车。转弯半径大,但高速稳定性好。
- 全向轮:适合狭窄空间、需要横向移动的场景。比如仓储机器人、手术室转运车。但地面必须干净平整。