机器人运动学基础:刚体运动描述、旋转矩阵、齐次变换矩阵、正逆运动学
各位同学好,我是你们的老朋友。今天咱们来聊聊机器人运动学里最核心的几个概念。说实话,这部分内容我刚开始接触时也觉得有点抽象,但后来在项目里吃过几次亏,才真正体会到它的分量。
你想想看,一个机器人要抓杯子,它得先知道自己的手在哪儿,杯子在哪儿,然后才能规划怎么过去。这背后就是运动学在支撑。说白了,运动学就是研究「怎么动」的学问,不涉及力,只关心位置、速度和加速度。
刚体运动的描述
我们先从最基础的开始。机器人身上的每个部件,比如手臂、手腕、手指,都可以看作刚体。刚体就是不会变形的物体。描述一个刚体在空间中的状态,需要两个信息:位置和姿态。
位置好理解,就是它在哪儿。姿态呢?就是它朝哪个方向。举个例子,你手里拿着一本书,书的位置是书的重心坐标,书的姿态就是书页朝哪边、书脊朝哪边。
我个人习惯把位置和姿态合起来叫「位姿」。一个刚体在三维空间中有6个自由度——3个平移自由度(x, y, z)和3个旋转自由度(roll, pitch, yaw)。
核心要点:描述刚体运动,本质上就是描述这6个自由度随时间的变化。
旋转矩阵
旋转矩阵是描述姿态最常用的工具。它是一个3x3的正交矩阵,行列式为+1。为什么用矩阵?因为方便计算啊。
我记得第一次做机械臂标定时,就栽在旋转矩阵上。当时我直接用欧拉角去算,结果出现了万向锁,机械臂直接卡住了。从那以后,我养成了一个习惯:凡是涉及连续旋转的,优先用旋转矩阵或四元数。
旋转矩阵有几个重要性质:
- 每一列都是单位向量,且两两正交
- 逆矩阵等于转置矩阵(R⁻¹ = Rᵀ)
- 多个旋转可以连乘:R = R₁ · R₂ · R₃
来看一个绕Z轴旋转θ角的例子:
R_z(θ) = | cosθ -sinθ 0 |
| sinθ cosθ 0 |
| 0 0 1 |
嗯,这里要注意:旋转顺序很重要。先绕X轴转30度再绕Y轴转60度,和反过来结果完全不同。我建议你在代码里统一用「右乘」的顺序,这样更符合直觉。
齐次变换矩阵
旋转矩阵只能描述姿态,不能描述位置。那怎么办?把位置和姿态合在一起,就得到了齐次变换矩阵。它是一个4x4的矩阵:
T = | R p |
| 0 1 |
其中R是3x3旋转矩阵,p是3x1位置向量。最后一行是[0 0 0 1]。
为什么叫「齐次」?因为引入了第4维,把旋转和平移统一成线性变换。这样做的好处是:你可以把多个变换连乘,一次搞定。
举个例子,机器人从基座到末端执行器,中间经过了好几个关节。每个关节都有一个变换矩阵。把它们乘起来,就得到了末端相对于基座的位姿。这就是正运动学的核心思想。
小技巧:写代码时,我习惯把齐次变换矩阵封装成一个类,包含旋转矩阵和平移向量。这样调试起来方便很多。
正运动学
正运动学,就是已知关节角度,求末端位姿。说白了,你告诉机器人「每个关节转多少度」,它告诉你「手在哪儿、朝哪个方向」。
对于串联机器人,正运动学很简单:把每个关节的变换矩阵连乘就行。比如一个6轴机器人:
T_06 = T_01 · T_12 · T_23 · T_34 · T_45 · T_56
每个T_ij表示从关节i到关节j+1的变换。这里面包含了关节角度、连杆长度、连杆偏距等参数。这些参数合起来就是DH参数(Denavit-Hartenberg参数)。
我在做协作机器人项目时,发现很多同学把DH参数搞混了。其实记住一点就行:DH参数就是描述相邻两个关节坐标系之间关系的四个参数。分别是:
- a:连杆长度
- α:连杆扭角
- d:连杆偏距
- θ:关节角度
对于旋转关节,θ是变量;对于移动关节,d是变量。
逆运动学
逆运动学就麻烦多了。它是已知末端位姿,求关节角度。你告诉机器人「手要放到这里」,它得算出每个关节该转多少度。
为什么麻烦?因为逆运动学通常有多解,甚至无解。比如你让机械臂去够一个太远的东西,它根本够不着,那就是无解。如果目标在可到达范围内,通常有多个关节角度组合能达到同一个末端位姿。
我曾经在调试一个焊接机器人时,遇到了逆运动学求解不稳定的问题。每次算出来的关节角度都不一样,导致焊接轨迹抖动。后来发现是数值解法迭代初值选得不好。我换成了解析解法,问题就解决了。
避坑指南:逆运动学求解时,一定要注意奇异位形。当机器人处于奇异位形时,某些关节速度会趋于无穷大,非常危险。我曾经在测试时没处理好,差点把电机烧了。
逆运动学的求解方法主要有两种:
- 解析法:通过几何关系直接推导出封闭解。速度快,但只适用于特定构型的机器人。
- 数值法:用迭代的方式逼近解。通用性强,但计算量大,且需要好的初值。
我个人建议:如果机器人构型比较规则(比如6轴机器人满足Pieper准则),优先用解析法。如果构型复杂,再用数值法。
知识体系总览
下面这张图是我自己整理的,把今天讲的内容串起来了。你可以看到,从刚体描述到正逆运动学,是一条清晰的逻辑链。
好了,今天的内容就到这里。运动学是机器人学的基石,后面的轨迹规划、动力学、控制都离不开它。我建议你动手写写代码,把旋转矩阵和齐次变换矩阵实现一遍,再做个简单的正运动学求解。纸上得来终觉浅,绝知此事要躬行。
可可精品资料库