课题学习(二十二)---《A Double-Stage Kalman Filter for Orientation Tracking With an Integrated Processor ...》

   声明:本人水平有限,博客可能存在部分错误的地方,请广大读者谅解并向本人反馈错误。
   论文全称:《A Double-Stage Kalman Filter for Orientation Tracking With an Integrated Processor in 9-D IMU》

一、 介绍

1.1 摘要

  选择用四元数表示角度位置数据,并使用扩展卡尔曼滤波作为传感器融合算法。为此,设计了一种新的两级滤波器:第一级利用加速度计数据,第二级利用磁力计数据进行角位置校正。这允许灵活性,更少的计算需求,以及对磁场异常的鲁棒性。

1.2 介绍

  四元数的使用不存在角奇异性问题,可以更好地线性化系统。如果需要,四元数可以很容易地转换为其他旋转表示方法,如旋转矩阵或欧拉角序列。

二、系统建模理论

在这里插入图片描述

2.1 第一阶段:基于加速度计的扩展卡尔曼滤波

  系统有三种不同类型的输入数据:陀螺仪数据测量在三个轴上的角速度(以rad/s为单位),加速度计数据测量加速度(以g为单位),磁罗盘数据测量磁场(以Gauss为单位)。同时,利用加速度计和磁力计数据作为固定参考,修正了角度位置估计中的误差。
  根据卡尔曼滤波,需要定义一个离散时间状态方程来描述系统状态 x k x_k xk的演化,从前一步 x k − 1 x_{k-1} xk1处的系统状态开始,用矩阵 A k A_k Ak描述状态变化的规律,用矩阵 B k B_k Bk响应某些系统输入 u k u_k uk:
x k ^ − = A K x k − 1 ^ + B k u k − − − − − − − − − − − − ( 1 ) \hat{x_k}^-=A_K\hat{x_{k-1}}+B_ku_k------------(1) xk^=AKxk1^+Bkuk(1)
  式(1)将给出所谓的“先验”系统状态估计。由于这个原因,系统状态 x k x_k xk有一个上标“-”,而" ^ \hat{} ^ "表示实际系统状态是未知的。
  在状态方程中只使用表示角度位置的四元数作为系统状态,增加其他变量不会显著提高角度估计的精度,而且需要显著提高的处理能力。在系统状态中包含额外的变量会导致更大的矩阵运算。
  角位置用四元数q表示:
q = [ q 0 , q 1 , q 2 , q 3 ] T − − − − − − − − − − − − − ( 2 ) q=\begin{bmatrix}q_0,q_1,q_2,q_3\end{bmatrix}^T-------------(2) q=[q0,q1,q2,q3]T(2)
  四元数由实数和矢量组成: q 0 q_0 q0表示实数, v = [ q 1 , q 2 , q 3 ] T v=\begin{bmatrix}q_1,q_2,q_3\end{bmatrix}^T v=[q1,q2,q3]T表示矢量。
  旋转是由旋转轴和绕轴旋转的角度来定义的。向量部分v表示旋转轴,实部表示旋转角α,根据 q = c o s ( α 2 ) + s i n ( α 2 ) ∗ v − − − − − − − − − − − − ( 3 ) q=cos(\frac{\alpha}{2})+sin(\frac{\alpha}{2})*v------------(3) q=cos(2α)+sin(2α)v(3)
  为了正确地表示旋转,四元数必须有单位范数。四元数范数是用 ∣ q ∣ = q 0 2 + q 1 2 + q 2 2 + q 3 2 − − − − − − − − − − − − ( 4 ) |q|=\sqrt{q_0^2+q_1^2+q_2^2+q_3^2}------------(4) q=q02+q12+q22+q32 (4)
  采用标准公式将四元数形式的角旋转表示转换为欧拉角形式。选取欧拉角旋转顺序未X–>Y–>Z(作者并未说明参考坐标系,但是应该是北-东-地),横摇角、俯仰角、偏航角由下式给出:
在这里插入图片描述
  在NASA的论文:Euler angles, quaternions, and transformation matrices for space shuttle analysis 中,对各顺序旋转的矩阵进行了推导,此论文的旋转顺序输出为:
在这里插入图片描述
  状态方程的连续形式为: q ˙ n b = 1 / 2 Ω n b n q n b − − − − − − ( 8 ) \dot{q}_n^b=1/2\Omega_{nb}^nq_n^b------(8) q˙nb=1/2Ωnbnqnb(8)
   Ω n n \Omega_n^n Ωnn为由四元数性质导出的旋转矩阵:
