1.姿态计算
方法: 等效旋转矢量为小量时才可以使用加减法;四元数和姿态阵采用乘法; 欧拉角只有物理意义不直接用于计算。
ESKF中状态量的建立使用等效旋转矢量;ESKF 的prediction和update过程使用等效旋转矢量做运算;
1.1 progation过程姿态变化量采用等效旋转矢量计算
因为短时间内姿态变化量是小量,可以与陀螺转动积分的结果,在delta_t小段时间内做代数运算。以初始时刻姿态为基准,求出姿态变化量等效旋转矢量,转化为姿态变化量四元数,求出新时刻姿态先验值。
ϕ
k
+
1
=
θ
k
+
1
+
1
12
θ
k
×
θ
k
+
1
Δ
q
k
+
1
k
=
r
o
t
a
t
e
V
e
c
t
o
r
2
q
u
a
t
e
r
n
i
o
n
(
ϕ
k
)
q
k
+
1
n
a
v
_
p
r
i
o
r
=
q
k
∗
Δ
q
k
+
1
k
\phi_{k+1}=\theta_{k+1}+\frac{1}{12}\theta_{k}\times\theta_{k+1} \newline \Delta{q^k_{k+1}} = rotateVector2quaternion(\phi_k) \newline q^{nav}_{k+1}\_prior = q_{k}*\Delta{q^k_{k+1}}
ϕk+1=θk+1+121θk×θk+1Δqk+1k=rotateVector2quaternion(ϕk)qk+1nav_prior=qk∗Δqk+1k
1.2 observation过程姿态的误差量使用四元数或者姿态阵计算
因为观测的姿态和递推出来的姿态都是大量,不可以直接转为等效旋转矢量做加减法。采用四元数或者等效旋转阵相乘求出姿态误差量以后才能转化为姿态误差量等效旋转矢量。
Δ
q
=
q
k
+
1
_
o
b
s
n
a
v
∗
i
n
v
e
r
s
e
(
q
k
+
1
n
a
v
_
p
r
i
o
r
)
ϕ
k
+
1
_
o
b
s
=
q
u
a
t
e
r
n
i
o
n
d
2
r
o
t
a
t
i
o
n
V
e
c
t
o
r
(
Δ
q
)
\Delta{q} = q^{nav}_{k+1\_obs}*inverse(q^{nav}_{k+1}\_prior) \newline \phi_{k+1}\_{obs}=quaterniond2rotationVector(\Delta{q})
Δq=qk+1_obsnav∗inverse(qk+1nav_prior)ϕk+1_obs=quaterniond2rotationVector(Δq)
1.3 ESKF prediction和updation全用等效旋转矢量运算
ϕ k + 1 _ p o s t \phi_{k+1}\_{post} ϕk+1_post
1.4correction过程姿态的校正采用四元数或者姿态阵计算
Δ q _ p o s t = r o t a t e V e c t o r 2 q u a t e r n i o n ( ϕ k _ p o s t ) q k + 1 = Δ q _ p o s t ∗ q k + 1 n a v _ p r i o r \Delta{q} \_{post}= rotateVector2quaternion(\phi_k\_{post}) \newline q_{k+1} = \Delta{q\_{post}} * q^{nav}_{k+1}\_{prior} Δq_post=rotateVector2quaternion(ϕk_post)qk+1=Δq_post∗qk+1nav_prior
2.观测与校正配合
观测误差姿态量的构建与最后校正的形式密切相关,但是记住一个原则就不会错:令增益系数K=1是,按照公式得出的姿态量应该等于
q
k
+
1
n
a
v
_
o
b
s
q^{nav}_{k+1}\_{obs}
qk+1nav_obs
当增益系数为1时,可以看做如下公式成立。
Δ
q
_
p
o
s
t
=
Δ
q
\Delta{q}\_{post} = \Delta{q}
Δq_post=Δq
以下四种情况,就可以凑出姿态的观测量。
2.1 观测与校正配合1
Δ q = q k + 1 _ o b s n a v ∗ i n v e r s e ( q k + 1 n a v _ p r i o r ) q k + 1 = Δ q _ p o s t ∗ q k + 1 _ p r i o r \Delta{q} = q^{nav}_{k+1\_obs}*inverse(q^{nav}_{k+1}\_prior) \newline q_{k+1} = \Delta{q\_{post}} * q_{k+1}\_{prior} Δq=qk+1_obsnav∗inverse(qk+1nav_prior)qk+1=Δq_post∗qk+1_prior
2.2观测与校正配合2
Δ q = i n v e r s e ( q k + 1 _ o b s n a v ) ∗ q k + 1 n a v _ p r i o r q k + 1 = q k + 1 _ p r i o r ∗ i n v e r s e ( Δ q _ p o s t ) \Delta{q} = inverse(q^{nav}_{k+1\_obs})*q^{nav}_{k+1}\_prior \newline q_{k+1} = q_{k+1}\_{prior}*inverse(\Delta{q\_{post}}) Δq=inverse(qk+1_obsnav)∗qk+1nav_priorqk+1=qk+1_prior∗inverse(Δq_post)
2.3 观测与校正配合3
Δ q = q k + 1 n a v _ p r i o r ∗ i n v e r s e ( q k + 1 _ o b s n a v ) q k + 1 = i n v e r s e ( Δ q _ p o s t ) ∗ q k + 1 _ p r i o r \Delta{q} = q^{nav}_{k+1}\_prior*inverse(q^{nav}_{k+1\_obs}) \newline q_{k+1} = inverse(\Delta{q\_{post}}) * q_{k+1}\_{prior} Δq=qk+1nav_prior∗inverse(qk+1_obsnav)qk+1=inverse(Δq_post)∗qk+1_prior
2.4 观测与校正配合4
Δ q = i n v e r s e ( q k + 1 n a v _ p r i o r ) ∗ q k + 1 _ o b s n a v q k + 1 = q k + 1 _ p r i o r ∗ Δ q _ p o s t \Delta{q} = inverse(q^{nav}_{k+1}\_prior)*q^{nav}_{k+1\_obs} \newline q_{k+1} = q_{k+1}\_{prior} * \Delta{q\_{post}} Δq=inverse(qk+1nav_prior)∗qk+1_obsnavqk+1=qk+1_prior∗Δq_post