mpu6050姿态解算与卡尔曼滤波(4)姿态解算

一、状态方程
状态变量选取为姿态四元数 X = [ q 0 , q 1 , q 2 , q 3 ] T X=[q_0,q_1,q_2,q_3]^T X=[q0,q1,q2,q3]T。则根据四元数微分方程
[ q ˙ 0 q ˙ 1 q ˙ 2 q ˙ 3 ] = 1 2 [ 0 − ω n b x b − ω n b y b − ω n b z b ω n b x b 0 ω n b z b − ω n b y b ω n b y b − ω n b z b 0 ω n b x b ω n b z b ω n b y b − ω n b x b 0 ] [ q 0 q 1 q 2 q 3 ] \begin{bmatrix}\dot q_0\\\dot q_1\\\dot q_2\\\dot q_3\end{bmatrix}=\frac{1}{2} \begin{bmatrix} 0&-\omega_{nbx}^b&-\omega_{nby}^b&-\omega_{nbz}^b\\ \omega_{nbx}^b&0&\omega_{nbz}^b&-\omega_{nby}^b\\ \omega_{nby}^b&-\omega_{nbz}^b&0&\omega_{nbx}^b\\ \omega_{nbz}^b&\omega_{nby}^b&-\omega_{nbx}^b&0\\ \end{bmatrix}\begin{bmatrix}q_0\\q_1\\q_2\\q_3\end{bmatrix} q˙0q˙1q˙2q˙3 =21 0ωnbxbωnbybωnbzbωnbxb0ωnbzbωnbybωnbybωnbzb0ωnbxbωnbzbωnbybωnbxb0 q0q1q2q3
取一阶近似
[ q 0 q 1 q 2 q 3 ] k = ( I + Δ t 2 [ 0 − ω n b x b − ω n b y b − ω n b z b ω n b x b 0 ω n b z b − ω n b y b ω n b y b − ω n b z b 0 ω n b x b ω n b z b ω n b y b − ω n b x b 0 ] k − 1 ) [ q 0 q 1 q 2 q 3 ] k − 1 \begin{bmatrix} q_0\\ q_1\\ q_2\\ q_3\end{bmatrix}_{k}= \left( I+\frac{\Delta t}{2} \begin{bmatrix} 0&-\omega_{nbx}^b&-\omega_{nby}^b&-\omega_{nbz}^b\\ \omega_{nbx}^b&0&\omega_{nbz}^b&-\omega_{nby}^b\\ \omega_{nby}^b&-\omega_{nbz}^b&0&\omega_{nbx}^b\\ \omega_{nbz}^b&\omega_{nby}^b&-\omega_{nbx}^b&0\\ \end{bmatrix}_{k-1} \right)\begin{bmatrix}q_0\\q_1\\q_2\\q_3\end{bmatrix}_{k-1} q0q1q2q3 k= I+2Δt 0ωnbxbωnbybωnbzbωnbxb0ωnbzbωnbybωnbybωnbzb0ωnbxbωnbzbωnbybωnbxb0 k1 q0q1q2q3 k1
所以状态转移矩阵为
Φ k / k − 1 = I + Δ t 2 [ 0 − ω n b x b − ω n b y b − ω n b z b ω n b x b 0 ω n b z b − ω n b y b ω n b y b − ω n b z b 0 ω n b x b ω n b z b ω n b y b − ω n b x b 0 ] k − 1 \Phi_{k/k-1}=I+\frac{\Delta t}{2} \begin{bmatrix} 0&-\omega_{nbx}^b&-\omega_{nby}^b&-\omega_{nbz}^b\\ \omega_{nbx}^b&0&\omega_{nbz}^b&-\omega_{nby}^b\\ \omega_{nby}^b&-\omega_{nbz}^b&0&\omega_{nbx}^b\\ \omega_{nbz}^b&\omega_{nby}^b&-\omega_{nbx}^b&0\\ \end{bmatrix}_{k-1} Φk/k1=I+2Δt 0ωnbxbωnbybωnbzbωnbxb0ωnbzbωnbybωnbybωnbzb0ωnbxbωnbzbωnbybωnbxb0 k1
对于系统噪声 W k − 1 W_{k-1} Wk1可以简单考虑为系统噪声直接作用在状态 X X X上,也即
[ q 0 q 1 q 2 q 3 ] k = ( I + Δ t 2 [ 0 − ω n b x b − ω n b y b − ω n b z b ω n b x b 0 ω n b z b − ω n b y b ω n b y b − ω n b z b 0 ω n b x b ω n b z b ω n b y b − ω n b x b 0 ] k − 1 ) [ q 0 q 1 q 2 q 3 ] k − 1 + W k − 1 \begin{bmatrix} q_0\\ q_1\\ q_2\\ q_3\end{bmatrix}_{k}= \left( I+\frac{\Delta t}{2} \begin{bmatrix} 0&-\omega_{nbx}^b&-\omega_{nby}^b&-\omega_{nbz}^b\\ \omega_{nbx}^b&0&\omega_{nbz}^b&-\omega_{nby}^b\\ \omega_{nby}^b&-\omega_{nbz}^b&0&\omega_{nbx}^b\\ \omega_{nbz}^b&\omega_{nby}^b&-\omega_{nbx}^b&0\\ \end{bmatrix}_{k-1} \right)\begin{bmatrix}q_0\\q_1\\q_2\\q_3\end{bmatrix}_{k-1}+W_{k-1} q0q1q2q3 k= I+2Δt 0ωnbxbωnbybωnbzbωnbxb0ωnbzbωnbybωnbybωnbzb0ωnbxbωnbzbωnbybωnbxb0 k1 q0q1q2q3 k1+Wk1
事实上角速度 ω n b b \omega_{nb}^b ωnbb的误差 Δ ω \Delta\omega Δω构成了系统噪声,有兴趣可以自行推导其噪声输入矩阵 Γ k − 1 \Gamma_{k-1} Γk1
二、测量方程
选取测量值为mpu6050测量得到的加速度 Z k = a Z_k=a Zk=a,在mpu6050自身无运动加速度的情况下其测量值
a = C n b ∗ [ 0   0   g ] T a=C_n^b*\begin{bmatrix}0\ 0\ g \end{bmatrix}^T a=Cnb[0 0 g]T
根据四元数与姿态矩阵的转换,得到
[ a x a y a z ] = g [ 2 ( q 1 q 3 − q 0 q 2 ) 2 ( q 2 q 3 + q 0 q 1 ) q 0 2 − q 1 2 − q 2 2 + q 3 2 ] \begin{bmatrix} a_x\\a_y\\a_z\end{bmatrix}=g\begin{bmatrix} 2(q_1q_3-q_0q_2)\\2(q_2q_3+q_0q_1)\\q_0^2-q_1^2-q_2^2+q_3^2\end{bmatrix} axayaz =g 2(q1q3q0q2)2(q2q3+q0q1)q02q12q22+q32
线性化和离散化
[ a x a y a z ] k = g [ 2 ( q 1 q 3 − q 0 q 2 ) 2 ( q 2 q 3 + q 0 q 1 ) q 0 2 − q 1 2 − q 2 2 + q 3 2 ] k − 1 + g ∗ [ − 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 ] ( X k − X ^ k − 1 ) + V k \begin{bmatrix} a_x\\a_y\\a_z\end{bmatrix}_{k}=g\begin{bmatrix} 2(q_1q_3-q_0q_2)\\2(q_2q_3+q_0q_1)\\q_0^2-q_1^2-q_2^2+q_3^2\end{bmatrix}_{k-1}+g*\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}\left( X_k-\hat X_{k-1}\right)+V_k axayaz k=g 2(q1q3q0q2)2(q2q3+q0q1)q02q12q22+q32 k1+g 2q22q12q02q32q02q12q02q32q22q12q22q3 (XkX^k1)+Vk
到这里我们就获得了线性化的状态方程和测量方程了,按照博客(2)http://t.csdnimg.cn/EYpJ7里标准卡尔曼滤波的公式即可进行滤波,即可获得融合陀螺和加速度计的姿态四元数了。
三、 X X X P P P的初始化
通常情况下,卡尔曼滤波器是收敛的,因此滤波器的初值 X X X P P P可以设置的比较随意。但是对于本文设计的这个滤波器,测量值 Z k Z_k Zk只包含姿态的一部分信息,因此滤波器状态 X X X中必定有发散的部分。简单假设当 X ≈ [ 1 q 1 q 2 q 3 ] T X\approx\begin{bmatrix} 1&q_1&q_2&q_3\end{bmatrix}^T X[1q1q2q3]T时, q 1 q_1 q1 q 2 q_2 q2即对应俯仰和滚转角,而 q 3 q_3 q3对应方位角,在滤波过程中 q 3 q_3 q3是发散的。尽管滤波器估计出的姿态中方位角是发散的,我们仍然可以取初始化时的方位角为0,这样滤波器估计出的方位角就是相对初始时的方位,在短时间内它仍是可信赖的信息。
对于 X X X的初始化可以参考严恭敏老师的《捷联惯导算法与组合导航原理》7.5.4节。以下内容均摘抄自该部分。
记姿态阵 C b n C_b^n Cbn的三个行向量为 C 1 C_1 C1 C 2 C_2 C2 C 3 C_3 C3,即
C b n = [ C 1 C 2 C 3 ] C_b^n=\begin{bmatrix} C_1\\C_2\\C_3\end{bmatrix} Cbn= C1C2C3
根据加速度测量值 a = [ a x a y a z ] T a=\begin{bmatrix} a_x&a_y&a_z\end{bmatrix}^T a=[axayaz]T构造 C b n C_b^n Cbn的一种简便方法如下:
(1)构造 C 3 = [ C 31 C 32 C 33 ] = [ a x a y a z ] / ∣ a ∣ C_3= \begin{bmatrix} C_{31}&C_{32}&C_{33}\end{bmatrix}= \begin{bmatrix} a_x&a_y&a_z\end{bmatrix}/|a| C3=[C31C32C33]=[axayaz]/∣a;
(2)如果 ∣ C 31 ∣ > 0.5 \left| C_{31}\right|>0.5 C31>0.5,则构造 C 2 ′ = [ C 32 − C 31 0 ] C_2'=\begin{bmatrix} C_{32}&-C_{31}&0\end{bmatrix} C2=[C32C310],否则构造 C 2 ′ = [ 0 C 33 − C 32 ] C_2'=\begin{bmatrix} 0&C_{33}&-C_{32}\end{bmatrix} C2=[0C33C32],归一化得到 C 2 = C 2 ′ / ∣ C 2 ′ ∣ C_2=C_2'/\left| C_2'\right| C2=C2/C2
(3)构造 C 1 = C 2 × C 3 C_1=C_2×C_3 C1=C2×C3
这样就可以得到初始姿态矩阵 C b n C_b^n Cbn,然后可以得到初始姿态四元数 Q Q Q,作为滤波器状态 X X X的初值。
对于 P P P阵,由于初始方位角被设定为0,它是我们极其确定的一个值,因此 P 44 P_{44} P44的初值应当被设置为很小,一般的可以取 < 1 E − 7 <1E-7 <1E7 P 11 P_{11} P11 P 22 P_{22} P22 P 33 P_{33} P33的初值可以设置为 1 E − 2 1E-2 1E2,在滤波过程中会收敛。
四、 Q Q Q R R R的设置
对于卡尔曼滤波器,系统噪声 Q Q Q和测量噪声 R R R至关重要。
首先考虑 R R R,由于测量量选取的就是加速度计测量的加速度,因此 R R R就是加速度测量误差 Δ a \Delta a Δa的协方差。考虑三轴加速度计为互相独立的测量,因此 R R R为对角矩阵。对于mpu6050这样的低精度imu,可以直接取静态情况下各轴加速度计测量值的3倍标准差的平方作为 R R R的对角线元素。
对于 Q Q Q阵,陀螺的测量误差构成了系统噪声。同样取静态情况下陀螺测量值的3倍标准差的平方作为陀螺测量的方差阵,再乘上滤波周期 Δ t \Delta t Δt的平方,即可作为 Q Q Q的对角线元素。然后观察滤波器的运行情况调整 Q Q Q。调整原则是如果想使滤波器更多的信赖陀螺测量则减小 Q Q Q,如果想使滤波器更多的信赖加表测量则增大 Q Q Q

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值