Ω n b = [ 0 − ω x − ω y − ω z ω x 0 ω z − ω y ω y − ω z 0 ω x ω z ω y − ω x 0 ] − − − − ( 9 ) \Omega_{nb}^=\begin{bmatrix} 0&-\omega_x&-\omega_y&-\omega_z\\ \omega_x&0&\omega_z&-\omega_y\\ \omega_y&-\omega_z&0&\omega_x\\ \omega_z&\omega_y&-\omega_x&0 \end{bmatrix}----(9) Ωnb= 0ωxωyωzωx0ωzωyωyωz0ωxωzωyωx0 (9)
  由陀螺测量的角速度 ω x \omega_x ωx ω y \omega_y ωy ω z \omega_z ωz被用来填充矩阵(9)。
  陀螺仪数据是隐式输入,因为它们用于确定从前一状态导出系统演化的矩阵。得到时变 A T C = 1 / 2 Ω n b n A_{TC}=1/2\Omega_{nb}^n ATC=1/2Ωnbn矩阵。对于数字卡尔曼滤波器的实现,需要将(8)从这个时间连续系统变为离散系统
  为了将该方程转换为离散时间方程,在数字系统中使用了算法每次执行之间的时间步长T。通过这种方式,我们得到: q n b ( t + T ) = q n b ( t ) + A T C q n b ( t ) T = ( I + A T C T ) q n b ( t ) − − ( 11 ) q_n^b(t+T)=q_n^b(t)+A_{TC}q_n^b(t)T=(I+A_{TC}T)q_n^b(t)--(11) qnb(t+T)=qnb(t)+ATCqnb(t)T=(I+ATCT)qnb(t)(11)
  离散时间矩阵 A k A_k Ak的形式为:
A k = ( I + A T C T ) = ( I + 1 / 2 Ω n b n T ) − − − − − − ( 12 ) A_k=(I+A_{TC}T)=(I+1/2\Omega_{nb}^nT)------(12) Ak=(I+ATCT)=(I+1/2ΩnbnT)(12)
  由于只有单位四元数才能正确表示角度位置,为了保证数据的完整性,引入了归一化单元。
   在前面的(1)中描述第一部分是“先验的”,方程更新角位置仅使用陀螺仪数据。现在有必要定义卡尔曼滤波器的校正方程。在我们的系统中,有两个修正方程,每个阶段一个:第一个是用加速度计数据,第二个是用磁力计数据。利用卡尔曼滤波理论,修正方程为:
x ^ k = x ^ k − + K k ( z k − H ∗ x ^ k − ) − − − − − − − ( 13 ) \hat{x}_k=\hat{x}_k^-+K_k(z_k-H*\hat{x}_k^-)-------(13) x^k=x^k+Kk(zkHx^k)(13)
  其中 z k z_k zk表示实际测量值,在我们的目标系统中,是加速度计或磁力计数据。 H ∗ x ^ k − H*\hat{x}_k^- Hx^k是从“先验”系统状态计算出来的预期测量值。实际测量值与期望测量值之间的差称为残差(residual)。残差必须用 K k K_k Kk增益加权,以获得校正因子,并计算系统状态 x k ^ \hat{x_k} xk^的“后验”估计,这是该概率问题的最小二乘解。在我们的系统中,不可能使用线性关系 H ∗ x ^ k − H*\hat{x}_k^- Hx^k来计算估计的重力或磁场,但有必要使用非线性关系 h ( x ^ k − ) h(\hat{x}_k^-) h(x^k)和扩展卡尔曼滤波器。
  卡尔曼增益 K k K_k Kk的计算是一个相当复杂的任务,涉及到许多矩阵运算。首先,有必要计算“先验”误差协方差 P k − P_k^- Pk,该协方差表示仅使用“先验”状态方程进行状态估计的误差:
