2. 机器人运动学基础:差速轮模型、阿克曼模型、全向轮模型简介

各位同学,欢迎来到《机器人局部路径规划与避障策略实战》的第一章。

做机器人规划,说白了,你得先懂你的机器人是怎么动的。你想想看,连车怎么转弯、怎么刹车都不清楚,你怎么给它规划路径?

我个人习惯,在讲任何算法之前,先把“腿”搞清楚。这里的“腿”,就是机器人的运动学模型。今天咱们就聊聊最常见的三种:差速轮、阿克曼、全向轮。

2.1 差速轮模型:最朴素的“坦克转向”

差速轮模型,我估计是大家接触最多的。两个驱动轮,一个万向轮(或者两个)。靠左右轮的速度差来实现转向。

核心原理:

  • 左轮速度 = vL,右轮速度 = vR
  • 线速度 v = (vL + vR) / 2
  • 角速度 ω = (vR - vL) / d (d 是轮距)

嗯,这里要注意:如果 vL = vR,直线前进。如果 vL = -vR,原地旋转。说白了,就是坦克的转向方式。

我在项目中遇到过:有一次用差速轮小车做室内导航,发现转弯时总是打滑。后来排查发现,是轮距 d 的测量误差太大。差速轮对轮距非常敏感,差个几毫米,转弯半径就偏了。

避坑指南:

我曾经在调试时,直接把左右轮速度设成相反数,以为能原地转。结果小车在地上画了个大圈。为什么?因为轮子打滑了。差速轮原地旋转时,如果地面摩擦力不够,或者重心偏了,根本转不动。建议实际项目中,原地旋转速度不要超过 0.5 rad/s。

代码示例(ROS 中常见的 cmd_vel 转换):

// 输入:线速度 v,角速度 ω
// 输出:左轮速度 vL,右轮速度 vR
// 轮距 d = 0.5m

float vL = v - (ω * d / 2.0);
float vR = v + (ω * d / 2.0);

// 限幅处理,防止电机过载
if (abs(vL) > MAX_SPEED) vL = sign(vL) * MAX_SPEED;
if (abs(vR) > MAX_SPEED) vR = sign(vR) * MAX_SPEED;

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

阿克曼模型,说白了就是汽车。前轮转向,后轮驱动。你想想看,汽车转弯时,四个轮子的轨迹是四个同心圆。这就是阿克曼转向几何要解决的问题。

核心公式:

  • 转弯半径 R = L / tan(δ) (L 是轴距,δ 是前轮转角)
  • 内轮转角 δi 和外轮转角 δo 满足:cot(δo) - cot(δi) = d / L

为什么会这样?因为内轮走的圆弧半径小,外轮走的圆弧半径大。如果两个前轮转同样的角度,轮胎就会侧滑。阿克曼几何就是让内外轮转角不同,保证所有轮子都做纯滚动。

我个人习惯:在做阿克曼模型的路径规划时,一定要考虑最小转弯半径。比如你的车最小转弯半径是 2 米,那规划出来的路径曲率就不能超过 0.5。否则,车根本拐不过去。

避坑指南:

我曾经在做一个园区无人车项目时,直接用了理想阿克曼模型。结果发现,实际车辆在低速时,轮胎的侧偏特性会导致实际转弯半径比理论值大 10%-20%。后来我加了一个经验修正系数,才把轨迹跟踪精度提上去。

代码示例(阿克曼模型的前轮转角计算):

// 输入:期望转弯半径 R,轴距 L
// 输出:前轮转角 δ

float delta = atan2(L, R);

// 阿克曼转向几何修正
float delta_inner = atan2(L, R - d/2);
float delta_outer = atan2(L, R + d/2);

// 实际控制时,左右轮分别用 delta_inner 和 delta_outer

2.3 全向轮模型:想怎么走就怎么走

全向轮,说白了就是可以“横着走”。它靠轮子上的小滚轮来实现侧向滑动。最常见的全向轮是麦克纳姆轮(Mecanum Wheel)。

核心原理:

  • 四个轮子独立驱动,每个轮子有 45° 的滚轮
  • 通过不同轮子的速度组合,实现任意方向的平移和旋转
  • 运动学矩阵:
    [vx, vy, ω] = M * [ω1, ω2, ω3, ω4]T

嗯,这里要注意:全向轮虽然灵活,但它的运动学解算不是唯一的。四个轮子,三个自由度,所以有冗余。我一般用伪逆矩阵来求解。

我在项目中遇到过:用麦克纳姆轮做仓储机器人,发现它在瓷砖地面上跑的时候,震动特别大。后来发现是滚轮和地面的接触点一直在变,导致机器人重心上下波动。解决办法是加了一层软胶垫,或者换用全向轮中的另一种——全向轮(Omni Wheel),它的滚轮是垂直的,震动会小一些。

避坑指南:

我曾经以为全向轮可以无视地面条件。结果在户外草地上测试,轮子直接陷进去了。全向轮的滚轮很小,对地面平整度要求很高。室内光滑地面没问题,户外就别想了。

代码示例(麦克纳姆轮运动学解算):

// 输入:期望速度 vx, vy, ω
// 输出:四个轮子的转速 w1, w2, w3, w4
// 轮距 Lx, Ly

float w1 = (vx - vy - (Lx + Ly) * ω) / R;
float w2 = (vx + vy + (Lx + Ly) * ω) / R;
float w3 = (vx + vy - (Lx + Ly) * ω) / R;
float w4 = (vx - vy + (Lx + Ly) * ω) / R;

// 注意:不同安装方式,符号可能不同

2.4 三种模型的对比

特性 差速轮 阿克曼 全向轮
自由度 2(v, ω) 2(v, δ) 3(vx, vy, ω)
能否横移
原地旋转 不能
地面适应性 差(需平整地面)
控制复杂度
典型应用 扫地机、AGV 汽车、无人车 仓储机器人

好了,这一章就到这里。三种模型各有优劣,选型时一定要结合你的实际场景。下一章,咱们聊聊路径规划中最基础的东西——全局路径规划与局部路径规划的区别。

公众号:蓝海资料掘金营,微信deep3321