空间机构学基础:刚体运动描述、旋转矩阵与齐次变换、欧拉角与四元数、自由度与约束分析
各位同学好,我是你们的课程讲师。今天我们来啃一块硬骨头——空间机构学基础。说实话,很多做并联机器人的朋友,最后都栽在了这上面。不是电机选型不对,也不是结构强度不够,而是空间运动学没搞明白。
我个人习惯把空间机构学比作「机器人的语言」。你想想看,你要让机器人动起来,总得有个方法描述它怎么动吧?这就是我们今天要讲的内容。
刚体运动的描述
刚体,说白了就是一个不会变形的物体。在空间里,它有6个自由度——3个平移,3个旋转。描述刚体运动,我们通常用两种方式:
- 位置描述:用三维坐标 (x, y, z) 表示刚体上某点的位置
- 姿态描述:用旋转矩阵、欧拉角或四元数表示刚体的朝向
我在做六自由度并联平台时,遇到过一个问题:用位置和欧拉角描述末端姿态,结果在某个特殊位置出现了「万向锁」。嗯,这里要注意,后面我们会详细讲。
核心概念:刚体的完整位姿 = 位置 + 姿态,共6个独立参数。
旋转矩阵
旋转矩阵是描述刚体旋转最直观的方式。它是一个3×3的正交矩阵,行列式为+1。
绕X轴旋转θ角的旋转矩阵:
R_x(θ) = [1 0 0 ]
[0 cosθ -sinθ ]
[0 sinθ cosθ ]
绕Y轴旋转θ角:
R_y(θ) = [cosθ 0 sinθ ]
[0 1 0 ]
[-sinθ 0 cosθ ]
绕Z轴旋转θ角:
R_z(θ) = [cosθ -sinθ 0 ]
[sinθ cosθ 0 ]
[0 0 1 ]
我记得第一次做SCARA机器人的运动学,就是用这三个基本旋转矩阵组合出末端姿态。当时调试了整整两天,最后发现是旋转顺序搞反了。所以大家一定要记住:旋转矩阵的乘法不满足交换律,顺序很重要。
齐次变换
齐次变换矩阵把旋转和平移统一到一个4×4的矩阵里。为什么这么做?因为方便啊!
T = [R p]
[0 1]
其中R是3×3旋转矩阵,p是3×1平移向量。
用齐次变换,我们可以把多个坐标变换串联起来:
T_03 = T_01 × T_12 × T_23
这就像搭积木一样,每个关节的变换矩阵乘起来,就得到了末端相对于基座的位姿。我在做Delta并联机器人的正运动学时,就是用这个方法一步步推导出来的。
实用技巧:写代码时,建议把齐次变换封装成一个类,包含乘法和求逆运算。我自己的工具箱里就有这么一套,用了好多年了。
欧拉角与四元数
欧拉角大家应该都听说过,就是用三个角度来描述旋转。常用的有ZYX欧拉角和ZYZ欧拉角。
但是欧拉角有个大问题——万向锁。当第二个旋转角为±90°时,第一个和第三个旋转轴会重合,丢失一个自由度。
我曾经在做一款医疗机器人时,就踩过这个坑。末端执行器在某个姿态下突然「卡住」了,怎么调都不对。查了两天,最后发现是欧拉角导致的万向锁。
从那以后,我强烈建议:做并联机器人,能用四元数就别用欧拉角。
四元数是什么?它用四个参数表示旋转:
q = w + xi + yj + zk
其中w是实部,x、y、z是虚部,满足w² + x² + y² + z² = 1。
四元数的好处:
- 没有万向锁问题
- 插值平滑(球面线性插值)
- 计算效率高
避坑指南:我曾经在STM32上跑四元数运算,发现浮点运算太慢了。后来改用定点数近似,才把控制周期压到1ms以内。如果你也用MCU做控制,记得考虑计算资源。
自由度与约束分析
自由度分析是并联机器人设计的核心。一个空间刚体有6个自由度,每条支链会引入约束。
Grübler公式:
F = 6(n - g - 1) + Σf_i
其中n是构件数,g是运动副数,f_i是第i个运动副的自由度。
举个栗子,Stewart平台:
- 6条支链,每条支链有6个运动副(球铰-移动副-球铰)
- 每个球铰3个自由度,移动副1个自由度
- 代入公式:F = 6(14 - 18 - 1) + (3+1+3)×6 = 6
所以Stewart平台是6自由度的。
我刚开始做并联机器人时,总以为自由度越多越好。后来发现,约束才是设计的精髓。适当的约束可以提高刚度、降低控制难度。
经验之谈:做并联机器人,先做自由度分析,再做运动学分析,最后才是动力学和控制。顺序搞反了,后面全是坑。
知识体系总览
下面这张图是我自己整理的,把今天讲的内容串起来了:
这张图把今天的内容分成了五个模块。刚体运动描述是基础,旋转矩阵和齐次变换是工具,欧拉角与四元数是具体实现方法,自由度与约束分析是设计准则。它们环环相扣,缺一不可。
学习建议:别急着写代码,先把这些概念在纸上推演几遍。我当年学的时候,光旋转矩阵就手算了不下50遍。熟能生巧,真的。
好了,今天的内容就到这里。空间机构学是并联机器人的数学基础,后面讲运动学、动力学、控制算法,都离不开今天这些内容。希望大家好好消化,有问题随时交流。