4. 运动学模型:差速驱动机器人的正运动学与逆运动学

聊到移动机器人,差速驱动绝对是最经典的结构之一。两个轮子,一个万向轮,就能让机器人前后走、原地转、画弧线。我最早接触这个模型是在做AGV小车的时候,当时觉得这东西太简单了,不就是两个轮子转嘛。结果一上手,发现转弯半径算不对,小车老往墙上怼。嗯,这里面的门道,咱们今天好好捋一捋。

4.1 什么是差速驱动?

说白了,差速驱动就是通过控制左右两个轮子的转速差,来实现机器人的运动控制。你想想看,如果两个轮子转速一样,机器人就直走。如果左轮快右轮慢,它就向右转。反过来,左慢右快,就向左转。如果两个轮子转速相反,那就能原地打转。

我在项目中遇到过一个问题:有同学觉得差速驱动只能走直线和转圈,其实不是。它能走出任意半径的圆弧,关键就在于左右轮速的配合。这个模型虽然简单,但它是理解更复杂运动学的基础。

核心概念:差速驱动机器人的运动学模型,描述的是轮子转速与机器人整体运动(线速度、角速度)之间的数学关系。

4.2 正运动学:从轮子转速到机器人运动

正运动学,就是已知左右轮子的转速,求机器人会怎么动。这在实际调试中非常有用——你给电机发指令,得知道机器人会往哪走。

先定义几个参数:

  • v:机器人的线速度(m/s)
  • ω:机器人的角速度(rad/s)
  • vL:左轮线速度(m/s)
  • vR:右轮线速度(m/s)
  • d:左右轮间距(m)
  • r:轮子半径(m)

正运动学公式其实很直观:

v = (v_R + v_L) / 2
ω = (v_R - v_L) / d

这两个公式,我建议你刻在脑子里。它们就是差速驱动运动学的灵魂。

如果轮子转速用角速度 ωL 和 ωR 表示(单位 rad/s),那线速度就是:

v_L = r * ω_L
v_R = r * ω_R

代入上面公式:

v = r * (ω_R + ω_L) / 2
ω = r * (ω_R - ω_L) / d

举个例子:假设轮子半径 r = 0.05m,轮间距 d = 0.3m。左轮转速 10 rad/s,右轮转速 15 rad/s。那机器人的线速度 v = 0.05 * (15+10)/2 = 0.625 m/s,角速度 ω = 0.05 * (15-10)/0.3 ≈ 0.833 rad/s。也就是说,机器人会以约 0.625 m/s 的速度向前走,同时以约 0.833 rad/s 的角速度向右转。

我的小技巧:调试时我习惯先算一个理论值,再实测对比。如果偏差超过5%,多半是轮子打滑或者轮间距测量不准。我曾经被这个坑过,后来每次都会用游标卡尺量三遍轮间距。

4.3 逆运动学:从目标运动到轮子转速

逆运动学是正运动学的反向过程——已知你想让机器人怎么走,求左右轮子该转多快。这在路径规划和控制中特别重要。

公式也很简单,从正运动学反推就行:

v_R = v + (ω * d) / 2
v_L = v - (ω * d) / 2

如果要用轮子角速度表示:

ω_R = (v + (ω * d) / 2) / r
ω_L = (v - (ω * d) / 2) / r

举个例子:你想让机器人以 0.5 m/s 的线速度向前走,同时以 0.5 rad/s 的角速度向左转。轮间距 d = 0.3m,轮半径 r = 0.05m。那右轮线速度 v_R = 0.5 + (0.5 * 0.3)/2 = 0.575 m/s,左轮线速度 v_L = 0.5 - (0.5 * 0.3)/2 = 0.425 m/s。换算成角速度,右轮 ω_R = 0.575/0.05 = 11.5 rad/s,左轮 ω_L = 0.425/0.05 = 8.5 rad/s。

注意:逆运动学解算出来的轮速,不能超过电机的最大转速。如果算出来轮速超限,说明你给的目标运动太激进了。我曾经在项目里遇到过这种情况,机器人原地转圈时角速度设太大,结果电机直接堵转。后来我加了个速度限幅,才解决问题。

4.4 运动学模型的可视化

为了让你更直观地理解差速驱动的运动学关系,我画了一张图。这张图展示了从轮子转速到机器人运动的完整映射关系。

差速驱动机器人运动学模型 输入(轮子转速) 左轮角速度 ωL 右轮角速度 ωR 轮间距 d,轮半径 r 正运动学 v = r·(ωR + ωL) / 2 ω = r·(ωR - ωL) / d 从轮速 → 机器人运动 已知 ωL, ωR 求 v, ω 输出 线速度 v 角速度 ω 逆运动学 ωR = (v + ω·d/2) / r ωL = (v - ω·d/2) / r 已知 v, ω 求 ωL, ωR 正运动学路径 逆运动学路径

这张图把正运动学和逆运动学的关系展示得很清楚。左边是输入(轮子转速),经过正运动学公式,得到右边的输出(机器人运动)。反过来,从右边的目标运动,通过逆运动学公式,又能算出左边的轮子转速。这就是一个完整的闭环。

4.5 实际应用中的注意事项

理论讲完了,咱们聊聊实际中容易踩的坑。

第一,轮子打滑。 这是差速驱动最常见的坑。我做过一个项目,在瓷砖地面上跑,轮子稍微有点水就打滑,运动学模型算出来的位置和实际位置差得离谱。后来我加了编码器,但编码器只能测轮子转了多少圈,打滑了它也不知道。所以,如果你对定位精度要求高,建议配合IMU或者视觉里程计做融合。

第二,轮间距的测量。 这个参数看着简单,但很多人量不准。轮间距不是两个轮子中心的距离,而是两个轮子与地面接触点之间的距离。如果轮子有宽度,这个距离和轮子中心距离是不一样的。我习惯的做法是:让机器人原地转一圈,根据实际转过的角度反推轮间距。

第三,电机响应延迟。 你给电机发一个转速指令,它不会瞬间达到目标转速。这个延迟会导致运动学模型算出来的轨迹和实际轨迹有偏差。解决办法是加一个速度环,或者在前馈控制中补偿这个延迟。

总结一下:差速驱动的运动学模型,核心就是正运动学和逆运动学两对公式。正运动学用于估计机器人当前的运动状态,逆运动学用于生成控制指令。两者配合使用,就能实现基本的运动控制。

我个人习惯在代码里把这两个函数封装好,调试的时候直接调用。这样既方便测试,也方便后续扩展。你想想看,如果以后要加全向轮或者阿克曼转向,只需要替换这两个函数就行,上层逻辑完全不用动。

好了,差速驱动的运动学就聊到这儿。记住那两对公式,它们会陪你走过很多项目。


专注资料整理