第一章 惯性导航概述
各位同学好,我是老张。在惯导这行摸爬滚打了十几年,今天咱们来聊聊捷联惯导系统的基础。说实话,每次带新人,我都是从这一章讲起。别看它基础,但理解不透彻,后面算法推导你会越看越迷糊。
1.1 惯性导航基本原理
惯性导航,说白了就是「猜」出来的导航。你想想看,它不依赖任何外部信号,全靠自己身体里的加速度计和陀螺仪来推算位置。我刚开始接触时也觉得挺神奇的——一个黑盒子扔到地下,它居然能知道自己在哪。
基本原理其实很简单:
- 加速度计测量载体受到的比力(也就是除了重力以外的加速度)
- 陀螺仪测量载体的角速度(转得有多快、往哪个方向转)
- 对加速度积分一次得到速度,再积分一次得到位置
- 对角速度积分得到姿态角(俯仰、横滚、航向)
嗯,这里要注意:积分会累积误差。我在项目里见过一个案例,某型无人机起飞时陀螺零偏只差了0.01度/秒,飞了10分钟后位置误差直接漂了上百米。这就是惯导的「原罪」——误差随时间增长。
核心公式(导航方程):
位置更新: p(t) = p(0) + ∫v(t)dt
速度更新: v(t) = v(0) + ∫[f(t) - g]dt
姿态更新: C(t) = C(0) · exp(∫ω(t)×dt)
其中 f 是比力,g 是重力,ω× 是角速度的反对称矩阵。
我的经验:实际工程中,千万别直接用连续积分。一定要用离散化方法,比如四阶龙格-库塔或者双子样算法。我曾经在某个项目中直接用梯形法积分,结果姿态发散得一塌糊涂。
1.2 捷联惯导系统组成
捷联惯导和平台惯导最大的区别是什么?平台惯导有物理平台,陀螺和加速度计装在一个稳定平台上,平台始终跟踪导航坐标系。而捷联惯导呢?传感器直接「绑」在载体上,没有物理平台,全靠计算机算出一个「数学平台」。
一个典型的捷联惯导系统包含以下组件:
| 组件 | 作用 | 我踩过的坑 |
|---|---|---|
| 三轴陀螺仪 | 测量载体角速度 | 光纤陀螺对温度敏感,开机需要预热 |
| 三轴加速度计 | 测量载体比力 | 石英加速度计零偏稳定性最好 |
| 导航计算机 | 运行解算算法 | 算力不够时,降采样会丢信息 |
| 电源管理模块 | 提供稳定供电 | 纹波太大会引入噪声 |
我个人习惯把捷联惯导系统分成三个层次来看:
- 传感器层:IMU(惯性测量单元),包含陀螺和加速度计
- 算法层:姿态解算、速度位置更新、初始对准
- 应用层:组合导航、误差补偿、输出接口
你想想看,这三个层次中哪个最关键?我个人的看法是算法层。传感器再差,好的算法能救回来;传感器再好,算法烂照样发散。我在某次船载试验中就深有体会——同样的IMU,换了套解算算法,定位精度从几百米提升到了几十米。
注意:捷联惯导的「捷联」二字,意味着传感器和载体是刚性连接的。安装时一定要保证IMU的坐标系和载体坐标系严格对齐。我曾经见过一个案例,安装偏了0.5度,结果航向角误差直接导致飞行器偏航。嗯,后来我们专门设计了安装基准面和校准流程。
1.3 坐标系定义与转换
坐标系这东西,说简单也简单,说复杂也复杂。我刚开始学的时候,被各种坐标系绕晕过。其实你只要记住:所有坐标系都是人为定义的,目的是方便描述运动。
惯导中常用的坐标系有这几个:
- 地心惯性坐标系(i系):原点在地心,轴指向恒星。理论上惯性传感器测量值是在这个系下的,但实际工程中我们很少直接用。
- 地球坐标系(e系):原点在地心,Z轴指向北极,X轴指向本初子午线。这个系跟着地球转。
- 导航坐标系(n系):通常取「东北天」或者「北东地」。我习惯用东北天,因为高度向上为正,符合直觉。
- 载体坐标系(b系):原点在载体质心,X轴指向载体前方,Y轴指向右方,Z轴指向下方(右前下)。
坐标系之间的转换,核心就是旋转矩阵。比如从b系到n系的转换矩阵 C_b^n,它包含了载体的姿态信息:
C_b^n = [cosθcosψ, sinφsinθcosψ-cosφsinψ, cosφsinθcosψ+sinφsinψ]
[cosθsinψ, sinφsinθsinψ+cosφcosψ, cosφsinθsinψ-sinφcosψ]
[-sinθ, sinφcosθ, cosφcosθ ]
其中 φ 是横滚角,θ 是俯仰角,ψ 是航向角。
避坑指南:我曾经在某个项目中,把旋转矩阵的转置搞反了。明明传感器输出的是b系下的角速度,我直接用C_b^n去转换,结果姿态解算完全反了。记住:向量从b系转到n系,用C_b^n;从n系转到b系,用(C_b^n)^T。
实际工程中,我们通常用四元数来代替旋转矩阵。为什么?因为四元数没有万向锁问题,而且计算量小。我建议你一开始就养成用四元数的习惯,后面做组合导航时你会发现方便很多。
四元数 q = [q0, q1, q2, q3]^T 和旋转矩阵的关系:
C_b^n(q) = [q0²+q1²-q2²-q3², 2(q1q2-q0q3), 2(q1q3+q0q2)]
[2(q1q2+q0q3), q0²-q1²+q2²-q3², 2(q2q3-q0q1)]
[2(q1q3-q0q2), 2(q2q3+q0q1), q0²-q1²-q2²+q3²]
嗯,这里要注意:四元数的归一化。每次更新完四元数后,一定要做归一化处理。否则随着时间推移,四元数的模会偏离1,导致姿态误差。我见过有人忘了这步,结果解算出来的姿态角越来越离谱。
我的小技巧:在代码里,每次姿态更新后都加一行 q = q / np.linalg.norm(q)。养成习惯,能省去很多调试时间。
最后说一句,坐标系转换是惯导的「基本功」。你如果能把坐标系转换搞明白,后面姿态解算、初始对准、组合导航都会轻松很多。我当年就是花了整整一周时间,手推了所有坐标转换公式,才真正理解了惯导的本质。
好了,第一章的内容就到这里。下一章我们开始讲姿态解算的具体算法,到时候会用到今天讲的坐标系知识,记得复习一下。