• 组合导航原理剖析(三):姿态估计与左乘/右乘扰动误差传播方程


    对载体准确的姿态估计是实现高精度导航的前提条件。在消费级产品的导航方案中,无人机需要准确确定当前点头角与侧滚角,进而控制系统实现姿态自稳,是无人机安全行驶至关重要的条件;在高精度导航方案中,惯导系统需在静止状态下需经几分钟至几十分钟的初始对准,该过程就是计算IMU当前的姿态角(也叫作失准角),在长时间对准过程中,Kalman滤波器逐渐达到收敛状态。

    在GNSS不参与的姿态估计时,更多依赖于IMU的自修正,主要有三种模式:

    ① 加速度计的重力加速度分量,用于修正IMU的点头和侧滚方向角度;

    ② 磁力计感受到的地球磁场方向,用于修正摇头角;

    ③ 高精度陀螺仪能够测量地球自转的前提下,可以用于摇头角度的初始对准;

    其中①和②常见于低精度的导航方案,③见于高精度惯性导航方案,要求陀螺仪的精度高于地球自转角速度(地球自转:15°/h),②不适用于高精度导航方案,因为磁场较为容易受到外界环境的干扰,观测得到的摇头角的精度往往低于陀螺仪的理论精度。不失一般性,下面的内容仅讨论①。

    1. 姿态确定方法

    姿态估计常采用”error-state EKF“框架,相比于传统的EKF而言,用error state 可降低非线性系统在线性化过程中的误差,是惯性导航中最为常见的方案,其核心思想是用姿态误差的协方差矩阵来描述系统的不确定度。(参考文献:Quaternion kinematics for the error-state KF)(描述不一定准确)在详细设计导航方案时,总结有下面5个步骤:

    ① 确定待估计的状态量和误差状态量,确定状态更新方程;

    ② 根据状态更新方程,推导出误差传播方程,并得到kalman滤波的转移矩阵(离散更新方程对误差状态的雅克比矩阵)和协方差更新方程,是其中的核心;

    ③ 确定多传感器融合的观测模型,并对观测模型推导出残差相对于误差状态的雅克比矩阵;

    ④ 根据各传感器的误差大小,确定协方差矩阵Q(预测更新矩阵)和R(观测矩阵)

    ⑤ 确定kalman滤波的更新方程;

    状态量就是IMU本体坐标系到导航坐标系下的旋转矩阵(姿态角)和陀螺仪的bias,表示为

    ξ = [ R b w      b g ] T {\bf{\xi }} = {\left[ {{\bf{R}}_b^w\;\;{{\bf{b}}_g}} \right]^T} ξ=[Rbwbg]T

    标称状态的更新方程表示为

    R ˙ b w = R b w ( ω m − b g ) b g = 0

    R˙bw=Rbw(ωmbg)bg=0" role="presentation">R˙bw=Rbw(ωmbg)bg=0
    R˙bw=Rbw(ωmbg)bg=0

    姿态的误差状态通常用旋转矢量表示,有

    δ ξ = [ δ θ        δ b g ] T \delta {\bf{\xi }} = {\left[ {\delta {\bf{\theta }}\;\;\;\delta {{\bf{b}}_g}} \right]^T} δξ=[δθδbg]T

    下面对上式进行误差扰动分析,求解误差状态的传播方程。一般有两种模式:左乘扰动和右乘扰动,本文将分别推导两种形式并实现,对比两种模式在精度表现上的差异,最后解释为何会产生这样的差异。

    2. 右乘扰动

    首先是右乘扰动,定义旋转误差为:(其中 R b t w {\bf{R}}_{bt}^w Rbtw为真实旋转矩阵)

    R b t w = R b w E x p ( δ θ ) {\bf{R}}_{bt}^w = {\bf{R}}_b^wExp(\delta {\bf{\theta }}) Rbtw=RbwExp(δθ)

    推导得到error-state kinematic为:

    δ θ ˙ = − [ ω m − b g ] × δ θ − δ b g − n w δ b g ˙ = n g

    δ\bmθ˙=[\bmωm\bmbg]×δ\bmθδ\bmbg\bmnwδ\bmbg˙=\bmng" role="presentation">δ\bmθ˙=[\bmωm\bmbg]×δ\bmθδ\bmbg\bmnwδ\bmbg˙=\bmng
    δθ˙δbg˙=[ωmbg]×δθδbgnw=ng

    离散形式为:

    δ θ ← Exp [ ( ω m − b g ) Δ t ] T δ θ − δ b g Δ t + θ i δ b g ← δ b g + ω i

    δ\bmθExp[(\bmωm\bmbg)Δt]Tδ\bmθδbgΔt+\bmθiδ\bmbgδ\bmbg+\bmωi" role="presentation">δ\bmθExp[(\bmωm\bmbg)Δt]Tδ\bmθδbgΔt+\bmθiδ\bmbgδ\bmbg+\bmωi
    \\ δθδbgExp[(ωmbg)Δt]TδθδbgΔt+θiδbg+ωi

    矩阵形式表示为

    [ δ θ δ b g ] = [ Exp [ ( ω m − b g ) Δ t ] T − I Δ t 0 I ] ⏟ F x [ δ θ δ b g ] + [ I 0 0 I ] ⏟ F i [ θ i ω i ] \left[

    δ\bmθδ\bmbg" role="presentation">δ\bmθδ\bmbg
    \right] = \underbrace{\left[
    Exp[(\bmωm\bmbg)Δt]T\bmIΔt\bm0\bmI" role="presentation">Exp[(\bmωm\bmbg)Δt]T\bmIΔt\bm0\bmI
    \right]}_{\bm F_x} \left[
    δ\bmθδ\bmbg" role="presentation">δ\bmθδ\bmbg
    \right] + \underbrace{ \left[
    \bmI\bm0\bm0\bmI" role="presentation">\bmI\bm0\bm0\bmI
    \right] }_{\bm F_i }\left[
    \bmθi\bmωi" role="presentation">\bmθi\bmωi
    \right] \\ [δθδbg]=Fx [Exp[(ωmbg)Δt]T0IΔtI][δθδbg]+Fi [I00I][θiωi]

    当IMU运动较为缓慢或静止时,加速度计的信号为重力加速度分量在IMU本体坐标系下的投影,可用于姿态角度的观测,进而降低陀螺仪输出角速度积分时产生的漂移,这种模式被称为“单矢量测量”。可以表示为

    a m = R b w T g + n a {a_m} = {\bf{R}}{_b^{wT}}{\bf{g}} + {n_a} am=RbwTg+na

    将旋转矩阵用欧拉角表示

    a m = [ g sin ⁡ ψ − g cos ⁡ ψ sin ⁡ θ g cos ⁡ θ ] {a_m} = \left[

    gsinψgcosψsinθgcosθ" role="presentation">gsinψgcosψsinθgcosθ
    \right] am= gsinψgcosψsinθgcosθ

    欧拉角: θ , ψ , ϕ \theta ,\psi ,\phi θ,ψ,ϕ 。根据上式可知,重力加速度只能提供点头和侧滚方向的观测,而没有办法提供摇头角度的观测,这也是“单矢量观测”的不足之处。

    计算残差相对于error state的雅克比矩阵,表示为:

    H = [ [ I G R T g ] × 0 ] \bm H = \left[

    [IG\bmRT\bmg]×\bm0" role="presentation">[IG\bmRT\bmg]×\bm0
    \right] \\ H=[[IGRTg]×0]

    其中, g = [ 0 0 − 1 ] T \bm g = \left[

    001" role="presentation">001
    \right]^T g=[001]T 为重力在导航坐标系下的方向。

    kalman滤波的更新方程表示为:

    P − = F x P F x T + Q K = P H T ( H P H T + R ) − 1 δ ξ = K ( a m − R b w T g ) P = P − − K ( H P H T + R ) K T

    P=FxPFxT+QK=PHT(HPHT+R)1δξ=K(amRbwTg)P=PK(HPHT+R)KT" role="presentation">P=FxPFxT+QK=PHT(HPHT+R)1δξ=K(amRbwTg)P=PK(HPHT+R)KT
    P=FxPFxT+QK=PHT(HPHT+R)1δξ=K(amRbwTg)P=PK(HPHT+R)KT

    最后,更新状态量表示为

    R b w ← R b w E x p ( ω m − b g ) E x p ( δ θ ) b g ← b g + δ b g

    RbwRbwExp(ωmbg)Exp(δθ)bgbg+δbg" role="presentation">RbwRbwExp(ωmbg)Exp(δθ)bgbg+δbg
    RbwRbwExp(ωmbg)Exp(δθ)bgbg+δbg

    补充以上的推导过程,首先是error-state kinematic:

    在这里插入图片描述
    在这里插入图片描述

    3. 左乘扰动

    左乘扰动中定义旋转误差为:(其中 R b t w {\bf{R}}_{bt}^w Rbtw为真实旋转矩阵)

    R b t w = E x p ( δ θ ) R b w {\bf{R}}_{bt}^w = Exp(\delta {\bf{\theta }}){\bf{R}}_b^w Rbtw=Exp(δθ)Rbw

    推导得到error-state kinematic为:

    δ θ ˙ = R b w δ b g − R b w n w δ b ˙ g = n g

    δθ˙=RbwδbgRbwnwδb˙g=ng" role="presentation">δθ˙=RbwδbgRbwnwδb˙g=ng
    δθ˙=RbwδbgRbwnwδb˙g=ng

    矩阵形式表示离散更新方程表示为:

    [ δ θ δ b g ] = [ I R b w Δ t 0 I ] ⏟ F x [ δ θ δ b g ] + [ I 0 0 I ] ⏟ F i [ θ i ω i ] \left[

    δ\bmθδ\bmbg" role="presentation">δ\bmθδ\bmbg
    \right] = \underbrace{\left[
    \bmI\bmRbwΔt\bm0\bmI" role="presentation">\bmI\bmRbwΔt\bm0\bmI
    \right]}_{\bm F_x} \left[
    δ\bmθδ\bmbg" role="presentation">δ\bmθδ\bmbg
    \right] + \underbrace{ \left[
    \bmI\bm0\bm0\bmI" role="presentation">\bmI\bm0\bm0\bmI
    \right] }_{\bm F_i }\left[
    \bmθi\bmωi" role="presentation">\bmθi\bmωi
    \right] \\ [δθδbg]=Fx [I0RbwΔtI][δθδbg]+Fi [I00I][θiωi]

    观测矩阵为:

    H = [ I G R T g × 0 ] \bm H = \left[

    IG\bmRT\bmg×\bm0" role="presentation">IG\bmRT\bmg×\bm0
    \right] H=[IGRTg×0]

    补充以上的推导过程,首先是error-state kinematic:
    在这里插入图片描述

    其次是观测矩阵的推导。

    在这里插入图片描述

    4. 调参Q,R矩阵

    Q为陀螺仪相关的协方差矩阵,R为加速度计相关的协方差矩阵,记前后两数据帧的时间间隔为 Δ t \Delta t Δt,统计MEMS传感器在静止状态下一段时间内IMU的方差作为离散噪声的方差,记为 σ g 2 \sigma _g^2 σg2和,那么根据预测更新方程和观测方程,协方差矩阵表示为:

    Q = d i a g ( σ g 2 Δ t 2    ,    1 0 − 12 ) R = b l k d i a g ( σ a 2 )

    Q=diag(σg2Δt2,1012)R=blkdiag(σa2)" role="presentation">Q=diag(σg2Δt2,1012)R=blkdiag(σa2)
    Q=diag(σg2Δt2,1012)R=blkdiag(σa2)

    5. 试验结果对比

    试验采用经典的高精度MEMS传感器STIM300型号IMU,陀螺仪的零偏稳定性指标为1°/h,加速度计的零偏为1mg,通过RS422传输数据至ARM计算平台,输出帧率为1000Hz,加速度计数据作101个点矩形窗的平滑,每20ms作一次滤波更新。

    IMU的初始欧拉角度为0,0,0,IMU中途经过多次摆动和振动操作,历经2个小时之后,对比如下图所示,由于直接积分用旋转矢量泰勒展开近似的模式进行计算,发现仍存在较为明显的误差,实际情况下,STIM300的漂移程度应远低于图中所呈现的那样。ESKF(采用左乘扰动的模式)在点头、侧滚角上表现较好,摇头角表现较差。摇头角的漂移程度大于直接积分的方式,这是因为单矢量观测过程中可能对摇头角进行错误的观测修正。

    而右乘扰动的模式中,摇头角度的漂移更大,甚至到2-3s漂移到1°,在对航向角度缺乏有效观测的条件下,摇头角的漂移程度让人吃惊。

    在这里插入图片描述

    左乘扰动

    左乘扰动

    右乘扰动
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/e77887c6323d465e82398787b28c143e.png

    6. 原因分析

    对于为什么左乘扰动中摇头角漂移更小,这是因为将误差状态 δ θ \delta \bm \theta δθ由本体坐标系改为定义在惯性坐标系。而**王炜鑫**博士认为将姿态误差定义到惯性坐标系后,线性化的不精确就不会对不可观测的自由度做出错误的修正,详细内容可以参考他的博客。因此在高精度的惯性导航中,常采用左乘扰动的方式进行误差传播方程的推导,在精度要求不太高的场景中,相关论文中也有对右乘扰动模型的使用。

  • 相关阅读:
    IDEA 创建 Servelet 项目
    深入理解java和dubbo的SPI机制
    android studio 编译乱码的问题
    哈希表 | 三数之和、四数之和 | 用`双指针法`最合适 | leecode刷题笔记
    【牛客-剑指offer-数据结构篇】【图解】JZ27 二叉树的镜像 Java实现
    使用 Data Assistant 快速创建测试数据集
    【5G NAS】5G SUPI 和 SUCI 标识符详解
    外贸公司保密协议 (2)
    树上两点之间的路径数
    vue中反向代理pathRewite的理解
  • 原文地址:https://blog.csdn.net/chenshiming1995/article/details/127038180