2. 坐标系与运动学基础:惯性坐标系与体坐标系、欧拉角与四元数、漂浮体的六自由度运动描述

各位同学,咱们今天聊点硬核的。坐标系和运动学,说白了就是给漂浮体一个“身份证”和“运动轨迹”。你想想看,一个东西在水里飘着,你总得知道它朝哪、歪了多少、往哪跑吧?这些就是坐标系要干的事。

我个人习惯,做控制算法之前,先把坐标系理清楚。不然你后面算出来的控制力,可能全推反了。我在项目中就吃过这个亏——有一次仿真跑得挺欢,结果实物一上水,姿态全乱套。查了两天,发现是坐标系定义反了。嗯,从那以后,我再也不敢跳过这步。

2.1 惯性坐标系与体坐标系

先讲两个最基础的坐标系。一个是惯性坐标系,一个是体坐标系。

惯性坐标系,也叫大地坐标系。你可以把它想象成地球上的一个固定参考架。比如你站在岸边,看着水面,那个固定的东-北-天方向就是惯性系。它不随船动,是绝对的参考。

体坐标系,是固定在漂浮体上的。原点一般在重心,x轴朝前(船头),y轴朝右(右舷),z轴朝下。你想想看,船一转弯,体坐标系也跟着转。所以体坐标系是“跟着船走”的。

为什么要区分这两个?因为物理规律(比如牛顿第二定律)在惯性系下成立,但传感器(比如IMU)测的是体坐标系下的数据。所以你得来回转换。我在项目中遇到过,有人直接把IMU的加速度当惯性系用,结果积分出来的位置飞到了天上。避坑指南:一定要明确数据是在哪个坐标系下测的

核心要点:
  • 惯性系:固定不动,用于描述绝对运动
  • 体系:跟着物体转,用于描述相对运动
  • 两者之间的转换是控制算法的第一步

2.2 欧拉角与四元数

好,坐标系有了,那怎么描述一个漂浮体的姿态呢?两个主流方法:欧拉角和四元数。

欧拉角,就是三个角度:横摇(Roll)、纵摇(Pitch)、艏摇(Yaw)。说白了,就是绕x轴、y轴、z轴转了多少度。直观,好理解。我刚开始做控制时,特别喜欢用欧拉角,因为一眼就能看出船歪了多少。

但欧拉角有个大坑——万向锁。当纵摇接近±90度时,横摇和艏摇会耦合,丢失一个自由度。我在项目中遇到过,仿真时一切正常,但实物在极端海况下突然失控。查了半天,就是万向锁导致的。所以,如果你做的是大角度运动(比如水下机器人翻滚),千万别只用欧拉角。

四元数,是四个数:一个标量加三个矢量。它没有万向锁问题,而且插值平滑。你想想看,四元数本质上是一个超复数,用旋转轴和旋转角来描述姿态。虽然不直观,但计算稳定。

我个人习惯:人机交互用欧拉角,算法内部用四元数。显示给操作员看,用欧拉角;做控制律计算,用四元数。这样既直观又稳定。

特性 欧拉角 四元数
直观性
万向锁
计算量
插值平滑
适用场景 小角度、显示 大角度、控制
小技巧: 如果你用四元数做控制,记得归一化。我见过有人忘了归一化,结果姿态越算越飘。每次更新后,做一次 q = q / norm(q),保你平安。

2.3 漂浮体的六自由度运动描述

漂浮体在水里,可不是只平移或只旋转。它是六个自由度一起动的。哪六个?三个平移,三个旋转。

  • 平移: 纵荡(Surge,沿x轴)、横荡(Sway,沿y轴)、垂荡(Heave,沿z轴)
  • 旋转: 横摇(Roll,绕x轴)、纵摇(Pitch,绕y轴)、艏摇(Yaw,绕z轴)

你想想看,一个漂浮体在海浪里,它可能一边上下颠簸(垂荡),一边左右摇晃(横摇),还一边往前漂(纵荡)。这六个自由度是耦合的。比如,你给一个纵荡推力,如果重心不在浮心正下方,它还会产生纵摇力矩。这就是耦合。

我在项目中遇到过,有人只做单自由度控制,结果实物一跑,其他自由度全乱了。避坑指南:六自由度模型一定要建全,哪怕你只控制其中几个。因为耦合效应会通过动力学传递。

描述六自由度运动,通常用向量形式。比如位置向量 η = [x, y, z, φ, θ, ψ]^T,速度向量 ν = [u, v, w, p, q, r]^T。其中u、v、w是线速度,p、q、r是角速度。这两个向量之间,通过一个转换矩阵J(η)联系起来:

η_dot = J(η) · ν

这个J矩阵里,包含了欧拉角或四元数的转换关系。说白了,就是把体坐标系下的速度,映射到惯性系下的位置变化率。

注意: 转换矩阵J(η)在纵摇角接近±90度时会奇异。这就是欧拉角的万向锁在运动学方程里的体现。如果你用四元数,这个奇异就消失了。所以,我建议你在代码里用四元数做运动学更新。

2.4 知识体系总览

为了让你更直观地理解本章的知识结构,我画了一张图。你看,从坐标系出发,到姿态描述,再到六自由度运动,最后落到控制算法。每一步都是环环相扣的。

坐标系与运动学基础 - 知识体系 坐标系 惯性坐标系 体坐标系 姿态描述 欧拉角 四元数 六自由度运动 平移 (3 DOF) 旋转 (3 DOF) 注:虚线表示坐标系直接影响六自由度运动学方程的建立

你看这张图,从左到右,从上到下,逻辑很清晰。先定坐标系,再选姿态描述方法,最后建立六自由度运动方程。每一步的选择,都会影响后续控制算法的设计。比如,你选了欧拉角,就要处理万向锁;选了四元数,就要处理归一化。

好了,这一章就到这里。坐标系和运动学是基础中的基础,你把它搞透了,后面的动力学和控制学才能站得住脚。记住我的一句话:坐标系定天下,姿态定乾坤

本章总结:
  • 惯性系和体系是控制算法的“坐标系双雄”
  • 欧拉角直观但有万向锁,四元数稳定但不直观
  • 六自由度运动是耦合的,模型一定要建全
  • 转换矩阵J(η)是连接速度和位置变化率的桥梁

专注资料整理