第2章:传感器坐标系与姿态表示

好,咱们正式开始聊坐标系和姿态表示。说实话,这是整个IMU校准里最绕、也最容易出坑的地方。我见过不少工程师,算法写得飞起,结果坐标系定义错了,整个系统全乱套。嗯,咱们今天就把这事彻底理清楚。

2.1 IMU本体坐标系定义

每个IMU芯片出厂时,都会定义自己的本体坐标系。说白了,就是芯片内部那个小小的坐标系,以芯片的物理封装为基准。

我个人习惯这样记:

  • X轴:通常指向芯片的某个特定边,比如标有圆点的那一侧
  • Y轴:与X轴垂直,在芯片平面内
  • Z轴:垂直于芯片表面,遵循右手定则

这里有个坑,我踩过。不同厂家的IMU,坐标系定义可能不一样。比如:

厂家 X轴方向 Y轴方向 Z轴方向
InvenSense (MPU系列) 芯片长边 芯片短边 垂直向上
Bosch (BMI系列) 芯片长边 芯片短边 垂直向下
ST (LSM系列) 芯片短边 芯片长边 垂直向上
⚠️ 我曾经在一个无人机项目里,用了两家不同厂家的IMU,结果因为坐标系定义不一致,飞控解算出来的姿态直接反了。飞机一解锁就翻了个跟头...嗯,从那以后我每次换芯片,第一件事就是查数据手册里的坐标系定义。

2.2 导航坐标系:NED与ENU

导航坐标系,就是我们在真实世界里描述位置和姿态用的参考系。最常用的有两种:

NED坐标系(北-东-地)

  • X轴:指向地理北
  • Y轴:指向地理东
  • Z轴:指向地心(向下)

这个坐标系在航空航天领域用得最多。你想想看,飞机在天上飞,高度往下是正的,挺符合直觉——毕竟掉下去是正方向嘛。

ENU坐标系(东-北-天)

  • X轴:指向地理东
  • Y轴:指向地理北
  • Z轴:指向天顶(向上)

这个在机器人、自动驾驶里更常见。说白了,就是地面上的小车,高度往上为正,更符合日常感觉。

关键点:IMU本体坐标系和导航坐标系之间的转换,是所有姿态解算的基础。你选NED还是ENU,决定了后面所有公式的正负号。

2.3 欧拉角与万向锁

欧拉角,就是用三个角度来描述物体的朝向。通常的顺序是:航向角(Yaw)→ 俯仰角(Pitch)→ 横滚角(Roll)

我刚开始做IMU时,觉得欧拉角特别直观。你看,飞机头朝哪、抬头多少、侧倾多少,一目了然。但后来发现,这东西有个致命问题——万向锁。

⚠️ 万向锁:当俯仰角接近±90°时,航向角和横滚角会变得无法区分。说白了,就是两个自由度合并成了一个,你失去了一个控制维度。

为什么会这样?我举个例子。你站在地球的北极点,往哪个方向走都是南。这时候你跟我说「往北走」,我根本不知道你指的是哪个方向。万向锁就是类似的情况。

我在做无人机飞控时,遇到过这个问题。飞机做特技动作,俯仰角拉到90度,结果航向角突然跳变,姿态解算直接崩了。嗯,从那以后,我只要涉及大角度运动,就坚决不用欧拉角。

2.4 四元数基础

四元数,说白了就是解决万向锁问题的终极方案。它用四个数来表示旋转,没有奇点,计算效率也高。

一个四元数长这样:

q = w + x*i + y*j + z*k

其中:

  • w:实部,表示旋转的标量部分
  • x, y, z:虚部,表示旋转轴的方向

四元数的模长必须为1,这是约束条件:

w² + x² + y² + z² = 1

我个人习惯把四元数想象成「绕着某个轴转多少度」。比如绕Z轴转30°,对应的四元数就是:

q = cos(15°) + 0*i + 0*j + sin(15°)*k
💡 小技巧:四元数乘法不满足交换律。也就是说,q1 * q2 和 q2 * q1 的结果不一样。这对应了旋转的顺序——先转A再转B,和先转B再转A,结果当然不同。

2.5 旋转矩阵与坐标变换

旋转矩阵,就是把一个向量从一个坐标系变换到另一个坐标系的数学工具。说白了,就是一组3x3的矩阵。

从本体坐标系到导航坐标系的旋转矩阵,通常记作 C_b^n(从body到navigation)。

举个例子,假设你在IMU本体坐标系下测得一个向量 v_b,想把它转换到导航坐标系下:

v_n = C_b^n * v_b

旋转矩阵有个重要性质:它是正交矩阵,逆矩阵等于转置矩阵。也就是说:

C_n_b = (C_b^n)^T

这个性质在实际编程中特别有用。你不需要真的去求逆矩阵,直接转置就行,计算量小很多。

表示方法 优点 缺点
欧拉角 直观,容易理解 有万向锁,插值困难
四元数 无奇点,计算高效 不够直观,需要理解
旋转矩阵 数学性质好,容易组合 占用内存大,有冗余
我的建议:在实际项目中,用四元数做姿态解算和更新,用旋转矩阵做坐标变换,用欧拉角做可视化显示。各取所长,别死磕一种方法。

好了,这一章的内容就这些。坐标系和姿态表示是IMU校准的基石,你花再多时间理解都不为过。下一章,咱们聊聊IMU的误差模型——说白了,就是搞清楚IMU到底会犯哪些错。