P k − = A k P k − 1 A k T + Q k − 1 − − − − − − − ( 14 ) P_k^-=A_kP_{k-1}A_k^T+Q_{k-1}-------(14) Pk=AkPk1AkT+Qk1(14)
  式(14)中, P k − 1 P_{k-1} Pk1矩阵为前一次滤波迭代时的“后验”误差协方差矩阵 Q k − 1 Q_{k-1} Qk1为过程噪声协方差矩阵。在该系统中, Q k − 1 Q_{k-1} Qk1协方差矩阵直接依赖于陀螺噪声和其他陀螺误差源,因为系统演化是由包含陀螺数据项的 A k A_k Ak矩阵描述的。但是, Q k − 1 Q_{k-1} Qk1值并不代表陀螺噪声,而是与系统演化过程中的噪声有关。
  在扩展卡尔曼滤波器中,卡尔曼增益用:
K k = P k − H k T ( H k P k − H k T + V k R k V k T ) − 1 − − − − ( 15 ) K_k=P_k^-H_k^T(H_kP_k^-H_k^T+V_kR_kV_k^T)^{-1}----(15) Kk=PkHkT(HkPkHkT+VkRkVkT)1(15)
  其中 R k R_k Rk为测量噪声协方差矩阵,直接取决于加速度计和磁传感器的噪声,以及被认为是噪声的其他误差源。 H k H_k Hk V k V_k Vk是相对于四元数和非线性方程h1和h2噪声的偏导数的雅可比矩阵。这些方程将四元数与估计的重力和估计的磁场联系起来。由于这些方程的非线性,需要使用扩展卡尔曼滤波器。
  最后,需要计算“后验”误差协方差矩阵Pk,用于后续的滤波器迭代:
P k = ( I + K k H k ) P k − − − − − − − − ( 16 ) P_k=(I+K_kH_k)P_k^--------(16) Pk=(I+KkHk)Pk(16)
  既然已经解释了卡尔曼滤波理论,就可以看到它是如何应用于本文所描述的系统的。
  第一个校正阶段使用加速度计的数据来校正系统状态:从估计的角度位置计算期望的重力矢量,并从加速度计的测量值中减去,得到所谓的残差。假设重力加速度|g|为常数,使用方向余弦矩阵 R n b R_n^b Rnb来计算估计的重力矢量g :
h 1 ( q k ) = g ^ = R n b [ 0 0 ∣ g ∣ ] = ∣ g ∣ [ 2 ( q 1 q 3 − q 2 q 0 ) 2 ( q 2 q 3 + q 1 q 0 ) q 0 2 − q 1 2 − q 2 2 + q 3 2 ] − − − − − ( 17 ) h_1(q_k)=\hat{g}=R_n^b\begin{bmatrix}0\\0\\|g| \end{bmatrix}=|g|\begin{bmatrix}2(q_{1}q_{3}-q_{2}q_{0})\\ 2(q_{2}q_{3}+q_{1}q_{0})\\ q^2_{0}-q^2_{1}-q^2_{2}+q^2_{3}\end{bmatrix}-----(17) h1(qk)=g^=Rnb 00g =g 2(q1q3q2q0)2(q2q3+q1q0)q02q12q22+q32 (17)
其中 R n b = [ q 0 2 + q 1 2 − q 2 2 − q 3 2 2 ( q 1 q 2 + q 3 q 0 ) 2 ( q 1 q 3 − q 2 q 0 ) 2 ( q 1 q 2 − q 3 q 0 ) q 0 2 − q 1 2 + q 2 2 − q 3 2 2 ( q 2 q 3 + q 1 q 0 ) 2 ( q 1 q 3 + q 2 q 0 ) 2 ( q 2 q 3 − q 1 q 0 ) q 0 2 − q 1 2 − q 2 2 + q 3 2 ] − − ( 18 ) R_n^b=\begin{bmatrix} q^2_{0}+q^2_{1}-q^2_{2}-q^2_{3} &2(q_{1}q_{2}+q_{3}q_{0}) &2(q_{1}q_{3}-q_{2}q_{0})\\ 2(q_{1}q_{2}-q_{3}q_{0})&q^2_{0}-q^2_{1}+q^2_{2}-q^2_{3}&2(q_{2}q_{3}+q_{1}q_{0})\\ 2(q_{1}q_{3}+q_{2}q_{0})&2(q_{2}q_{3}-q_{1}q_{0})&q^2_{0}-q^2_{1}-q^2_{2}+q^2_{3} \end{bmatrix}--(18) Rnb= q02+q12q22q322(q1q2q3q0)2(q1q3+q2q0)2(q1q2+q3q0)q02q12+q22q322(q2q3q1q0)2(q1q3q2q0)2(q2q3+q1q0)q02q12q22+q32 (18)
  当系统处于动态状态时,由于加速度计不仅测量重力,而且还测量外部加速度,因此测量的重力误差很大。因此,残差必须用卡尔曼增益 K k K_k Kk加权,该系数是根据系统噪声协方差矩阵的统计量计算出来的。为了计算卡尔曼增益,需要计算雅可比矩阵 H k 1 H_{k1} Hk1:
