第二章:刚体运动学基础——坐标系与参考系、位置、速度、加速度的表示、欧拉角与旋转矩阵
各位同学,欢迎来到刚体动力学建模的核心章节。
说实话,运动学是整个仿真大厦的地基。你想想看,如果连“物体在哪儿、朝哪儿、动得多快”都描述不清楚,后面的动力学方程、控制算法全是空中楼阁。我见过不少新手,一上来就怼着动力学方程猛算,结果仿真结果飞上天——回头一查,坐标系定义错了。嗯,这种坑,我踩过不止一次。
2.1 坐标系与参考系:你的“上帝视角”
先问个问题:你说“小球的速度是5m/s”,这句话完整吗?
不完整。你得告诉我:相对于谁?
这就是参考系的概念。我个人习惯把参考系想象成“一个站在某处的观察者”。观察者不同,看到的速度、轨迹可能完全不同。比如你在高铁上看窗外,树是往后跑的;但在地面上的人看来,树是静止的。
核心要点:刚体动力学中,我们通常使用两类坐标系:
- 惯性坐标系(世界系):固定在地面或太空中的“绝对”参考系。牛顿定律只在这个系里成立。
- 体坐标系(局部系):固定在刚体上,随刚体一起运动。描述刚体自身的姿态、角速度非常方便。
我在做多体系统仿真时,最头疼的就是坐标系搞混。曾经有一次,我把一个机械臂的末端执行器位置算到了火星上——后来发现,体坐标系和世界系的转换矩阵写反了。从那以后,我养成了一个习惯:每个坐标系都画出来,标清楚原点、轴方向。
2.2 位置、速度、加速度的表示
有了坐标系,我们就可以定量描述运动了。
2.2.1 位置向量
刚体上任意一点P的位置,可以用一个向量 r 表示。在三维空间中,它有三个分量:
r = [x, y, z]^T
注意,这个向量的具体数值取决于你选的坐标系。同一个点,在世界系和体系下的坐标完全不同。
2.2.2 速度与加速度
速度是位置对时间的一阶导数,加速度是二阶导数。但这里有个坑:导数也要指明是在哪个参考系下求的。
我的经验:在写代码时,我习惯用上标来标注参考系。比如:
- WvP:点P相对于世界系的速度
- BvP:点P相对于体坐标系的速度
别嫌麻烦,这个习惯救过我很多次。
刚体上不同点的速度关系,有一个经典公式:
v_P = v_O + ω × r_OP
其中v_O是刚体上某参考点O的速度,ω是刚体的角速度,r_OP是从O指向P的向量。这个公式在仿真中天天用,建议你背下来。
2.3 欧拉角与旋转矩阵:描述“朝向”的两种武器
位置搞定了,接下来是姿态。刚体不光会平移,还会旋转。描述旋转,最常用的就是欧拉角和旋转矩阵。
2.3.1 旋转矩阵
旋转矩阵R是一个3×3的正交矩阵(行列式为+1)。它能把一个向量从一个坐标系变换到另一个坐标系。
B_r = R * W_r
这里W_r是向量在世界系下的坐标,B_r是同一个向量在体系下的坐标。
旋转矩阵的好处是:没有奇点,数学性质好。但缺点也很明显:9个元素,冗余,而且不直观。你看着一个旋转矩阵,很难一眼看出刚体转了多少度。
2.3.2 欧拉角
欧拉角就直观多了。它用三个角度来描述旋转:比如绕Z轴转ψ(偏航),绕Y轴转θ(俯仰),绕X轴转φ(滚转)。
注意!欧拉角有“万向锁”问题。
当俯仰角θ接近±90°时,偏航和滚转的旋转轴会重合,导致自由度丢失。我在做飞行器仿真时就遇到过这个问题——飞机垂直爬升时,姿态解算突然崩了。后来改用四元数才解决。
欧拉角到旋转矩阵的转换公式(以ZYX顺序为例):
R = Rz(ψ) * Ry(θ) * Rx(φ)
其中:
Rz(ψ) = [cosψ -sinψ 0; sinψ cosψ 0; 0 0 1]
Ry(θ) = [cosθ 0 sinθ; 0 1 0; -sinθ 0 cosθ]
Rx(φ) = [1 0 0; 0 cosφ -sinφ; 0 sinφ cosφ]
2.4 知识体系总览
下面这张图,是我自己总结的刚体运动学知识框架。每次做新项目前,我都会对着它捋一遍思路,确保没有遗漏。
2.5 实战中的选择建议
说了这么多理论,到底该用哪个?我根据项目经验,给你一个参考:
| 场景 | 推荐姿态表示 | 原因 |
|---|---|---|
| 飞行器/无人机仿真 | 欧拉角(偏航-俯仰-滚转) | 直观,飞行员习惯用角度 |
| 机械臂运动学 | 旋转矩阵 / 四元数 | 避免万向锁,适合连续旋转 |
| 车辆动力学 | 欧拉角(横摆-侧倾-俯仰) | 角度小,奇点问题不突出 |
| 航天器姿态控制 | 四元数 | 无奇点,适合大角度机动 |
我的个人习惯:在代码里,我通常用四元数做内部计算(稳定、无奇点),只在用户界面或调试时转成欧拉角显示。这样既保证了仿真鲁棒性,又保留了直观性。
好了,这一章的内容就到这里。运动学是基础中的基础,别嫌它简单。你想想看,如果连坐标系都搞不清楚,后面那些复杂的动力学方程、约束求解,怎么可能算得对?
下一章,我们会进入动力学部分,开始真正“算”起来。到时候你会发现,今天打下的运动学基础,会帮你省下大量排错的时间。
公众号:蓝海资料掘金营,微信deep3321