一、状态方程
状态变量选取为姿态四元数
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
k−1
q0q1q2q3
k−1
所以状态转移矩阵为
Φ
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/k−1=I+2Δt
0ωnbxbωnbybωnbzb−ωnbxb0−ωnbzbωnbyb−ωnbybωnbzb0−ωnbxb−ωnbzb−ωnbybωnbxb0
k−1
对于系统噪声
W
k
−
1
W_{k-1}
Wk−1可以简单考虑为系统噪声直接作用在状态
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
k−1
q0q1q2q3
k−1+Wk−1
事实上角速度
ω
n
b
b
\omega_{nb}^b
ωnbb的误差
Δ
ω
\Delta\omega
Δω构成了系统噪声,有兴趣可以自行推导其噪声输入矩阵
Γ
k
−
1
\Gamma_{k-1}
Γk−1。
二、测量方程
选取测量值为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(q1q3−q0q2)2(q2q3+q0q1)q02−q12−q22+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(q1q3−q0q2)2(q2q3+q0q1)q02−q12−q22+q32
k−1+g∗
−2q22q12q02q32q0−2q1−2q02q3−2q22q12q22q3
(Xk−X^k−1)+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′=[C32−C310],否则构造
C
2
′
=
[
0
C
33
−
C
32
]
C_2'=\begin{bmatrix} 0&C_{33}&-C_{32}\end{bmatrix}
C2′=[0C33−C32],归一化得到
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
<1E−7,
P
11
P_{11}
P11、
P
22
P_{22}
P22、
P
33
P_{33}
P33的初值可以设置为
1
E
−
2
1E-2
1E−2,在滤波过程中会收敛。
四、
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。
mpu6050姿态解算与卡尔曼滤波(4)姿态解算
于 2024-04-17 22:53:59 首次发布