H k 1 = ∂ h 1 [ i ] ∂ q [ j ] = [ − 2 q 2 2 q 3 − 2 q 0 2 q 1 2 q 1 2 q 0 2 q 3 2 q 2 2 q 0 − 2 q 1 − 2 q 2 2 q 3 ] − − − − ( 19 ) H_{k1}=\frac{\partial{h_{1[i]}}}{\partial{q_{[j]}}}=\begin{bmatrix} -2q_2&2q_3&-2q_0&2q_1 \\2q_1&2q_0&2q_3&2q_2 \\2q_0&-2q_1&-2q_2&2q_3 \end{bmatrix}----(19) Hk1=q[j]h1[i]= 2q22q12q02q32q02q12q02q32q22q12q22q3 (19)
  加速度计(以及磁罗经)的噪声被认为与当前的角度位置无关。因此,雅可比矩阵 V k V_k Vk是一个单位矩阵
  通过重力矢量测量,可以只校正滚转和俯仰角。为了保证偏航角不受适用修正量的影响,将修正四元数 x ∈ 1 x_{\in1} x1的第三个矢量部分设为零:
x ∈ 1 = x ∈ 1 , 0 + x ∈ 1 , 1 + x ∈ 1 , 2 + 0 ∗ x ∈ 1 , 3 − − − ( 20 ) x_{\in 1}=x_{\in {1,0}}+x_{\in {1,1}}+x_{\in {1,2}}+0*x_{\in {1,3}}---(20) x1=x1,0+x1,1+x1,2+0x1,3(20)
  下图是卡尔曼滤波算法的流程图:

2.2 第二阶段:基于磁力计的扩展卡尔曼滤波

  滤波器的第二阶段与第一阶段类似:用相同的算法计算第二个卡尔曼增益 K k 2 K_{k2} Kk2,但使用不同的噪声协方差矩阵。归一化为1的磁场被认为只沿y轴方向,而垂直分量被忽略,因为地球磁场的强度从0.25到0.65 G不等,垂直分量与地理位置有关。在滤波器中,用下式估计磁场:
h 2 ( q k ) = m ^ = R n b [ 0 1 0 ] = [ 2 ( q 1 q 2 + q 0 q 3 ) q 0 2 − q 1 2 + q 2 2 − q 3 2 2 ( q 2 q 3 − q 1 q 0 ) ] − − − ( 21 ) h_2(q_k)=\hat{m}=R_n^b\begin{bmatrix}0\\1\\0 \end{bmatrix}=\begin{bmatrix}2(q_{1}q_{2}+q_{0}q_{3})\\ q^2_{0}-q^2_{1}+q^2_{2}-q^2_{3}\\ 2(q_{2}q_{3}-q_{1}q_{0})\end{bmatrix}---(21) h2(qk)=m^=Rnb 010 = 2(q1q2+q0q3)q02q12+q22q322(q2q3q1q0) (21)
  雅可比矩阵 H k 2 H_{k2} Hk2如下:
H k 2 = ∂ h 2 [ i ] ∂ q [ j ] = [ 2 q 3 2 q 2 2 q 1 2 q 0 2 q 0 − 2 q 1 2 q 2 − 2 q 3 − 2 q 1 − 2 q 0 2 q 3 2 q 2 ] − − − ( 22 ) H_{k2}=\frac{\partial{h_{2[i]}}}{\partial{q_{[j]}}}=\begin{bmatrix} 2q_3&2q_2&2q_1&2q_0 \\2q_0&-2q_1&2q_2&-2q_3\\-2q_1&-2q_0&2q_3&2q_2 \end{bmatrix}---(22) Hk2=q[j]h2[i]= 2q32q02q12q22q12q02q12q22q32q02q32q2 (22)
  在这种情况下,为了确保磁异常不影响横摇和俯仰估计,而只影响偏航角,校正四元数 x ∈ 2 x_{\in2} x2的前两个矢量部分被设置为零:
