第二十一篇 [IMU+RTK+WHEEL]组合定位18维状态设计

参考这篇论文第四章
1. 字符含义
bbb: 载体坐标系
iii: 惯性坐标系
DDD:odometer
nnn:导航坐标系(东北天坐标系)
mmm:IMU坐标系
CbnC_b^nCbn:表示b到n旋转矩阵或者是姿态矩阵
qbnq_b^nqbn:表示b到n旋转四元素
wnbbw_{nb}^bwnbb:表示b系相对n系的旋转在b系中的表达
2. 系统建模
状态量:位置(东北天)误差、速度误差、姿态误差(失准角)、陀螺仪零偏误差、加速计零偏误差、安装误差角误差(heading,pitch)、轮速计尺度因子误差,共18维。
[δpx,δpy,δpz,δvx,δvy,δvz,ϕx,ϕy,ϕz,δ∇x,δ∇y,δ∇z,δϵx,δϵy,δϵz,δαy,δαz,δs]
[\delta p_x, \delta p_y, \delta p_z, \delta v_x, \delta v_y, \delta v_z, \phi_x,\phi_y,\phi_z, \delta\nabla_x, \delta\nabla_y , \delta \nabla_z, \delta\epsilon_x, \delta\epsilon_y, \delta \epsilon_z, \delta \alpha_y, \delta \alpha_z, \delta s]
[δpx,δpy,δpz,δvx,δvy,δvz,ϕx,ϕy,ϕz,δ∇x,δ∇y,δ∇z,δϵx,δϵy,δϵz,δαy,δαz,δs]
观测量1:GPS位置、速度和航向。
观测量2:[轮速,0,0]。采用非完整性约束。
特别注意1:此处失准角的定义为左扰动模型,定义为真值n系旋转到计算机推算得到n’系之间的旋转角度。必须与后面的correct相对应。因为姿态角计算不是简单的加减法。
Cn′n=I+[ϕ]×
C_{n'}^n=I+[\phi]_\times
Cn′n=I+[ϕ]×
因此加上右扰动的姿态求导如下式,这个式子是后面求误差传播方程的基础。
δCbn=Cnn′∗Cbn−Cbn=−[ϕ]×Cbn
\delta C_b^n=C_n^{n'}*C_b^n-C_b^n=-[\phi]_\times C_b^n
δCbn=Cnn′∗Cbn−Cbn=−[ϕ]×Cbn
特别注意2:此处安装角的失准角使用了右扰动模型,定义为真值m系旋转到计算机推算得到的m’系之间的旋转角。必须与后面的correct相对应。因为姿态角计算不是简单的加减法。
Cm′m=I+[δα]×
C_{m'}^m=I+[\delta \alpha]_\times
Cm′m=I+[δα]×
因此加上左扰动的姿态求导如下式,这个式子是后面求误差传播方程的基础。
δCmb=Cmb∗Cm′m−Cmb=Cmb∗[δα]×
\delta C_m^b=C_m^b*C_{m'}^m-C_m^b=C_m^b*[\delta \alpha]_\times
δCmb=Cmb∗Cm′m−Cmb=Cmb∗[δα]×
特别注意3
使用eigen求等效旋转向量时
- IMU测量了一个bkb_kbk系到bk+1b_{k+1}bk+1系的角度旋转量Δθ\Delta \thetaΔθ,则将bk+1b_{k+1}bk+1系的坐标转到bkb_kbk系的坐标的等效旋转矢量可以Eigen::AngleAxisd(theta.norm(), theta.normalized()).toRotationMatrix()求出。
- 1中所述也可以和失准角联系起来。
3 状态微分方程
C˙bn=Cbn∗[ωnbb×]v˙n=Cbn∗fb+gnp˙n=vn \dot C_b^n = C_b^n *[\omega_{nb}^b\times] \\ \dot v^n=C_b^n*f^b+g^n \\ \dot p^n = v^n C˙bn=Cbn∗[ωnbb×]v˙n=Cbn∗fb+gnp˙n=vn
4. 误差传播方程
4.1 姿态误差传播方程
推导过程从教科书中15维姿态误差微分方程推出。
ϕ˙n=−Cbn∗δωnbbωnbb=Cmb∗(ωnmm−ϵnmm)δωnbb=δCmb∗(ωnmm−ϵnmm)−Cmb∗δϵnmmδωnbb=Cmb∗[δα]∗(ωnmm−ϵnmm)−Cmb∗δϵnmm
\dot \phi^n = -C_b^n *\delta \omega_{nb}^b \\
\omega_{nb}^b = C_m^b*(\omega_{nm}^m-\epsilon_{nm}^m) \\
\delta\omega_{nb}^b = \delta C_m^b* (\omega_{nm}^m-\epsilon_{nm}^m)-C_m^b* \delta\epsilon_{nm}^m\\
\delta\omega_{nb}^b = C_m^b*[\delta \alpha]*( \omega_{nm}^m-\epsilon_{nm}^m)-C_m^b* \delta\epsilon_{nm}^m
ϕ˙n=−Cbn∗δωnbbωnbb=Cmb∗(ωnmm−ϵnmm)δωnbb=δCmb∗(ωnmm−ϵnmm)−Cmb∗δϵnmmδωnbb=Cmb∗[δα]∗(ωnmm−ϵnmm)−Cmb∗δϵnmm
因此:
ϕ˙n=Cbn∗Cmb∗[ωnmm−ϵnmm]∗δα+Cbn∗Cmb∗δϵnmm
\dot \phi^n = C_b^n *C_m^b* [\omega_{nm}^m-\epsilon_{nm}^m]* \delta \alpha +C_b^n *C_m^b*\delta\epsilon_{nm}^m \\
ϕ˙n=Cbn∗Cmb∗[ωnmm−ϵnmm]∗δα+Cbn∗Cmb∗δϵnmm
4.2 速度误差传播方程
推导过程从教科书中15维姿态误差微分方程推出。
δv˙n=Cbn∗fb×ϕn+Cbn∗δfbfb=Cmb∗(fm−∇m)δfb=δCmb∗(fm−∇m)−Cmb∗δ∇mδfb=Cmb∗[δα]∗(fm−∇m)−Cmb∗δ∇m
\delta \dot v^n=C_b^n*f^b \times \phi^n + C_b^n *\delta f^b\\
f^b=C_m^b*( f^m-\nabla^m) \\
\delta f^b=\delta C_m^b* (f^m-\nabla^m)-C_m^b* \delta \nabla^m\\
\delta f^b= C_m^b*[\delta \alpha] * (f^m-\nabla^m)-C_m^b* \delta \nabla^m
δv˙n=Cbn∗fb×ϕn+Cbn∗δfbfb=Cmb∗(fm−∇m)δfb=δCmb∗(fm−∇m)−Cmb∗δ∇mδfb=Cmb∗[δα]∗(fm−∇m)−Cmb∗δ∇m
因此:
δv˙n=Cbn∗Cmb∗(fm−∇m)×ϕn−Cbn∗Cmb∗[fm−∇m]∗δα−Cbn∗Cmb∗δ∇nmm
\delta \dot v^n=C_b^n*C_m^b*(f^m-\nabla^m) \times \phi^n - C_b^n * C_m^b* [f^m-\nabla^m]*\delta \alpha - C_b^n *C_m^b* \delta\nabla_{nm}^m \\
δv˙n=Cbn∗Cmb∗(fm−∇m)×ϕn−Cbn∗Cmb∗[fm−∇m]∗δα−Cbn∗Cmb∗δ∇nmm
4.3 位置误差传播方程
推导过程从教科书中15维姿态误差微分方程推出。
δp˙n=δvn
\delta \dot p^n = \delta v^n
δp˙n=δvn
5.误差传播矩阵
X˙=FX+GW
\dot X=FX+GW
X˙=FX+GW
令
Fϕ=Cbn∗Cmb∗[ωnmm−ϵnmm]Fϕ=[Fϕ(:,2:3);03×1]Fv=−Cbn∗Cmb∗[fm−∇nmm]Fv=[Fv(:,2:3);03×1]
F_\phi=C_b^n * C_m^b *[ \omega_{nm}^m-\epsilon_{nm}^m]\\
F_\phi=[F_\phi(:,2:3);0_{3\times1}]\\
F_v=- C_b^n * C_m^b * [f^m-\nabla_{nm}^m]\\
F_v=[F_v(:,2:3);0_{3\times1}]\\
Fϕ=Cbn∗Cmb∗[ωnmm−ϵnmm]Fϕ=[Fϕ(:,2:3);03×1]Fv=−Cbn∗Cmb∗[fm−∇nmm]Fv=[Fv(:,2:3);03×1]
5.1 误差传播矩阵F
F=[03×3I3×303×303×303×303×303×303×3[CbnCmbfm]CbnCmb03×3Fv03×303×303×303×3−CbnCmbFϕ03×303×303×303×303×303×303×303×303×303×303×303×303×303×303×303×303×303×3] F = \begin{bmatrix} 0_{3\times3} & I_{3 \times 3} & 0_{3\times3} & 0_{3\times3} & 0_{3\times3} & 0_{3\times3} \\ 0_{3\times3} & 0_{3\times3} &[C_b^n C_m^bf^m] & C_b^n C_m^b & 0_{3\times3} & F_v\\ 0_{3\times3} & 0_{3\times3} & 0_{3\times3} & 0_{3\times3} & -C_b^n C_m^b & F_\phi\\ 0_{3\times3} & 0_{3\times3} & 0_{3\times3} & 0_{3\times3} & 0_{3\times3} & 0_{3\times3} \\ 0_{3\times3} & 0_{3\times3} & 0_{3\times3} & 0_{3\times3} & 0_{3\times3} & 0_{3\times3} \\ 0_{3\times3} & 0_{3\times3} & 0_{3\times3} & 0_{3\times3} & 0_{3\times3} & 0_{3\times3} \\ \end{bmatrix} F=03×303×303×303×303×303×3I3×303×303×303×303×303×303×3[CbnCmbfm]03×303×303×303×303×3CbnCmb03×303×303×303×303×303×3−CbnCmb03×303×303×303×3FvFϕ03×303×303×3
5.2 噪声分配矩阵G
系统噪声输入
ωnoise=[wawalk_xwawalk_ywawalk_zwgwalk_xwgwalk_ywgwalk_zwaoffset_xwaoffset_ywoffset_zwgoffset_xwgoffset_ywgoffset_z]
\omega_{noise}=
\begin{bmatrix}
wa_{walk\_x} &wa_{walk\_y} &wa_{walk\_z} & wg_{walk\_x} &wg_{walk\_y} &wg_{walk\_z} &
wa_{offset\_x} &wa_{offset\_y} &w_{offset\_z}& wg_{offset\_x} &wg_{offset\_y} &wg_{offset\_z}
\end{bmatrix}
ωnoise=[wawalk_xwawalk_ywawalk_zwgwalk_xwgwalk_ywgwalk_zwaoffset_xwaoffset_ywoffset_zwgoffset_xwgoffset_ywgoffset_z]
噪声分配矩阵
G=[03×303×303×303×303×1Cbn03×303×303×303×103×3Cbn03×303×303×103×303×3E3×303×303×103×303×303×3E3×303×103×303×303×303×303×1]
G=
\begin{bmatrix}
0_{3\times3} & 0_{3\times3} & 0_{3\times3} & 0_{3\times3} & 0_{3\times1} \\
C_b^n & 0_{3\times3} & 0_{3\times3} & 0_{3\times3} & 0_{3\times1} \\
0_{3\times3} & C_b^n & 0_{3\times3} & 0_{3\times3} & 0_{3\times1} \\
0_{3\times3} & 0_{3\times3} & E_{3\times3} & 0_{3\times3} & 0_{3\times1} \\
0_{3\times3} & 0_{3\times3} &0_{3\times3} & E_{3\times3} & 0_{3\times1} \\
0_{3\times3} & 0_{3\times3} & 0_{3\times3} & 0_{3\times3} & 0_{3\times1}
\end{bmatrix}
G=03×3Cbn03×303×303×303×303×303×3Cbn03×303×303×303×303×303×3E3×303×303×303×303×303×303×3E3×303×303×103×103×103×103×103×1
6.误差传播离散化
Xk+1=Φk+1,kXk+Γk+1,kW
X_{k+1}=\Phi_{k+1,k}X_{k}+\Gamma_{k+1,k}W
Xk+1=Φk+1,kXk+Γk+1,kW
其中
Φk+1,k=1+F∗TΓk+1,k=G∗T
\Phi_{k+1,k} = 1+F*T \\
\Gamma_{k+1,k} = G*T
Φk+1,k=1+F∗TΓk+1,k=G∗T
7.状态更新方程
第一步对IMU测量去零偏
funbiasm=fm−fbiasgunbiasm=gm−gbias
f_{unbias}^m=f^m-f_{bias}\\
g_{unbias}^m=g^m-g_{bias}
funbiasm=fm−fbiasgunbiasm=gm−gbias
第二步对校正安装误差角
fb=Cmb∗funbiasmgb=Cmb∗gunbiasm
f^b = C_m^b*f_{unbias}^m\\
g^b = C_m^b*g_{unbias}^m
fb=Cmb∗funbiasmgb=Cmb∗gunbiasm
第三步进行状态量更新
p(k+1)=p(k)+v(k)∗ΔT+12∗(Cbn∗fb+gn)T2v(k+1)=v(k)+(Cbn∗fb+gn)∗TCb(k+1)n=Cb(k)n∗Cb(k+1)b(k)=Cb(k)n∗C(Δθ)aoffset_k+1=aoffset_kwoffset_k+1=woffset_kαk+1=αksk+1=sk
p(k+1) = p(k) + v(k)*\Delta T + \frac {1}{2}*(C_b^n*f^b+g^n) T^2\\
v(k+1) = v(k) + (C_b^n*f^b+g^n)* T\\
C_{b(k+1)}^n=C_{b(k)}^n*C_{b(k+1)}^{b(k)}=C_{b(k)}^n*C(\Delta \theta)\\
a_{offset\_k+1}=a_{offset\_k}\\
w_{offset\_k+1}=w_{offset\_k}\\
\alpha_{k+1}=\alpha_{k}\\
s_{k+1}=s_{k}
p(k+1)=p(k)+v(k)∗ΔT+21∗(Cbn∗fb+gn)T2v(k+1)=v(k)+(Cbn∗fb+gn)∗TCb(k+1)n=Cb(k)n∗Cb(k+1)b(k)=Cb(k)n∗C(Δθ)aoffset_k+1=aoffset_kwoffset_k+1=woffset_kαk+1=αksk+1=sk
8. 观测方程
观测量采用序贯处理的办法
8.1 GPS 的观测如下
δpobs=δ(pgps−p(k))=−E3∗3∗δpδvobs=δ(vgps−v(k))=−E3∗3∗δvδyawobs=δ(yawgps−yaw(k))=−E1∗1∗ϕz \delta p_{obs} = \delta (p_{gps}-p(k))=-E_{3*3} * \delta p \\ \delta v_{obs} =\delta (v_{gps}-v(k))=-E_{3*3} * \delta v \\ \delta yaw_{obs} =\delta (yaw_{gps}-yaw(k)) = -E_{1*1} * \phi_z δpobs=δ(pgps−p(k))=−E3∗3∗δpδvobs=δ(vgps−v(k))=−E3∗3∗δvδyawobs=δ(yawgps−yaw(k))=−E1∗1∗ϕz
8.2 轮速的观测如下
vDb=[s∗vwheel00]′vdb=[vwheel00]′vDn=Cbn∗vDb
v_D^b = [s*v_{wheel} \quad 0 \quad 0]' \\
v_d^b = [v_{wheel} \quad 0 \quad 0]' \\
v_D^n = C_b^n*v_D^b
vDb=[s∗vwheel00]′vdb=[vwheel00]′vDn=Cbn∗vDb
因此,可以求得里程计速度的误差表达式。
δvDn=δCbn∗vDb+Cbn∗δvDbδvDn=Cbn∗vDb×ϕ+Cbn∗δvDbδvDb=[vwheel00]′∗δs=vd∗δs
\delta v_D^n =\delta C_b^n*v_D^b + C_b^n*\delta v_D^b \\
\delta v_D^n = C_b^n*v_D^b \times \phi + C_b^n*\delta v_D^b \\
\delta v_D^b = [v_{wheel} \quad 0 \quad 0]'*\delta s=v_d*\delta s
δvDn=δCbn∗vDb+Cbn∗δvDbδvDn=Cbn∗vDb×ϕ+Cbn∗δvDbδvDb=[vwheel00]′∗δs=vd∗δs
于是得到轮速的观测误差方程如下式。
δvobs=δ(vDn−v(k))=δvDn−δv(k)=Cbn∗vDb×ϕ+Cbn∗vd∗δs−δv(k)
\delta v_{obs}= \delta (v_D^n - v(k))= \delta v_D^n - \delta v(k)\\
=C_b^n*v_D^b \times \phi + C_b^n*v_d*\delta s-\delta v(k)
δvobs=δ(vDn−v(k))=δvDn−δv(k)=Cbn∗vDb×ϕ+Cbn∗vd∗δs−δv(k)
因此,观测矩阵可以表达为下式。
H=[03×3−E3×3[Cbn∗vDb]03×303×303×2Cbn∗vd]
H = \begin{bmatrix}
0_{3\times3} & -E_{3\times3} & [C_b^n*v_D^b] & 0_{3\times3} & 0_{3\times3} & 0_{3\times2} & C_b^n*v_d
\end{bmatrix}
H=[03×3−E3×3[Cbn∗vDb]03×303×303×2Cbn∗vd]
注1:按照上面观测的方程写法,求状态量更新的时候是X=X_pre-delta_X。如果想使用加法需要加个负号。
注2:由于姿态correct的时候不是简单的加减法,所以此处不要改变失准角对应的观测矩阵项的符号,按照失准角的定义进行correct。
如果想用X=X_pre+delta_X,GPS观测矩阵是单位矩阵E,轮速的观测矩阵如下。
H=[03×3E3×3[Cbn∗vDb]03×303×303×2-Cbn∗vd]
H = \begin{bmatrix}
0_{3\times3} & E_{3\times3} & [C_b^n*v_D^b] & 0_{3\times3} & 0_{3\times3} & 0_{3\times2} & -C_b^n*v_d
\end{bmatrix}
H=[03×3E3×3[Cbn∗vDb]03×303×303×2-Cbn∗vd]
姿态correct都是下式,必须和模型建立时的右扰动定义和失准角定义相同。
Cbn=Cn′n∗Cbn′=(I+[ϕ])Cbn′Cmb=Cm′b∗Cmm′=Cm′b∗(I−[δα])
C_b^n =C_{n'}^n *C_b^{n'}=(I + [\phi])C_b^{n'}\\
C_m^b =C_{m'}^b *C_m^{m'}=C_{m'}^b*(I-[\delta \alpha])
Cbn=Cn′n∗Cbn′=(I+[ϕ])Cbn′Cmb=Cm′b∗Cmm′=Cm′b∗(I−[δα])
7. 杆臂补偿
假设IMU安装在后轴中心,是车体的原点位置。
PgP_gPg:代表gnss观测在导航系的位置
vgv_gvg:代表gnss观测在导航系的速度
CbnC_b^nCbn: 代表当前车体在导航系的姿态
LLL:代表杆臂向量,gnss天线在车体系下的位置
PcarP_{car}Pcar:待求的GNSS观测的车体在导航系得位置。
因此位置杆臂补偿如下式。
Pg=Cbn∗L+PcarPcar=Pg−Cbn∗L
P_g=C_b^n*L+P_{car}\\
P_{car} = P_g - C_b^n*L
Pg=Cbn∗L+PcarPcar=Pg−Cbn∗L
车体为刚体,天线和车体的转动角速度是一致的,因此速度的杆臂补偿公式如下
Vcar=Vg−Cbn∗(ω×L)
V_{car} = V_g-C_b^n*(\omega \times L)
Vcar=Vg−Cbn∗(ω×L)
ω\omegaω为IM U测量的角速度。
8. 完整性约束
轮速观测中已经带入了完整性约束。
9. 零速修正&零航向修正
10. 时间同步
11. 误差标定处理
系统建模时已经带入了安装误差和轮速误差建模。
更多推荐
所有评论(0)