第四节:机械臂运动学基础
各位同学好,我是老张。今天咱们聊聊机械臂运动学——说白了,就是研究「机械臂该怎么动」的问题。
我记得刚入行那会儿,带我的师傅跟我说:「小张,你搞懂正逆运动学,机械臂就算入门了。」当时我不信,觉得不就是算算角度嘛。后来真上手调试,才发现这里面的坑,一个比一个深。
4.1 正运动学:已知关节角度,求末端位置
正运动学,说白了就是「我知道每个关节转了多少度,求机械臂末端在哪儿」。
举个例子:你面前有个六轴机械臂,你给每个关节电机发指令,让它转到某个角度。这时候你肯定想知道——夹爪到底在哪个位置?这就是正运动学要解决的问题。
数学上,我们用齐次变换矩阵来描述。每个关节的变换矩阵长这样:
T = [R p]
[0 1]
其中 R 是旋转矩阵,p 是平移向量。把每个关节的变换矩阵乘起来,就得到末端位姿:
T_0n = T_01 * T_12 * ... * T_(n-1)n
我在项目中遇到过一件事:有个同事写正运动学代码,矩阵乘法顺序搞反了。结果机械臂末端位置算出来差了好几十厘米。嗯,这里要注意——矩阵乘法不满足交换律,顺序错了,结果全错。
4.2 逆运动学:已知末端位置,求关节角度
逆运动学正好反过来——我知道夹爪要去哪个位置,反过来算每个关节该转多少度。
这比正运动学难多了。为什么?因为正运动学有唯一解,逆运动学可能有多个解,甚至无解。
举个例子:你让机械臂去抓桌上的杯子。同一个杯子位置,机械臂可以「弯着胳膊」抓,也可以「伸着胳膊」抓。这就是多解问题。
我曾经调试一个焊接机器人,逆运动学算出来8组解。我一个个试,最后发现只有两组解能让机械臂不撞到工件。所以啊,逆运动学算完,一定要做碰撞检测。
常用的逆运动学解法有两种:
- 解析法:速度快,但只适用于特定构型(比如前三个关节轴线交于一点)
- 数值法:通用性强,但迭代慢,可能不收敛
4.3 DH参数:机械臂的「身份证」
DH参数是Denavit和Hartenberg两位老哥搞出来的。说白了,就是用四个参数来描述一个关节:
| 参数 | 含义 | 单位 |
|---|---|---|
| θ | 关节角(绕Z轴旋转) | rad 或 ° |
| d | 连杆偏距(沿Z轴平移) | mm |
| a | 连杆长度(沿X轴平移) | mm |
| α | 连杆扭角(绕X轴旋转) | rad 或 ° |
你想想看,每个关节都有这四个参数。把它们列成一张表,就是机械臂的DH参数表。有了这张表,正逆运动学就能算出来。
我刚开始学DH参数时,总搞不清a和d的区别。后来师傅跟我说:「你记住,a是水平方向的长度,d是垂直方向的偏移。」一下子就通了。
4.4 关节空间与笛卡尔空间
这两个概念,说白了就是「怎么描述机械臂的状态」。
- 关节空间:用每个关节的角度来描述。比如「关节1转30°,关节2转45°...」
- 笛卡尔空间:用末端的位置和姿态来描述。比如「夹爪在(100, 200, 300)mm,姿态是(0°, 0°, 90°)」
你可能会问:这两个空间有啥区别?
嗯,区别大了去了。关节空间里,轨迹规划简单——直接让每个关节从当前角度转到目标角度就行。但问题是,你没法保证末端走直线。
笛卡尔空间正好相反——你可以让末端走直线、走圆弧,但每个关节的运动曲线就复杂了。
我在做涂胶机器人时,要求胶枪走直线。如果用关节空间规划,胶枪走的是弧线,胶水涂出来歪歪扭扭的。后来改成笛卡尔空间规划,问题就解决了。
- 关节空间:适合点到点运动(比如抓取、放置)
- 笛卡尔空间:适合路径约束运动(比如焊接、涂胶)
- 实际项目中,经常两个空间混着用
4.5 知识体系总览
下面这张图,是我自己画的。它把这一节的知识点串起来了:
这张图你看懂了吗?正运动学和逆运动学是互逆的关系,DH参数是它们的基础,而关节空间和笛卡尔空间是两种不同的描述方式。实际项目中,这四个知识点是串在一起的。
好了,这一节就讲到这里。运动学是机械臂调试的基石,搞不懂它,后面做轨迹规划、力控制都会很吃力。下一节咱们聊聊动力学,那又是另一番天地了。