3、IMU基础(下):IMU的坐标系定义与姿态表示方法

好,咱们接着聊IMU。上一节我们把IMU的测量原理和误差模型讲透了,这一节我重点说说坐标系和姿态表示。说实话,这两个东西是融合的基石,搞不懂它们,后面做激光雷达和IMU的紧耦合,你肯定会晕头转向。

我在刚入行那会儿,就吃过坐标系的亏。有一次做车载组合导航,IMU装反了90度,结果跑出来的轨迹直接飞到了马路对面。排查了一整天,最后发现是坐标系定义没对齐。嗯,从那以后,我对坐标系就格外敏感。

3.1 载体坐标系(Body Frame)

载体坐标系,说白了就是固定在IMU芯片上的坐标系。一般我们这样定义:

  • X轴:指向载体的前进方向(车头方向)
  • Y轴:指向载体的右侧(副驾驶方向)
  • Z轴:指向载体的正上方(车顶方向)

这个坐标系遵循右手定则。你想想看,右手大拇指指向X轴,食指指向Y轴,中指指向Z轴,刚好就是车头、右侧、车顶三个方向。

重要提醒:IMU的安装方向必须严格标定。我见过不少项目,IMU芯片在PCB上转了90度,但软件里没做补偿,结果航向角直接差了90度。这种低级错误,排查起来真的很痛苦。

3.2 导航坐标系(Navigation Frame)

导航坐标系,我们通常用NED(北-东-地)或者ENU(东-北-天)。在无人驾驶领域,我个人习惯用ENU:

  • X轴:指向东(East)
  • Y轴:指向北(North)
  • Z轴:指向天(Up)

为什么选ENU?因为激光雷达的点云数据通常也是基于ENU坐标系输出的,这样融合起来更自然。你想想看,IMU测出来的加速度和角速度,最终都要转换到导航坐标系下,才能和激光雷达的点云对齐。

我的经验:在做多传感器融合时,建议统一使用ENU坐标系。我曾经在一个项目中,IMU用NED,激光雷达用ENU,结果每次坐标转换都要多一步,不仅代码复杂,还容易出错。统一坐标系,能省掉很多麻烦。

3.3 姿态表示方法

好了,坐标系定义清楚了,接下来就是怎么描述载体相对于导航坐标系的姿态。这里有三种主流方法:欧拉角、旋转矩阵、四元数。我一个个说。

3.3.1 欧拉角

欧拉角是最直观的表示方法。它用三个角度来描述旋转:

  • 横滚角(Roll):绕X轴旋转,范围±180°
  • 俯仰角(Pitch):绕Y轴旋转,范围±90°
  • 航向角(Yaw):绕Z轴旋转,范围±180°

欧拉角的优点是直观,看一眼就知道车是侧倾了还是抬头了。但缺点也很致命——万向锁。当俯仰角接近±90°时,横滚和航向会失去自由度,导致姿态解算失败。

避坑指南:我曾经在无人机项目里用过欧拉角做姿态控制,结果飞机做大机动俯冲时,姿态直接炸了。后来换成四元数,问题才解决。所以,如果你做的是高动态场景(比如无人机、赛车),千万别用欧拉角做内部计算。

3.3.2 旋转矩阵

旋转矩阵是一个3×3的正交矩阵,它能把载体坐标系下的向量转换到导航坐标系下。比如,IMU测到的加速度是a_body,转换到导航坐标系就是:

a_nav = R * a_body

旋转矩阵的好处是:

  • 没有万向锁问题
  • 可以连续旋转
  • 数学性质好(正交矩阵,逆等于转置)

但缺点也很明显:9个参数,冗余度高,而且每次更新都要做矩阵乘法,计算量大。

实际应用:在IMU预积分中,我们通常用旋转矩阵来累积姿态变化。因为矩阵乘法可以串联多个旋转,而且数值稳定性比欧拉角好得多。

3.3.3 四元数

四元数是我个人最推荐的方法。它用四个参数表示旋转:

q = [w, x, y, z]

其中w是实部,x、y、z是虚部。四元数的好处是:

  • 没有万向锁
  • 只有4个参数,比旋转矩阵少
  • 插值平滑(可以做球面线性插值)
  • 计算效率高

四元数的更新公式也很简洁:

q_new = q_old * exp(0.5 * omega * dt)

其中omega是角速度,dt是时间间隔。这个公式在IMU姿态解算中非常常用。

我的习惯:在代码里,我通常用四元数做内部姿态计算,只在最后输出时转换成欧拉角给用户看。这样既保证了计算稳定性,又方便调试。你可以在Eigen库或者ROS的tf库中找到现成的四元数工具。

3.4 三种方法的对比

方法 参数数量 万向锁 计算效率 直观性 推荐场景
欧拉角 3 有 高 高 人机交互、显示
旋转矩阵 9 无 中 低 坐标变换、预积分
四元数 4 无 高 中 姿态解算、融合滤波

3.5 知识体系总览

为了让你更直观地理解这一节的内容,我画了一张图,把坐标系和姿态表示方法串起来:

IMU基础(下):坐标系与姿态表示 载体坐标系 导航坐标系 坐标变换 姿态表示方法 欧拉角(直观,有万向锁) 旋转矩阵(无万向锁,冗余) 四元数(推荐,高效稳定) 核心逻辑:载体坐标系 → 姿态表示 → 导航坐标系 推荐使用四元数做内部计算,欧拉角做显示输出

从这张图你可以看到,整个流程就是:IMU在载体坐标系下测量数据,然后通过姿态表示方法(我推荐四元数)转换到导航坐标系。这个转换是融合的基础,后面做激光雷达点云配准时,你还会反复用到它。

总结一下:坐标系定义是基础,姿态表示是工具。搞懂了这两样,IMU的数据才能被正确使用。我个人建议,新手先从四元数入手,虽然它不如欧拉角直观,但用熟了你会发现它真的很香。

好了,这一节就到这里。记住,坐标系和姿态表示是IMU融合的基石,多花点时间理解它们,后面你会感谢自己的。

可可精品资料库