x ∈ 2 = x ∈ 2 , 0 + 0 ∗ x ∈ 2 , 1 + 0 ∗ x ∈ 2 , 2 + x ∈ 2 , 3 − − − ( 23 ) x_{\in 2}=x_{\in {2,0}}+0*x_{\in {2,1}}+0*x_{\in {2,2}}+x_{\in {2,3}}---(23) x2=x2,0+0x2,1+0x2,2+x2,3(23)
  要注意的是,原论文有俩公式写错了:
在这里插入图片描述

2.3 算法步骤

  1. 读取陀螺传感器,得到角速度 ω x 、 ω y 、 ω z \omega_x、\omega_y、\omega_z ωxωyωz;
  2. 计算离散时间状态转移矩阵: A k = I + 1 / 2 Ω n b n T A_k=I+1/2\Omega_{nb}^nT Ak=I+1/2ΩnbnT;
  3. 计算“先验”状态估计: x k ^ − = A K x k − 1 ^ \hat{x_k}^-=A_K\hat{x_{k-1}} xk^=AKxk1^;
  4. 计算先验噪声协方差矩阵: P k − = A k P k − 1 A k T + Q k P_k^-=A_kP_{k-1}A_k^T+Q_{k} Pk=AkPk1AkT+Qk
  5. 计算雅可比矩阵: H k 1 = [ − 2 q 2 2 q 3 − 2 q 0 2 q 1 2 q 1 2 q 0 2 q 3 2 q 2 2 q 0 − 2 q 1 − 2 q 2 2 q 3 ] H_{k1}=\begin{bmatrix} -2q_2&2q_3&-2q_0&2q_1 \\2q_1&2q_0&2q_3&2q_2 \\2q_0&-2q_1&-2q_2&2q_3 \end{bmatrix} Hk1= 2q22q12q02q32q02q12q02q32q22q12q22q3 ;
  6. 计算卡尔曼增益: K k 1 = P k − H k 1 T ( H k 1 P k − H k 1 T + V k 1 R k 1 V k 1 T ) − 1 K_{k1}=P_k^-H_{k1}^T(H_{k1}P_k^-H_{k1}^T+V_{k1}R_{k1}V_{k1}^T)^{-1} Kk1=PkHk1T(Hk1PkHk1T+Vk1Rk1Vk1T)1
  7. 读取加速度计数据 z k 1 = a x , a y , a z z_{k1}=a_x,a_y,a_z zk1=ax,ay,az;
  8. 计算 h 1 ( x k − ^ ) h_1(\hat{x_k^-}) h1(xk^) h 1 ( x k − ^ ) = [ 2 ( q 1 q 3 − q 2 q 0 ) 2 ( q 2 q 3 + q 1 q 0 ) q 0 2 − q 1 2 − q 2 2 + q 3 2 ] h_1(\hat{x_k^-})=\begin{bmatrix}2(q_{1}q_{3}-q_{2}q_{0})\\ 2(q_{2}q_{3}+q_{1}q_{0})\\ q^2_{0}-q^2_{1}-q^2_{2}+q^2_{3}\end{bmatrix} h1(xk^)= 2(q1q3q2q0)2(q2q3+q1q0)q02q12q22+q32 ;
  9. 修正系数的计算 x ∈ 1 = K k 1 ( z k 1 − h 1 ( q k − ^ ) ) x_{\in1}=K_{k1}(z_{k1}-h_1(\hat{q_k^-})) x1=Kk1(zk1h1(qk^)), x ∈ 1 , 3 = 0 x_{\in{1,3}}=0 x1,3=0(即 q 3 q_3 q3=0);
  10. 计算“后验”状态估计: x k 1 ^ = x k − ^ + x ∈ 1 \hat{x_{k1}}=\hat{x_k^-}+x_{\in1} xk1^=xk^+x1;
  11. 计算“后验”误差协方差矩阵: P k 1 = ( I − K k 1 H k 1 ) P k − P_{k1}=(I-K_{k1}H_{k1})P_k^- Pk1=(IKk1Hk1)Pk
  12. 计算雅可比矩阵: H k 2 = [ 2 q 3 2 q 2 2 q 1 2 q 0 2 q 0 − 2 q 1 2 q 2 − 2 q 3 − 2 q 1 − 2 q 0 2 q 3 2 q 2 ] H_{k2}=\begin{bmatrix} 2q_3&2q_2&2q_1&2q_0 \\2q_0&-2q_1&2q_2&-2q_3\\-2q_1&-2q_0&2q_3&2q_2 \end{bmatrix} Hk2= 2q32q02q12q22q12q02q12q22q32q02q32q2 ;
  13. 计算卡尔曼增益: K k 2 = P k − H k 2 T ( H k 2 P k − H k 2 T + V k 2 R k 2 V k 2 T ) − 1 K_{k2}=P_k^-H_{k2}^T(H_{k2}P_k^-H_{k2}^T+V_{k2}R_{k2}V_{k2}^T)^{-1} Kk2=PkHk2T(Hk2PkHk2T+Vk2Rk2Vk2T)1
  14. 读取磁力计数据 z k 2 = m x , m y , m z z_{k2}=m_x,m_y,m_z zk2=mx,my,mz;
  15. 计算 h 2 ( x k − ^ ) h_2(\hat{x_k^-}) h2(xk^) h 2 ( x k − ^ ) = [ 2 ( q 1 q 2 + q 0 q 3 ) q 0 2 − q 1 2 + q 2 2 − q 3 2 2 ( q 2 q 3 − q 1 q 0 ) ] h_2(\hat{x_k^-})=\begin{bmatrix}2(q_{1}q_{2}+q_{0}q_{3})\\ q^2_{0}-q^2_{1}+q^2_{2}-q^2_{3}\\ 2(q_{2}q_{3}-q_{1}q_{0})\end{bmatrix} h2(xk^)= 2(q1q2+q0q3)q02q12+q22q322(q2q3q1q0) ;
  16. 修正系数的计算 x ∈ 2 = K k 2 ( z k 2 − h 2 ( q k − ^ ) ) x_{\in2}=K_{k2}(z_{k2}-h_2(\hat{q_k^-})) x2=Kk2(zk2h2(qk^)), x ∈ 2 , 1 = 0 , x ∈ 2 , 2 = 0 x_{\in{2,1}}=0,x_{\in{2,2}}=0 x2,1=0,x2,2=0(即 q 1 = 0 、 q 2 = 0 q_1=0、q_2=0 q1=0q2=0);
  17. 计算“后验”状态估计: x k ^ = x k 1 ^ + x ∈ 2 \hat{x_{k}}=\hat{x_{k1}}+x_{\in2} xk^=xk1^+x2;
  18. 计算“后验”误差协方差矩阵: P k = ( I − K k 2 H k 2 ) P k 1 P_{k}=(I-K_{k2}H_{k2})P_{k1} Pk=(IKk2Hk2)Pk1

  上述步骤中,(1)-(4)为获取陀螺仪数据进行先验状态估计;(5)-(11)为算法的第一阶段;(12)-(18)为算法的第二阶段。

