Quaternion based Kalman Filter for attitude estimation

1.系统模型

1.1 陀螺模型

ω ∗ = ω + b + η ω b ˙ = η b (1) \begin{aligned} \boldsymbol{\omega^{*}} &=\boldsymbol{\omega}+\boldsymbol{b}+\boldsymbol{\eta_{\omega}}\\ \boldsymbol{\dot{b}}&=\boldsymbol{\eta_{b}} \end{aligned}\tag{1} ωb˙=ω+b+ηω=ηb(1)

其中, ω \omega ω是真实的角速度, b b b是偏置, ω ∗ \omega^{*} ω是角速度的测量值。 η ω \eta_{\omega} ηω η b \eta_{b} ηb是零均值白噪声。

1.2 运动学模型

  待估计状态为 x = [ q , b ] T \boldsymbol{x}=[\boldsymbol{q}, \boldsymbol{b}]^{T} x=[q,b]T,噪声为 η = [ η ω , η b ] T \eta=\left[\boldsymbol{\eta}_{\omega}, \boldsymbol{\eta}_{b}\right]^{T} η=[ηω,ηb]T
四元数的微分运动学方程为
q ˙ = 1 2 [ ω 0 ] ⊗ q (2) \dot{{\mathbf{q}}}=\frac{1}{2}\left[\begin{array}{l} {\boldsymbol{\omega}} \\ \mathbf{0} \end{array}\right] \otimes {\mathbf{q}}\tag{2} q˙=21[ω0]q(2)

根据式(),可得待估计状态的动力学方程
x ˙ = f ( x ) + g ( x , η ) (3) \dot\boldsymbol{x}=\boldsymbol{f}(\boldsymbol{x})+\boldsymbol{g}(\boldsymbol{x}, \boldsymbol{\eta})\tag{3} x˙=f(x)+g(x,η)(3)

其中,
f ( x ) = [ 1 2 [ ω ∗ − b 0 ] ⊗ q 0 ] g ( x , η ) = [ 1 2 [ − η ω 0 ] ⊗ q η b ] (4) \begin{aligned} \boldsymbol{f}(\boldsymbol{x}) &=\left[\begin{array}{c} \frac{1}{2}\left[\begin{array}{l} {\boldsymbol{\omega}^*-\boldsymbol{b}} \\ \mathbf{0} \end{array}\right] \otimes {\mathbf{q}}\\ \mathbf{0} \end{array}\right] \\ \boldsymbol{g}(\boldsymbol{x}, \boldsymbol{\eta}) &=\left[\begin{array}{c} \frac{1}{2}\left[\begin{array}{l} -\boldsymbol{\eta}_{\omega} \\ \mathbf{0} \end{array}\right] \otimes {\mathbf{q}}\\ \boldsymbol{\eta}_{b} \end{array}\right] \end{aligned}\tag{4} f(x)g(x,η)=21[ωb0]q0=21[ηω0]qηb(4)

  状态估计 x ˉ \bar{\boldsymbol{x}} xˉ的传播利用无噪声的非线性运动方程:
x ˉ ˙ = f ( x ˉ ) (5) \dot{\bar{\boldsymbol{x}}}=f(\bar{\boldsymbol{x}})\tag{5} xˉ˙=f(xˉ)(5)

  EKF中,状态的协方差矩阵 [ P ] [P] [P]表明了状态的一阶不确定度。利用 δ x = [ δ θ , δ b ] \delta \boldsymbol{x}=[\delta\boldsymbol{\theta},\delta\boldsymbol{b}] δx=[δθ,δb],对式在当前估计 x ˉ \bar{\boldsymbol{x}} xˉ处进行线性化,得到
δ x ˙ = [ F ] δ x + [ G ] η (6) \delta \dot{\boldsymbol{x}}=[F] \delta \boldsymbol{x}+[G] \boldsymbol{\eta}\tag{6} δx˙=[F]δx+[G]η(6)

其中
[ F ] = ∂ f ∂ x ∣ x = x ‾ = [ − ω ‾ × − I 3 × 3 0 3 × 3 0 3 × 3 ] (7) [F] =\left.\frac{\partial \boldsymbol{f}}{\partial \boldsymbol{x}}\right|_{\boldsymbol{x}=\overline{\boldsymbol{x}}}=\left[\begin{array}{cc} -\overline{\boldsymbol{\omega}}^{\times} & -\boldsymbol{I}_{3\times3} \\ \mathbf{0}_{3\times3} & \mathbf{0}_{3\times3} \end{array}\right]\tag{7} [F]=xfx=x=[ω×03×3I3×303×3](7)

