1. 运动学基础:机器人运动学概述、刚体在空间中的位姿描述、齐次变换矩阵
大家好,我是老张。今天咱们正式进入运动学仿真与离线编程的第一章。说实话,运动学是整个机器人技术的基石,就像盖房子打地基一样。你想想看,如果连机器人怎么动、位置怎么描述都搞不清楚,后面做轨迹规划、碰撞检测根本无从谈起。
我个人习惯把运动学分成两部分来看:正运动学和逆运动学。正运动学就是已知关节角度,求末端位姿;逆运动学反过来,已知末端位姿,求关节角度。这一章我们先打好基础,把刚体位姿描述和齐次变换矩阵讲透。
核心要点:机器人运动学本质上就是研究「刚体在空间中的位置和姿态」如何用数学语言精确表达。齐次变换矩阵是贯穿整个课程的核心工具。
1.1 机器人运动学概述
什么叫运动学?说白了就是研究物体怎么动,但不考虑力和力矩。你推一下机器人手臂,它转了多少度、末端走了多远——这些是运动学关心的。至于你用了多大的力、电机扭矩够不够——那是动力学的事。
我记得刚入行那会儿,带我的老工程师跟我说过一句话:「运动学是机器人的语言,动力学是机器人的脾气。」这么多年下来,我觉得这话特别在理。你先把语言学会了,后面再慢慢摸脾气。
运动学在机器人领域主要解决三个问题:
- 描述问题:如何用数学描述机器人各连杆的位置和姿态
- 映射问题:关节空间到笛卡尔空间的映射关系
- 求解问题:给定末端位姿,反推关节角度
嗯,这里要注意:我们说的「位姿」其实是两个概念——位置(Position)和姿态(Orientation)。位置好理解,就是三维空间里的坐标 (x, y, z)。姿态就稍微复杂一点,描述的是刚体「朝哪个方向」。
1.2 刚体在空间中的位姿描述
先说说位置。假设我们有一个坐标系 {A},空间里有一个点 P,那它的位置就可以用一个 3×1 的列向量来表示:
^A P = [p_x, p_y, p_z]^T
这个很简单,初中数学就学过。但机器人不是质点,它是一个有体积、有朝向的刚体。比如你抓一个工件,不光要知道工件中心在哪,还得知道它朝哪个方向,不然夹爪怎么对准?
姿态描述就有点意思了。常用的方法有三种:
- 旋转矩阵:3×3 的正交矩阵,列向量表示刚体坐标系各轴在参考坐标系中的投影
- 欧拉角:绕固定轴或动轴的三次旋转,比如 ZYX 欧拉角
- 四元数:用四个参数描述旋转,避免了万向锁问题
我在项目中遇到过一个问题:用欧拉角做插值时,机器人末端突然「翻了个跟头」。后来才发现是万向锁导致的。从那以后,只要涉及连续旋转插值,我优先用四元数。
实战小技巧:如果你只是做静态位姿描述,旋转矩阵最直观。如果你要做轨迹插值,建议用四元数。欧拉角适合人机交互界面显示,但不适合内部计算。
一个完整的位姿描述,就是把位置和姿态合在一起。通常写成 {^A_B R, ^A P_B},其中 ^A_B R 是旋转矩阵,^A P_B 是坐标系 {B} 原点在 {A} 中的位置。
1.3 齐次变换矩阵
好了,重点来了。齐次变换矩阵是机器人学里最常用的工具,没有之一。它把旋转和平移统一到一个 4×4 的矩阵里:
^A_B T = [ ^A_B R ^A P_B ]
[ 0 1 ]
为什么叫「齐次」?因为引入了第四个维度——缩放因子 w。在三维空间中,我们用 (x, y, z, w) 表示一个点,w=1 时就是普通点,w=0 时表示方向向量。这个设计非常巧妙,让平移和旋转可以用矩阵乘法统一处理。
你想想看,如果没有齐次变换矩阵,你要先旋转再平移,得写两个式子:
^A P = ^A_B R * ^B P + ^A P_B
用齐次变换矩阵就简单了:
^A P̃ = ^A_B T * ^B P̃
其中 P̃ 是齐次坐标。一个矩阵乘法搞定所有变换,代码写起来也清爽多了。
避坑指南:我曾经在项目里犯过一个低级错误——把旋转矩阵和平移向量拼成齐次矩阵时,忘了检查旋转矩阵是否正交。结果算出来的末端位置完全不对。记住:旋转矩阵必须是正交矩阵,行列式为 +1。拼之前先验证一下。
齐次变换矩阵有几个重要性质:
- 可逆性:^B_A T = (^A_B T)^(-1),逆矩阵表示反向变换
- 链式法则:^A_C T = ^A_B T * ^B_C T,多个变换可以串联
- 封闭性:齐次变换矩阵的乘积仍然是齐次变换矩阵
这些性质在实际编程中非常有用。比如你要计算机器人末端相对于基座的位置,只需要把每个关节的变换矩阵乘起来就行。这就是后面要讲的 DH 参数法的核心思想。
下面我用 SVG 画了一张本章的知识结构图,帮你理清思路:
这张图把本章的三个核心模块串起来了。从左到右,从概述到具体描述方法,最后汇聚到齐次变换矩阵这个核心工具上。后面的章节我们会反复用到这个矩阵,所以现在一定要把它吃透。
最后说几句心里话。运动学基础看起来有点枯燥,但它是后面所有高级内容的前提。我见过不少初学者急着学轨迹规划、学动力学,结果连坐标系变换都搞不清楚,写出来的代码全是 bug。磨刀不误砍柴工,这一章的内容值得你花时间反复推敲。
好,今天就到这里。下一节我们开始讲 DH 参数法,那是建立机器人运动学模型的标准化方法,非常实用。