组合导航ESKF关键知识点:姿态计算&观测校正
1.姿态计算
方法: 等效旋转矢量为小量时才可以使用加减法;四元数和姿态阵采用乘法; 欧拉角只有物理意义不直接用于计算。
ESKF中状态量的建立使用等效旋转矢量;ESKF 的prediction和update过程使用等效旋转矢量做运算;
1.1 progation过程姿态变化量采用等效旋转矢量计算
因为短时间内姿态变化量是小量,可以与陀螺转动积分的结果,在delta_t小段时间内做代数运算。以初始时刻姿态为基准,求出姿态变化量等效旋转矢量,转化为姿态变化量四元数,求出新时刻姿态先验值。
ϕk+1=θk+1+112θk×θk+1Δqk+1k=rotateVector2quaternion(ϕk)qk+1nav_prior=qk∗Δqk+1k
\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=qk+1_obsnav∗inverse(qk+1nav_prior)ϕk+1_obs=quaterniond2rotationVector(Δ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_post \phi_{k+1}\_{post} ϕk+1_post
1.4correction过程姿态的校正采用四元数或者姿态阵计算
Δq_post=rotateVector2quaternion(ϕk_post)qk+1=Δq_post∗qk+1nav_prior \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是,按照公式得出的姿态量应该等于qk+1nav_obs q^{nav}_{k+1}\_{obs} qk+1nav_obs
当增益系数为1时,可以看做如下公式成立。
Δq_post=Δq
\Delta{q}\_{post} = \Delta{q}
Δq_post=Δq
以下四种情况,就可以凑出姿态的观测量。
2.1 观测与校正配合1
Δq=qk+1_obsnav∗inverse(qk+1nav_prior)qk+1=Δq_post∗qk+1_prior \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=inverse(qk+1_obsnav)∗qk+1nav_priorqk+1=qk+1_prior∗inverse(Δq_post) \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=qk+1nav_prior∗inverse(qk+1_obsnav)qk+1=inverse(Δq_post)∗qk+1_prior \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=inverse(qk+1nav_prior)∗qk+1_obsnavqk+1=qk+1_prior∗Δq_post \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
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)