简介:捷联惯导初始对准是导航系统进入工作状态的前提,而粗对准的姿态解算精度直接决定后续精对准与组合导航的可靠性。在静基座条件下,利用重力与地球自转角速度构造矢量对的经典方法简单有效,但载体一旦运动,加速度计与陀螺的测量便混入运动加速度、角运动及外速度误差等污染,导致传统解析法失效。工程上引入GNSS等外部速度参考,通过比力方程积分构造姿态观测方程,以速度全积分方法将微分噪声转化为累计误差,实现姿态矩阵估计;进一步结合滑动窗设计,用有限窗口内的积分与多窗融合抑制误差随时间的发散。理解积分与滑动窗的本质差异,平衡窗口长度、步长与重叠率,是提升动基座粗对准鲁棒性的关键。这类方法在船载、车载等动态环境中具有重要应用价值,助推惯性导航在复杂运动场景下的工程落地。 做惯导的人都知道,粗对准是姿态解算的第一块地基。地基没打好,后面精对准、组合导航做得再花哨也是空中楼阁。前几年做船载项目,第一次在动基座条件下做SINS初始对准,我以为教科书上的解析粗对准是万能钥匙,结果一到海上,静基座那套"重力和地球自转角速度直接构造矢量对"的办法直接被晃动和机动打回原形。后来把速度/位置全积分和速度滑动窗这两条路都走了一遍,才把动基座粗对准这点事儿彻底理顺。
这篇东西不是教科书复读,是这些方法从公式推导、仿真验证到上设备实测的完整记录。适合正在做捷联惯导初始对准、尤其是动基座场景的同学参考,也适合刚入行、想搞清楚粗对准到底在解决什么问题的朋友。下面我尽量用工程语言讲,把每个"为什么"都拆开。
1. 动基座粗对准的困境:静基座的"参考答案"为什么失效
1.1 静基座解析粗对准的套路
先花两分钟把静基座粗对准过一遍,因为后面所有动基座方法的出发点都是"怎么把静基座能用的参考信息找回来"。
经典解析粗对准的思路非常朴素:IMU固定不动时,加速度计输出的是重力加速度在机体轴上的投影(严格说是比力,方向和重力相反),陀螺输出的是地球自转角速度在机体轴上的投影。而重力和地球自转角速度在地理坐标系里的分量是精确已知的:
g^n = [0; 0; -g],ω_ie^n = [0; ω_ie·cos L; ω_ie·sin L]
于是机体坐标系下有一组测量矢量f^b和ω_ib^b,导航坐标系下有一组已知矢量g^n和ω_ie^n,姿态矩阵C_b^n就是这两个坐标系之间的旋转关系。构造三组非共线矢量对,用TRIAD或者直接矩阵求逆:
C_b^n = [g^n, ω_ie^n, (g^n×ω_ie^n)] · [f^b, ω_ib^b, (f^b×ω_ib^b)]^(-1)
三个轴向上的姿态角一次性解出来,整个粗对准耗时不到一秒,精度对粗对准来说绰绰有余。这套方法在静基座上没有任何问题,绝大多数教材讲的都是它,所以很多新手会觉得"粗对准不是So Easy吗"。
1.2 动起来之后,测量被三层"污染"叠加
问题在于,载体一旦运动,上面所有等式全都不成立了。我把动基座对测量的污染拆成三层来说:
第一层是运动加速度。加速度计输出的比力变成f^b = a^b - g^b,多了一个运动加速度a^b。船的纵摇横摇、车的加减速转弯,水平运动加速度轻松超过0.1g。而g的水平分量在水平姿态误差1°的时候才0.017g。也就是说,如果你拿静基座公式硬算,水平姿态误差的量级就是"运动加速度/重力加速度",好几个度到十几度都是可能的。
第二层是角运动。陀螺输出的角速度变成ω_ib^b = ω_ie^b + ω_eb^b,船在海上摇摆的角速度峰值每秒能到几度甚至几十度,而地球自转角速度每小时才15度,差了三个数量级。把摇摆角速度当成地球自转角速度去算航向,结果完全是噪声。
第三层是外速度的引入。动基座下我们引入了GNSS或DVL这样的外部速度参考,但外速度本身有噪声、有延迟、和IMU之间有杆臂,这些"次级污染"虽然不如前两层致命,却会在积分类方法里随时间累积,后面专门讲。
所以动基座粗对准的第一个工程结论是:瞬时测量值不能直接用来构造矢量对,必须用积分、滤波、滑动窗这类手段把运动污染抑制掉。这也是本文两种方法的共同出发点。
1.3 换个思路:让外部速度参考当"参考答案"
静基座能对准,根本原因是有了两个已知方向:重力方向和地球自转轴方向。动基座下这俩参考被运动污染了,怎么办?工程上的答案很直接:引入新的外部参考,最常见的就是GNSS速度。
GNSS给出的速度是导航坐标系下的,不受载体运动加速度和摇摆的影响。惯导自身输出的比力经过积分也能得到一个速度增量。这两个速度之间恰好通过姿态矩阵联系在一起。如果我们能把姿态矩阵从速度关系里解出来,粗对准就完成了。全积分类和滑动窗类方法,本质上都在做这一件事,只是对速度观测量的利用方式不同。
2. 速度/位置全积分粗对准:把积分当"时间放大器"
2.1 比力方程怎么变成姿态观测方程
全积分方法的起点是捷联惯导最基础的比力方程:
v̇^n = C_b^n f^b - (2ω_ie^n + ω_en^n) × v^n + g^n
这个方程说的是:导航系下的加速度,等于比力经姿态矩阵投影到导航系,再扣除哥氏加速度、向心加速度和重力。
把姿态矩阵相关的项单独拎出来,并且把v^n替换成外部参考速度v_r^n(比如GNSS速度),就得到:
C_b^n f^b(t) = v̇_r^n(t) + (2ω_ie^n + ω_en^n) × v_r^n(t) - g^n
右边这一整坨,每一项都是已知量:v_r是GNSS给的,ω_ie是地球自转角速度精确已知,ω_en可以通过GNSS位置速度算出来,g^n也是已知的。所以我给它起名叫"导航系合成比力"a_syn^n(t)。
问题来了:右边第一项是v̇_r,对GNSS速度求导,噪声会被放大得没法用。GNSS速度本身有0.03~0.1m/s的噪声,求导之后直接是几m/s²级别的毛刺,比力方程根本没法瞬时求解。
2.2 积分把微分噪声变成了累计误差
解决微分噪声的办法就是积分。假设粗对准期间姿态矩阵C_b^n近似不变——这个假设在粗对准的几十秒内对中高精度惯导是成立的,因为陀螺零漂很小、载体姿态变化可以靠后续补偿——对上面的等式两边同时积分:
C_b^n ∫(t0→t) f^b(τ) dτ = ∫(t0→t) a_syn^n(τ) dτ
左边是IMU比力在[t0, t]上的积分,在硬件上就是速度增量,完全可以由捷联积分获得。右边第一项变成了v_r^n(t) - v_r^n(t0),求导变成了差分,噪声被大幅平滑。其余项也全是积分形式,对噪声天然有抑制作用。
我把左右两边分别记作矢量u_b(t)和u_n(t):
u_b(t) = ∫(t0→t) f^b(τ)dτ(机体坐标系下比力积分矢量) u_n(t) = v_r^n(t) - v_r^n(t0) + ∫(t0→t) [(2ω_ie^n + ω_en^n) × v_r^n(τ) - g^n]dτ(导航坐标系下对应矢量)
于是姿态观测方程简化为C_b^n · u_b(t) = u_n(t)。这是三个方程,未知数是姿态矩阵的三个自由度,理论上任意一个时刻t的矢量对只能提供两个独立约束(因为矢量的方向只有两个自由度),所以要解出完整的姿态矩阵,至少需要两个不同时刻、且方向不共线的矢量对。
工程上怎么取?最简单的做法是取t1 = T/2和t2 = T两个时刻,得到两组矢量对,然后用TRIAD:
C_b^n = [u_n(t1), u_n(t2), u_n(t1)×u_n(t2)] · [u_b(t1), u_b(t2), u_b(t1)×u_b(t2)]^(-1)
更稳妥的做法是取多个时刻的矢量对,用最小二乘或者QUEST去拟合一个最优姿态矩阵。实测下来,多时刻最小二乘比两组TRIAD抗噪能力强不少,计算量也不大,推荐直接用。
2.3 位置全积分:把速度再积一次
位置全积分就是把上面的速度积分再积一次。左边变成比力的二次积分,也就是位置增量在机体轴上的投影:
C_b^n ∫∫ f^b dt dt = ∫∫ a_syn^n dt dt
右边二次积分后,第一项变成位置量p_r^n(t) - p_r^n(t0) - v_r^n(t0)·(t - t0),其余哥氏和重力项也全部二次积分。
位置全积分的好处是二次积分对GNSS速度噪声的平滑作用更强,高频噪声基本被"磨平"了。坏处也显而易见:二次积分让加速度计零偏和GNSS速度常值误差变成了随时间二次增长的位置误差,积分时间稍微一长,误差就压不住了。所以位置全积分在实践中更适合外部速度噪声较大、但对准时间必须短(比如30秒以内)的场景。或者反过来,和速度积分法联合使用,把速度积分矢量对和位置积分矢量对全部堆进同一个最小二乘问题里,相当于增加了观测量,条件数更健康。
2.4 全积分方案的三个软肋
别急着高兴,全积分方案有三个绕不开的坑:
第一个是"姿态恒定"假设。整个推导假设C_b^n在积分区间内是常数阵,但载体在动,姿态一定在变。陀螺零漂哪怕只有0.01°/h,积分60秒姿态也就漂0.00017°,可以忽略;但在转弯机动时,航向角每秒变化好几度,C_b^n根本不是常数,全积分结果会被明显拉偏。
第二个是误差随积分时间线性积累。加速度计零偏和GNSS速度常值误差都会以斜坡形式累积到u_n或u_b里,时间越长越偏。所以全积分不是"时间越长越准",而是"时间太短看不出来、时间太长被误差淹没",中间有个最优区间。
第三个是重力方向变化量的可观测性问题。全积分方法本质是依靠重力矢量在地理系中的方向随时间缓慢变化(地球自转引起)来提供航向可观测性。积分时间越短,重力方向变化越小,矢量对之间越接近共线,姿态解算的病态程度越高。船载环境如果只积10秒,g的方向只转了不到0.04°,航向的误差会很大。这也是为什么动基座粗对准普遍需要30秒以上外加速率的底层原因。
3. 速度滑动窗粗对准:给积分加一条"遗忘曲线"
3.1 为什么非要用滑动窗
全积分方法最大的矛盾点在于:航向可观测性需要长时间积分,而误差积累又不允许长时间积分。滑动窗就是冲着这个矛盾来的。
滑动窗的做法很直观:不用从t0一直积到现在,而是用一个固定长度T的窗口,窗口内照样做速度积分、构造矢量对、解算一个姿态;然后把窗口向前滑一步,重新做一次。每个窗口独立计算,姿态估计随时间滚动更新。
这样做的直接好处有三个:一是每个窗口的积分时间被限制在T以内,误差积累有上限,不会像全积分那样无限增长;二是窗口短了,窗口内"姿态恒定"的假设比全积分更接近真实;三是多个窗口给出了多个独立的姿态估计,可以统计平均,相当于增加了冗余观测。
代价也清楚:单个窗口内积分时间短,重力方向变化量小,矢量对接近共线,单次解算的病态程度比全积分严重。所以滑动窗必须靠"滑得多、平均得多"来换精度,本质上是把时间换精度变成了"多窗口平均换精度"。
3.2 窗口怎么滑:长度、步长、重叠率
窗口参数设计是整个滑动窗方案最核心的工程问题。我直接给经验值:
窗口长度T:船载环境下,摇摆周期一般在6~15秒,垂直方向的扰动周期更短。T至少要覆盖2个以上摇摆周期,让窗口内的平均比力尽量接近"纯重力+真实运动"的均值。船载一般取30~60秒,车载取10~30秒。T太短,矢量对共线程度高、姿态估计方差大;T太长,误差积累又回来了。
滑动步长ΔT:决定姿态输出的更新率和窗口间的重叠程度。ΔT = T就是不重叠,计算量最小但输出率低;工程上更常用ΔT = 1~5秒,窗口之间高度重叠,相邻窗口的姿态估计强相关,平滑效果好,但要注意重叠导致的信息冗余会让"多窗口平均"的降噪效果打折扣。
重叠率:我自己的经验是,重叠率在50%~80%之间比较划算。超过80%,相邻窗口差异太小,计算浪费;低于50%,窗口间的独立性好但输出率低。
窗口内的数据处理也有讲究。直接对原始比力积分之前,最好先做一次带通滤波或者滑动平均,把摇摆频段(通常0.05~1Hz)之外的高频振动和低频慢漂移先压一压,这样窗口内的积分对噪声更鲁棒。我在船载数据上试验过,积分前加一个0.01~2Hz的带通滤波,航向误差能改善15%~20%。
3.3 窗内姿态估计与多窗融合
每个窗口内部的做法和全积分完全一样:取窗口起点t_k作为积分起点,对窗口内每个采样时刻计算u_b(t)和u_n(t),然后在窗口内取若干时刻的矢量对,用最小二乘或QUEST解出一个姿态矩阵C_b^n(k)。
有了每个窗口的姿态估计之后,多窗口融合是滑动窗的精华所在。融合方式有几种:
最简单的是等权平均:把K个窗口的姿态角直接做算术平均。但这样做有个问题——误差小的窗口和误差大的窗口贡献一样,不合理。
更合理的加权平均:按窗口的积分时间给权重,窗口越新、实际积分误差越小,权重越高。我用过指数衰减权重,衰减系数τ取窗口长度T的1~2倍,效果比等权平均好一个档次。
还有一种是矢量对层面的整体解法:把当前窗口和之前若干个窗口的所有矢量对全部堆在一起,做一个整体最小二乘。这种做法的好处是自然融入了所有历史信息,坏处是计算量略大,而且老的矢量对误差大,需要在目标函数里按时间加权。我在嵌入式平台上测过,200Hz采样、窗口60秒、叠加5个窗口的矢量对,整体最小二乘单次求解也就几毫秒,实时性完全没问题。
3.4 和全积分方案的本质区别
一句话总结:全积分是"一次性利用从起点到当前时刻的所有
本文还有配套的精品资源,点击获取