第二章 机器人运动学基础:刚体运动描述、齐次变换矩阵、正运动学与逆运动学入门(以2轮差速模型为例)

各位同学,欢迎来到第二章。

这一章,我们聊聊机器人运动学。说实话,这是整个视觉引导和运动规划的基石。你想想看,如果连机器人怎么动、动到哪里去都说不清楚,那后面的避障、路径规划根本无从谈起。

我个人习惯把运动学比作「机器人的语言」。你得先学会这门语言,才能跟机器人沟通。今天我们就从最基础的刚体运动描述开始,一步步深入到齐次变换矩阵,最后用2轮差速模型把正逆运动学讲明白。

2.1 刚体运动描述:位置与姿态

机器人本质上是一个刚体。刚体在空间中的运动,说白了就是两件事:它在哪里(位置),以及它朝哪个方向(姿态)。

位置很好理解,就是三维空间里的一个点,用坐标 (x, y, z) 表示。但姿态就有点意思了。我记得刚入行时,总以为姿态就是「转了个角度」,后来发现完全不是那么回事。

描述姿态,常用的有三种方式:

  • 旋转矩阵:3x3的矩阵,最直观,但参数冗余(9个参数描述3个自由度)。
  • 欧拉角:绕固定轴依次旋转,比如 Roll-Pitch-Yaw。简单易懂,但有万向锁问题。
  • 四元数:4个参数,无奇异性,插值平滑。我在做无人机项目时,姿态估计全用的四元数。

这里我给大家一个建议:做视觉引导时,尽量用四元数。为什么?因为视觉SLAM输出的姿态基本都是四元数,你硬要转成欧拉角,反而容易引入麻烦。

小技巧:如果你非要用欧拉角,记得先搞清楚旋转顺序。ROS里默认是 ZYX 顺序,也就是先绕Z轴转(yaw),再绕Y轴转(pitch),最后绕X轴转(roll)。搞反了顺序,姿态就全乱了。

2.2 齐次变换矩阵:把位置和姿态打包

有了位置和姿态,我们怎么把它们放在一起?答案就是齐次变换矩阵。

齐次变换矩阵是一个 4x4 的矩阵,长这样:

| R   t |
| 0   1 |

其中 R 是 3x3 的旋转矩阵,t 是 3x1 的平移向量。最后一行是 [0 0 0 1]。

为什么要加最后一行?说白了,就是为了把旋转和平移统一成矩阵乘法。你想想看,如果没有齐次坐标,你要先旋转再平移,得写两个式子。有了齐次变换矩阵,一个矩阵乘法就搞定了。

我曾经在做一个机械臂抓取项目时,需要把相机坐标系下的物体位姿转换到机器人基坐标系下。当时就是靠齐次变换矩阵链式相乘,一行代码搞定坐标变换。嗯,那种感觉真的很爽。

核心要点:齐次变换矩阵的逆矩阵,就是反向变换。如果你有 T_A_B(从A到B的变换),那么 T_B_A = inv(T_A_B)。这个性质在视觉引导中极其常用。

2.3 2轮差速模型:正运动学

好了,理论讲完了,我们来看一个具体的例子——2轮差速模型。这是移动机器人最经典的底盘结构,像扫地机器人、AGV小车,基本都是这个模型。

2轮差速模型的核心思想:两个轮子独立驱动,通过转速差实现转向

先定义几个变量:

  • v:机器人线速度(m/s)
  • ω:机器人角速度(rad/s)
  • v_L:左轮线速度
  • v_R:右轮线速度
  • d:轮距(两个轮子中心的距离)
  • r:轮子半径

正运动学,就是已知左右轮速度,求机器人整体的速度。公式很简单:

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

你看,线速度是两个轮子速度的平均值,角速度是速度差除以轮距。这个公式我闭着眼睛都能写出来,因为调试过太多次了。

有了 v 和 ω,我们就可以计算机器人在世界坐标系下的位置变化:

dx/dt = v * cos(θ)
dy/dt = v * sin(θ)
dθ/dt = ω

这就是经典的航迹推算公式。我在做AGV导航时,就是靠这个公式,配合编码器数据,实时估计机器人位姿。当然,编码器有累积误差,时间长了会漂移,所以需要视觉或激光雷达做修正。

注意:航迹推算只适用于短距离、短时间。如果你让机器人跑个几百米,纯靠编码器推算,位置误差可能达到米级。一定要结合其他传感器做融合。

2.4 2轮差速模型:逆运动学

逆运动学,就是已知目标速度 (v, ω),求左右轮应该转多快。

公式同样简单:

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

然后根据轮子半径 r,换算成电机转速:

ω_R = v_R / r
ω_L = v_L / r

这里有个坑,我曾经踩过。如果你直接给电机发转速指令,会发现机器人走不直。为什么?因为左右电机的特性不可能完全一致,哪怕你给同样的转速,实际速度也有微小差异。

我的解决办法是:加一个闭环控制。用编码器实时读取实际转速,然后通过PID调节,让左右轮的实际速度跟上目标值。这样机器人才能走直线。

避坑指南:我曾经在调试时发现,机器人原地旋转时,实际旋转中心不在两个轮子的中点。这是因为轮子打滑、地面不平整等原因。解决办法是:在运动学模型中引入一个「旋转中心偏移量」参数,通过实验标定出来。

2.5 知识体系总览

为了让大家更直观地理解本章的知识结构,我画了一张图:

第二章 机器人运动学基础 - 知识体系 机器人运动学 刚体运动描述 位置 (x, y, z) 姿态 (旋转矩阵/欧拉角/四元数) 齐次变换矩阵 旋转部分 R (3x3) 平移部分 t (3x1) 链式变换与逆变换 2轮差速模型 正运动学: 轮速 → 机器人速度 逆运动学: 目标速度 → 轮速 航迹推算: 速度 → 位姿 核心:位置 + 姿态 → 齐次变换 → 正逆运动学

这张图把本章的知识脉络梳理得很清楚。从刚体运动描述出发,到齐次变换矩阵,再到2轮差速模型的正逆运动学,环环相扣。

2.6 本章小结

这一章我们讲了三个核心内容:

  1. 刚体运动描述:位置用坐标,姿态用旋转矩阵/欧拉角/四元数。我推荐用四元数。
  2. 齐次变换矩阵:把位置和姿态打包成4x4矩阵,方便做坐标变换。逆变换就是求逆矩阵。
  3. 2轮差速模型:正运动学从轮速求机器人速度,逆运动学从目标速度求轮速。别忘了加闭环控制。

说实话,这些内容看起来简单,但真正用好并不容易。我在实际项目中见过太多人把正逆运动学搞反,或者忘记考虑轮距。嗯,多练练就好了。

一句话总结:运动学就是描述「机器人怎么动」的数学工具。掌握了它,你才能让机器人按照你的意图去运动。

专注资料整理