[ G ] = ∂ g ∂ η ∣ x = x ‾ , η = 0 = [ − I 3 × 3 0 3 × 3 0 3 × 3 I 3 × 3 ] (8) [G]=\left.\frac{\partial \boldsymbol{g}}{\partial \boldsymbol{\eta}}\right|_{\boldsymbol{x}=\overline{\boldsymbol{x}}, \boldsymbol{\eta}=\mathbf{0}}=\left[\begin{array}{cc} -\boldsymbol{I}_{3\times3} & \mathbf{0}_{3\times3}\\ \mathbf{0}_{3\times3} & \boldsymbol{I}_{3\times3} \end{array}\right]\tag{8} [G]=ηgx=x,η=0=[I3×303×303×3I3×3](8)

[ Q ] = [ σ ω 2 I 3 × 3 0 3 × 3 0 3 × 3 σ b 2 I 3 × 3 ] (8) [Q]=\left[\begin{array}{cc} \sigma_\omega^2\boldsymbol{I}_{3\times3} & \mathbf{0}_{3\times3}\\ \mathbf{0}_{3\times3} & \sigma_b^2\boldsymbol{I}_{3\times3} \end{array}\right]\tag{8} [Q]=[σω2I3×303×303×3σb2I3×3](8)

式中, ω ˉ = ω ∗ − b ˉ \boldsymbol{\bar{\omega}}=\boldsymbol{\omega^*}-\boldsymbol{\bar{b}} ωˉ=ωbˉ。则状态协方差按照如下的里卡提微分方程传播
[ P ˙ ] = [ F ] [ P ] + [ P ] [ F ] T + [ G ] [ Q ] [ G ] T (9) [\dot{P}]=[F][P]+[P][F]^{T}+[G][Q][G]^{T}\tag{9} [P˙]=[F][P]+[P][F]T+[G][Q][G]T(9)

  测量残差为测量与估计的姿态之差
y k = δ θ ∗ \boldsymbol{y_{k}}=\delta\boldsymbol{\theta}^{*} yk=δθ

其中, [ H k ] = [ I 3 × 3 , 0 ] \left[H_{k}\right]=\left[I_{3 \times 3} ,0\right] [Hk]=[I3×3,0]
  滤波增益为
[ K k ] = [ P k ] [ H k ] T ( [ H k ] [ P k ] [ H k ] T + [ Λ σ ] ) − 1 \left[K_{k}\right]=\left[P_{k}\right]\left[H_{k}\right]^{T}\left(\left[H_{k}\right]\left[P_{k}\right]\left[H_{k}\right]^{T}+\left[\Lambda_{\sigma}\right]\right)^{-1} [Kk]=[Pk][Hk]T([Hk][Pk][Hk]T+[Λσ])1

  状态和协方差按照以下公式进行更新
δ x k = [ δ θ , δ b ] = [ K k ] y k [ P k ] = ( [ I 6 × 6 ] − [ K k ] [ H k ] ) [ P k ] ( [ I 3 × 3 ] − [ K k ] [ H k ] ) − 1 + [ H k ] [ P k ] [ H k ] T \begin{aligned} &\delta \boldsymbol{x}_k=[\delta\boldsymbol{\theta},\delta\boldsymbol{b}]=\left[K_{k}\right] \boldsymbol{y_{k}}\\ &\left[P_{k}\right]=\left(\left[I_{6 \times 6}\right]-\left[K_{k}\right]\left[H_{k}\right]\right)\left[P_{k}\right]\left(\left[I_{3 \times 3}\right]-\left[K_{k}\right]\left[H_{k}\right]\right)^{-1}+\left[H_{k}\right]\left[P_{k}\right]\left[H_{k}\right]^{T} \end{aligned} δxk=[δθ,δb]=[Kk]yk[Pk]=([I6×6][Kk][Hk])[Pk]([I3×3][Kk][Hk])1+[Hk][Pk][Hk]T
b ^ + = b ˉ + δ b q ^ + = [ 1 2 δ θ 1 − 1 4 δ θ T δ θ ] ⊗ q ˉ \hat\boldsymbol{b}^{+} = \bar\boldsymbol{b}+\delta\boldsymbol{b}\\ \hat\boldsymbol{q}^{+}=\left[\begin{array}{l} \frac{1}{2}\delta\boldsymbol{\theta} \\ \sqrt{1-\frac{1}{4}\delta\boldsymbol{\theta}^{T}\delta\boldsymbol{\theta}} \end{array}\right] \otimes \bar\boldsymbol{q} b^+=bˉ+δbq^+=[21δθ141δθTδθ ]qˉ

2仿真结果

(图1 陀螺偏置估计结果)

(图2 姿态误差)

心得,评注

  1. 编程一定要认真,尤其是在现有程序上进行改动的时候,一定要考虑周全。

    这个xplus(5:7)在mrp的导航里是xplus(4:6),在修改成quaternion后一直没改过来,导致程序有问题

参考文献:
optimal estimation of dynamics system
Fundamentals of spacecraft attitude determine and control

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值