3、传感器坐标系:机体坐标系、导航坐标系、地球坐标系、坐标系转换基础

做惯导系统这些年,坐标系这东西,说简单也简单,说复杂真能把你绕晕。我刚开始接触飞控那会儿,就因为在坐标系转换上栽了个跟头——飞机明明朝北飞,导航解算出来的位置却往东偏了十几米。后来一查,原来是机体坐标系和导航坐标系搞混了。

说白了,坐标系就是给传感器数据找个「家」。加速度计测的是哪个方向?陀螺仪转的是绕哪个轴?没有坐标系,数据就是一堆没意义的数字。今天咱们就把这三个最常用的坐标系捋清楚。

3.1 机体坐标系(Body Frame)

机体坐标系是跟着飞机走的。你想想看,飞机在翻滚、俯仰、偏航,它身上的传感器可不知道什么东南西北,它只知道自己的前后左右。

我习惯这样定义:

  • X轴:指向机头方向(前进方向)
  • Y轴:指向机身右侧(右翼方向)
  • Z轴:指向机身下方(符合右手定则)

嗯,这里要注意:不同厂家可能有不同定义。比如有些无人机把Z轴朝上,有些朝下。我在项目中遇到过,IMU模块的坐标系和飞控定义的坐标系不一致,结果姿态解算直接炸了。所以拿到传感器数据,第一件事就是确认它的坐标系定义。

核心要点:机体坐标系是「跟着飞机动」的。加速度计测的是机体坐标系下的加速度,陀螺仪测的是机体坐标系下的角速度。所有传感器原始数据,默认都在这个坐标系里。

3.2 导航坐标系(Navigation Frame)

导航坐标系是「大地参考系」。说白了,就是告诉飞机:你现在在哪儿,往哪个方向飞。

最常用的是北东地(NED)坐标系:

  • N轴:指向地理北
  • E轴:指向地理东
  • D轴:指向地心(向下)

为什么用NED而不是ENU(东北天)?我个人习惯用NED,因为和飞机的高度方向一致——高度下降时D轴为正,很直观。但如果你做的是地面机器人,ENU可能更顺手。

导航坐标系是「不动」的。飞机在飞,但导航坐标系始终固定在地面上。我们做惯导解算,最终要输出的位置、速度、姿态,都是在导航坐标系下的值。

小技巧:我一般把导航坐标系的原点设在起飞点。这样位置输出就是相对于起飞点的偏移量,调试时特别方便。如果你做的是长航时飞行,记得考虑地球曲率,那就得用ECEF了。

3.3 地球坐标系(ECEF)

ECEF全称是Earth-Centered Earth-Fixed,地心地固坐标系。它把原点放在地球质心,跟着地球一起转。

定义很简单:

  • X轴:指向本初子午线与赤道的交点
  • Y轴:指向东经90度方向
  • Z轴:指向北极

什么时候用ECEF?GPS输出的经纬高,本质上就是ECEF下的坐标。我做组合导航时,经常要把GPS的经纬度转成ECEF,再和惯导的NED坐标融合。这个过程,说白了就是坐标系转换。

注意:ECEF和NED之间的转换,需要知道当前位置的经纬度。我曾经犯过一个错:直接用起飞点的经纬度做转换,结果飞机飞出去10公里后,位置误差已经大到没法看了。正确的做法是实时更新转换矩阵。

3.4 坐标系转换基础

坐标系转换,核心就是旋转矩阵。你想想看,一个向量在机体坐标系下是[ax, ay, az],在导航坐标系下是[AN, AE, AD],它们之间就差一个旋转。

旋转矩阵R满足:

[AN]     [R11 R12 R13] [ax]
[AE]  =  [R21 R22 R23] [ay]
[AD]     [R31 R32 R33] [az]

这个R矩阵,其实就是由飞机的姿态角(横滚、俯仰、偏航)决定的。我习惯用ZYX顺序旋转:先偏航,再俯仰,最后横滚。

旋转矩阵有个重要性质:它是正交矩阵,逆等于转置。所以从导航系转到机体系,直接用R的转置就行。

避坑指南:我曾经在代码里直接用同一个矩阵做正反转换,结果姿态解算越来越飘。后来才发现,旋转矩阵的转置和逆虽然数学上相等,但数值计算时会有微小误差。建议每次都重新计算,别偷懒。

3.5 知识体系总览

下面这张图,是我做惯导系统时经常贴在工位上的。它把三个坐标系的关系和转换路径画得清清楚楚:

坐标系转换知识体系 机体坐标系 Body Frame X: 机头方向 Y: 右翼方向 导航坐标系 Navigation Frame N: 地理北 E: 地理东 地球坐标系 ECEF X: 本初子午线 Z: 北极 旋转矩阵R (姿态角) R的转置 经纬度转换 (LLA→ECEF) ECEF→LLA→NED 转换路径总结: • 传感器原始数据 → 机体坐标系(加速度、角速度) • 姿态解算 → 旋转矩阵R → 转换到导航坐标系(NED) • GPS数据 → 经纬高(LLA)→ ECEF → 与惯导融合 💡 我的经验:调试时先在机体坐标系下验证传感器数据是否正确,再做转换。一步到位出错了很难排查。 核心公式:P_nav = R * P_body,其中R由横滚(φ)、俯仰(θ)、偏航(ψ)按ZYX顺序构建

3.6 实战中的坐标系转换流程

在实际项目中,我一般按这个流程走:

  1. 读取传感器原始数据——加速度、角速度都在机体坐标系下
  2. 姿态解算——用陀螺仪和加速度计算出横滚、俯仰、偏航
  3. 构建旋转矩阵——根据姿态角算出R矩阵
  4. 坐标转换——把加速度从机体系转到导航系
  5. 导航解算——在导航系下积分得到速度和位置

这里有个细节:陀螺仪测的是角速度,积分后得到姿态角。但姿态角本身就是在导航坐标系下定义的。所以陀螺仪数据其实不需要做坐标系转换,直接积分就行。嗯,这个点很多人会搞混。

我的习惯:在代码里用枚举类型明确标注每个变量的坐标系。比如 acc_bodyacc_navpos_ecef。这样一眼就能看出数据在哪个坐标系下,调试时少走很多弯路。

好了,坐标系这块就聊到这儿。记住一句话:传感器数据在机体系,导航结果在导航系,GPS在ECEF系。搞清楚了这三个坐标系的关系,惯导系统的基本框架就搭起来了。


公众号:蓝海资料掘金营,微信deep3321