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融合的基石,多花点时间理解它们,后面你会感谢自己的。