第二章 运动学基础(一):空间坐标系与变换、刚体姿态描述
各位同学,欢迎来到Stewart平台控制的第一堂硬核课。今天我们要聊的,是运动学里最基础、也最绕不开的东西——空间坐标系与变换。
说实话,我刚入行那会儿,觉得坐标系变换不就是几个矩阵相乘嘛,有啥好学的?直到我第一次调Stewart平台,发现动平台死活对不准目标位姿……嗯,后来花了整整两天排查,最后发现是旋转矩阵的乘法顺序搞反了。从那以后,我再也不敢小看这些“基础”了。
2.1 空间坐标系:我们到底在哪儿?
先问个问题:你描述一个点的位置,靠什么?
答案很简单——坐标系。没有坐标系,位置就是一句空话。
在Stewart平台里,我们通常需要两个坐标系:
- 基坐标系 {B}:固定在地面,原点在平台底座中心。这是我们的“绝对参考”。
- 动坐标系 {P}:固定在动平台上,原点在动平台中心。它跟着平台一起动。
你想想看,控制Stewart平台,本质上就是控制{P}相对于{B}的位置和姿态。说白了,就是回答两个问题:
- 动平台中心在哪儿?(位置)
- 动平台朝哪个方向?(姿态)
核心概念:位置用3×1向量描述,姿态用3×3旋转矩阵描述。合在一起,就是6自由度的位姿。
2.2 刚体姿态描述:别让平台“歪着”
描述姿态,我见过最常用的有三种方式:欧拉角、旋转矩阵、四元数。今天先聊前两个。
2.2.1 欧拉角:直观但容易踩坑
欧拉角说白了就是三个角度:绕X轴转(滚转roll)、绕Y轴转(俯仰pitch)、绕Z轴转(偏航yaw)。
但这里有个大坑——旋转顺序。我记得有一次,同事用ZYX顺序算出来的结果,跟我用XYZ顺序算的完全对不上。两个人吵了半天,最后发现是顺序问题。
避坑指南:我曾经在项目中吃过“万向锁”的亏。当pitch角接近±90°时,roll和yaw会失去一个自由度。所以,如果你的平台工作范围包含大角度俯仰,建议别用欧拉角,改用四元数。
欧拉角的旋转矩阵(ZYX顺序)长这样:
R = Rz(yaw) * Ry(pitch) * Rx(roll)
其中:
Rx(roll) = [1, 0, 0;
0, cos(roll), -sin(roll);
0, sin(roll), cos(roll)]
Ry(pitch) = [cos(pitch), 0, sin(pitch);
0, 1, 0;
-sin(pitch), 0, cos(pitch)]
Rz(yaw) = [cos(yaw), -sin(yaw), 0;
sin(yaw), cos(yaw), 0;
0, 0, 1]
2.2.2 旋转矩阵:数学上最干净
旋转矩阵R是一个3×3的正交矩阵,满足R^T * R = I,且det(R)=1。它把动坐标系中的向量,变换到基坐标系中。
我个人习惯用旋转矩阵做中间计算,因为乘法顺序清晰,不容易出错。但缺点也很明显——9个参数,冗余度太高。
小技巧:在实际代码里,我通常用欧拉角做用户输入(直观),内部计算全用旋转矩阵(稳定),最后输出时再转回欧拉角。这样既方便调试,又保证精度。
2.3 齐次坐标:把位置和姿态打包
好,现在我们有位置向量p(3×1)和旋转矩阵R(3×3)。能不能把它们合在一起?
当然可以。齐次坐标就是干这个的。
一个4×4的齐次变换矩阵T长这样:
T = [R, p;
0, 1]
其中:
R:3×3旋转矩阵
p:3×1位置向量
最后一行:[0, 0, 0, 1]
为什么用齐次坐标?两个原因:
- 统一运算:旋转和平移可以写成一个矩阵乘法,不用分开算。
- 链式变换:从基坐标系到动坐标系,中间可能经过多个关节。每个关节一个T矩阵,连乘就得到最终位姿。
举个例子,Stewart平台的逆运动学,本质上就是:
- 已知动平台的目标位姿(用T矩阵表示)
- 计算每个支腿的长度
而第一步,就是把动平台上的铰点坐标,通过T矩阵变换到基坐标系下。
数学表达:
设动平台上某铰点在{P}系中的坐标为Pa,在{B}系中的坐标为Ba,则:
Ba = T * Pa
其中T是{P}相对于{B}的齐次变换矩阵。
2.4 知识体系总览
下面这张图,是我自己总结的本章知识结构。你把它理清了,后面学运动学就顺了。
2.5 本章小结
好了,这一章的内容就这些。总结一下:
- 坐标系是描述位置和姿态的“基准”。Stewart平台里,基坐标系和动坐标系是两个最重要的参考。
- 欧拉角直观,但要注意旋转顺序和万向锁。旋转矩阵数学干净,但参数冗余。
- 齐次坐标把位置和姿态打包成4×4矩阵,方便链式变换和编程实现。
下一章,我们会用这些工具,正式推导Stewart平台的逆运动学方程。到时候你会发现,今天学的这些,全是“子弹”。
公众号:蓝海资料掘金营,微信deep3321