三、面向硬件实现的算法简化

3.1 声明

  说实话,这部分我其实没太看明白,但是要满足在MCU上实现上述算法的要求,这部分还是比较重要的,所以硬着头皮看一下。
  此外说明一点,我会把原论文通过引用的方式放在博客上,并在下面进行注解。

3.2 论文

  The first simplification consists of approximating the“a priori” error covariance P k − P_k^- Pk with the “a posteriori” error covariance Pk. This is a logical simplification if the angular position estimated before the correction can be estimated with the angular position after the correction. This assumption is valid if the filter is iterated at high frequency, with very low corrections at each iteration.

  译文:第一种简化是用“后验”误差协方差Pk近似“先验”误差协方差 P k − P_k^- Pk。如果校正前估计的角位置可以用校正后的角位置估计,这是一种逻辑简化。如果滤波器以高频率迭代,并且每次迭代的校正非常低,则此假设是有效的。

  To reduce the number of matrix multiplications, a precomputed value of Pk is used. Instead of calculating this parameter online from the noise statistics of the sensor, its value is assigned offline as a tuning parameter of the filter, assuming that similar sensors will have similar noise statistics. During normal filter operation, the initial value of Pk is greater because of the uncertain initial angular position. It then converges to lower values. The final value of P was calculated experimentally with different simulations on Matlab Simulink system model. To simulate the fact that the initial value of P is higher and to allow a fast initial position correction even if the system starts upside down, it was chosen to initialize the filter with a higher value of the Pk matrix and to scale down this value with a step function to the nominal value after the first 128 filter iterations. The same value of Pk is used for the two filter stages.

  译文:为了减少矩阵乘法的次数,使用预先计算的Pk值。假设相似的传感器具有相似的噪声统计数据,它的值作为滤波器的调优参数离线分配,而不是从传感器的噪声统计数据在线计算该参数。在正常的滤波操作中,由于初始角度位置的不确定,Pk的初始值较大。然后收敛到更低的值。在Matlab Simulink系统模型上通过不同的仿真实验计算了P的最终值。为了模拟P的初始值较高的事实,并允许即使系统倒立启动也能快速初始位置校正,选择以较高的 P k P_k Pk值初始化滤波器,并且在第一个128个过滤器迭代之后,用阶跃函数将这个值缩小到标称值。两个过滤级使用相同的Pk值。

  The following simplifications are important, because they allow eliminating all the division operations in the filter algorithm. As the matrix Pk is now a fixed parameter, it is possible to use a fixed value as the matrix determinant during matrix inversion. Moreover, it is possible to eliminate the normalization operation on the quaternion when the Kalman filter is working, because it operates as a self-normalization algorithm on the quaternion. This property was experimentally verified with many simulations on the simplified Simulink model of the system, but it does not apply, in general, for the full Kalman algorithm. With these simplifications, further matrix algebra manipulation, and a fine tuning of the operations computed from the hardware, it was possible to reduce the number of multiplications and additions by up to 60% with negligible performance degradation compared to the initial filter algorithm.

  译文:下面的简化很重要,因为它们允许消除过滤器算法中的所有除法操作。由于矩阵Pk现在是一个固定参数,所以在矩阵求逆时,可以使用固定值作为矩阵行列式。此外,当卡尔曼滤波工作时,可以消除对四元数的归一化操作,因为它是对四元数的自归一化算法。在简化的系统Simulink模型上进行了多次仿真实验,验证了这一特性,但通常不适用于完整的卡尔曼算法。通过这些简化,进一步的矩阵代数操作,以及对硬件计算的操作进行微调,与初始过滤算法相比,可以将乘法和加法的数量减少多达60%,而性能下降可以忽略不计。

  In this simplified system, the error covariance matrices Q,R1, and R2 are considered constant and have the following values:

  在此简化系统中,误差协方差矩阵Q、R1、R2被认为是常数,其值如下:
