参考这篇论文第四章
参考这篇论文第四章

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 Cnn=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=CnnCbnCbn=[ϕ]×Cbn
特别注意2:此处安装角的失准角使用了右扰动模型,定义为真值m系旋转到计算机推算得到的m’系之间的旋转角。必须与后面的correct相对应。因为姿态角计算不是简单的加减法。
Cm′m=I+[δα]× C_{m'}^m=I+[\delta \alpha]_\times Cmm=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=CmbCmmCmb=Cmb[δα]×
特别注意3
使用eigen求等效旋转向量时

  1. 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()求出。
  2. 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=Cbnfb+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=CbnCmb[ωnmmϵnmm]δα+CbnCmbδϵ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=Cbnfb×ϕn+Cbnδfbfb=Cmb(fmm)δfb=δCmb(fmm)Cmbδmδfb=Cmb[δα](fmm)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=CbnCmb(fmm)×ϕnCbnCmb[fmm]δαCbnCmbδ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ϕ=CbnCmb[ωnmmϵnmm]Fϕ=[Fϕ(:,2:3);03×1]Fv=CbnCmb[fmnmm]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×3CbnCmb03×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+FTΓk+1,k=GT

7.状态更新方程

第一步对IMU测量去零偏
funbiasm=fm−fbiasgunbiasm=gm−gbias f_{unbias}^m=f^m-f_{bias}\\ g_{unbias}^m=g^m-g_{bias} funbiasm=fmfbiasgunbiasm=gmgbias
第二步对校正安装误差角
fb=Cmb∗funbiasmgb=Cmb∗gunbiasm f^b = C_m^b*f_{unbias}^m\\ g^b = C_m^b*g_{unbias}^m fb=Cmbfunbiasmgb=Cmbgunbiasm
第三步进行状态量更新
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(Cbnfb+gn)T2v(k+1)=v(k)+(Cbnfb+gn)TCb(k+1)n=Cb(k)nCb(k+1)b(k)=Cb(k)nC(Δθ)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=δ(pgpsp(k))=E33δpδvobs=δ(vgpsv(k))=E33δvδyawobs=δ(yawgpsyaw(k))=E11ϕ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=[svwheel00]vdb=[vwheel00]vDn=CbnvDb
因此,可以求得里程计速度的误差表达式。
δ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=δCbnvDb+CbnδvDbδvDn=CbnvDb×ϕ+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=δ(vDnv(k))=δvDnδv(k)=CbnvDb×ϕ+Cbnvdδ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×3E3×3[CbnvDb]03×303×303×2Cbnvd]

注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[CbnvDb]03×303×303×2Cbnvd]
姿态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=CnnCbn=(I+[ϕ])CbnCmb=CmbCmm=Cmb(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=CbnL+PcarPcar=PgCbnL
车体为刚体,天线和车体的转动角速度是一致的,因此速度的杆臂补偿公式如下
Vcar=Vg−Cbn∗(ω×L) V_{car} = V_g-C_b^n*(\omega \times L) Vcar=VgCbnω×L
ω\omegaω为IM U测量的角速度。

8. 完整性约束

轮速观测中已经带入了完整性约束。

9. 零速修正&零航向修正

10. 时间同步

11. 误差标定处理

系统建模时已经带入了安装误差和轮速误差建模。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