在这里插入图片描述

  The error covariance matrix Pk has the value P0 at the filter start-up and for the first 128 iterations, while its value is decreased to P1 with a step response for normal filter operation

  译文:在滤波器启动和前128次迭代时,误差协方差矩阵Pk的值为P0,而对于正常的滤波器运行,其值随着阶跃响应减小为P1。
在这里插入图片描述

四、往期回顾

课题学习(一)----静态测量
课题学习(二)----倾角和方位角的动态测量方法(基于磁场的测量系统)
课题学习(三)----倾角和方位角的动态测量方法(基于陀螺仪的测量系统)
课题学习(四)----四元数解法
课题学习(五)----阅读论文《抗差自适应滤波的导向钻具动态姿态测量方法》
课题学习(六)----安装误差校准、实验方法
课题学习(七)----粘滑运动的动态算法
课题学习(八)----卡尔曼滤波动态求解倾角、方位角
课题学习(九)----阅读《导向钻井工具姿态动态测量的自适应滤波方法》论文笔记
课题学习(十)----阅读《基于数据融合的近钻头井眼轨迹参数动态测量方法》论文笔记
课题学习(十一)----阅读《Attitude Determination with Magnetometers and Accelerometers to Use in Satellite》
课题学习(十二)----阅读《Extension of a Two-Step Calibration Methodology to Include Nonorthogonal Sensor Axes》
课题学习(十三)----阅读《Calibration of Strapdown Magnetometers in Magnetic Field Domain》论文笔记
课题学习(十四)----三轴加速度计+三轴陀螺仪传感器-ICM20602
课题学习(十五)----阅读《测斜仪旋转姿态测量信号处理方法》论文
课题学习(十六)----阅读《Continuous Wellbore Surveying While Drilling Utilizing MEMS Gyroscopes Based…》论文
课题学习(十七)----姿态更新的四元数算法总结
课题学习(十八)----捷联测试电路设计与代码实现(基于MPU6050和QMC5883L)
课题学习(十九)----Allan方差:陀螺仪噪声分析
课题学习(二十)----阅读《近钻头井斜动态测量重力加速度信号提取方法研究》论文
课题学习(二十一)----姿态更新的四元数算法推导

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

致虚守静~归根复命

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值