MSCKF学习笔记

估计器描述

EKF的状态向量结构

由向量描述的 I M U {\mathrm{IMU}} IMU状态演变:
X I M U = [ G I q ˉ T b g T G v I T b a T G p I T ] T \mathbf{X}_{\mathrm{IMU}}=\left[\begin{array}{lllll} { }_G^I \bar{q}^T & \mathbf{b}_g{ }^T & G_{\mathbf{v}_I}^T & \mathbf{b}_a{ }^T & { }^G \mathbf{p}_I^T \end{array}\right]^T XIMU=[GIqˉTbgTGvITbaTGpIT]T
IMU误差状态定义为:
X ~ I M U = [ δ θ I T b ~ g T G v ~ I T b ~ a T G p ~ I T ] T \widetilde{\mathbf{X}}_{\mathrm{IMU}}=\left[\begin{matrix}{\delta\theta_{I}^{T}}&{\widetilde{\mathbf{b}}_{g}^{T}}&{G\widetilde{\mathbf{v}}_{I}^{T}}&{\widetilde{\mathbf{b}}_{a}^{T}}&{^{G}\widetilde{\mathbf{p}}_{I}^{T}}\\ \end{matrix}\right]^{T} X IMU=[δθITb gTGv ITb aTGp IT]T
其中,在位置、速度和偏置的估计中,采用标准的加性误差定义。方向误差由四元数乘法定义。

四元数误差为:
δ q ˉ ≃ [ 1 2 δ θ T 1 ] T \delta\bar{q}\simeq\begin{bmatrix}\frac{1}{2}\delta\theta^T&1\end{bmatrix}^T δqˉ[21δθT1]T
这里使用 δ θ \delta\theta δθ来表示最小姿态误差

假设 N N N个相机姿态包括在时间步长 k k k的EKF状态向量中,该向量具有以下形式:
X ^ k = [ X ^ I M U k T G C 1 q ˉ ^ T G p ^ C 1 T ⋯ G C N q ˉ ^ T G p ^ C N T ] T \hat{\mathbf{X}}_k=\left[\begin{array}{llllll} \hat{\mathbf{X}}_{\mathrm{IMU}_k}^T & { }_G^{C_1} \hat{\bar{q}}^T & { }^G \hat{\mathbf{p}}_{C_1}^T & \cdots & { }_G^{C_N} \hat{\bar{q}}^T & { }^G \hat{\mathbf{p}}_{C_N}^T \end{array}\right]^T X^k=[X^IMUkTGC1qˉ^TGp^C1TGCNqˉ^TGp^CNT]T
其中 G C 1 q ˉ ^ T { }_G^{C_1} \hat{\bar{q}}^T GC1qˉ^T G p ^ C 1 T { }^G \hat{\mathbf{p}}_{C_1}^T Gp^C1T i = 1... N i = 1 ...N i=1...N分别是摄像机姿态和位置的估计值。相应地定义了EKF误差状态向量:
X ~ k = [ X ~ I M U k T δ θ C 1 T G p ~ C 1 T … δ θ C N T G p ~ C N T ] T \widetilde{\mathbf{X}}_k=\left[\begin{array}{llllll} \widetilde{\mathbf{X}}_{\mathrm{IMU}_k}^T & \boldsymbol{\delta} \boldsymbol{\theta}_{C_1}^T & { }^G \widetilde{\mathbf{p}}_{C_1}^T & \ldots & \boldsymbol{\delta} \boldsymbol{\theta}_{C_N}^T & { }^G \widetilde{\mathbf{p}}_{C_N}^T \end{array}\right]^T X k=[X IMUkTδθC1TGp C1TδθCNTGp CNT]T

传播

连续时间系统模型

IMU状态的时间演化描述为:
G I q ˉ ˙ ( t ) = 1 2 Ω ( ω ( t ) ) G I q ˉ ( t ) ,    b ˙ g ( t ) = n w g ( t ) G v ˙ I ( t ) = G a ( t ) , b ˙ a ( t ) = n w a ( t ) , G p ˙ I ( t ) = G v I ( t ) \begin{gathered} _{G}^{I}{\dot{\bar{q}}}(t)={\frac{1}{2}}\mathbf{\Omega}{\big(}{\boldsymbol{\omega}}(t){\big)}_{G}^{I}{\bar{q}}(t),~~{\dot{\mathbf{b}}}_{g}(t)=\mathbf{n}_{w g}(t) \\ {}^{G}\dot{\mathbf{v}}_{I}(t)={}^{G}\mathbf{a}(t),\quad\dot{\mathbf{b}}_{a}(t)=\mathbf{n}_{wa}(t),\quad{}^{G}\dot{\mathbf{p}}_{I}(t)={}^{G}\mathbf{v}_{I}(t) \end{gathered} GIqˉ˙(t)=21Ω(ω(t))GIqˉ(t),  b˙g(t)=nwg(t)Gv˙I(t)=Ga(t),b˙a(t)=nwa(t),Gp˙I(t)=GvI(t)
在这些表达式中, G a {}^{G}\mathbf{a} Ga 是全局坐标系中的物体加速度,$ω = [ω_x\quadω_y\quadω_z]^T $是 I M U {\mathrm{IMU}} IMU 坐标系中表示的旋转速度.

陀螺仪和加速度计测量值 ω m \omega_{m} ωm a m a_m am 分别由下式给出:
ω m = ω + C ( G I q ˉ ) ω G + b g + n g a m = C ( G I q ˉ ) ( G a − G g + 2 ⌊ ω G × ⌋ G v I + ⌊ ω G × ⌋ 2 G p I ) + b a + n a \begin{aligned} &\omega_{m} =\boldsymbol{\omega}+\mathbf{C}(_{G}^{I}\bar{q})\boldsymbol{\omega}_{G}+\mathbf{b}_{g}+\mathbf{n}_{g} \\ &a_{m} =\mathbf{C}(_G^I\bar{q})(^G\mathbf{a}-{^G\mathbf{g}}\mathbf{+2\lfloor\omega_G\times\rfloor}^G\mathbf{v}_I+\lfloor\mathbf{\omega}_G\times\rfloor^{2}{^G\mathbf{p}_I})+\mathbf{b}_a+\mathbf{n}_a \end{aligned} ωm=ω+C(GIqˉ)ωG+bg+ngam=C(GIqˉ)(GaGg+2ωG×GvI+ωG×2GpI)+ba+na
其中 C ( ⋅ ) \mathbf{C}(\cdot) C()表示旋转矩阵, n g \mathbf{n}_{g} ng和$\mathbf{n}_a 是零均值高斯白噪声过程,用于模拟测量噪声。值得注意的是, 是零均值高斯白噪声过程,用于模拟测量噪声。值得注意的是, 是零均值高斯白噪声过程,用于模拟测量噪声。值得注意的是,{\mathrm{IMU}} 测量包含了行星旋转的影响,此外,加速度计测量包含了重力加速度, 测量包含了行星旋转的影响,此外,加速度计测量包含了重力加速度, 测量包含了行星旋转的影响,此外,加速度计测量包含了重力加速度,{^G\mathbf{g}}$,以本地坐标系表示。

在状态传播方程中应用期望算子。获得用于传播演化 I M U {\mathrm{IMU}} IMU状态的估计的方程:
G I q ˉ ˙ = 1 2 Ω ( ω ^ ) G I q ˉ ^ , b ^ g = 0 3 × 1 , G v ^ ˙ I = C q ^ T a ^ − 2 ⌊ ω G × ⌋ G v ^ I − ⌊ ω G × ⌋ 2 G p ^ I + G g b ^ ˙ a = 0 3 × 1 , G p ^ ˙ I = G v ^ I \begin{gathered} {}_{G}^{I}\dot{\bar{q}}={\frac{1}{2}}\mathbf{\Omega}(\hat{\omega})_{G}^{I}\hat{\bar{q}},\quad\hat{\mathbf{b}}_{g}=\mathbf{0}_{3\times1}, \\ {}^{G}\dot{\hat{\mathbf{v}}}_{I}=\mathbf{C}_{\hat{q}}^{T}\hat{\mathbf{a}}-2\lfloor{\boldsymbol{\omega}}_{G}\times\rfloor{}^{G}\hat{\mathbf{v}}_{I}-\lfloor{\boldsymbol{\omega}}_{G}\times\rfloor{}^{2}{^G\hat{\mathbf{p}}_{I}}+{}^{G}\mathbf{g} \\ {\dot{\hat{\mathbf{b}}}}_{a}=\mathbf{0}_{3\times1},\quad{}^{G}{\dot{\hat{\mathbf{p}}}}_{I}={}^{G}{\hat{\mathbf{v}}}_{I} \end{gathered} GIqˉ˙=21Ω(ω^)GIqˉ^,b^g=03×1,Gv^˙I=Cq^Ta^2ωG×Gv^IωG×2Gp^I+Ggb^˙a=03×1,Gp^˙I=Gv^I
为简单起见,用$\mathbf{C}{\hat{q}}= \mathbf{C}({G}^{I}\hat{\bar{q}}) \ , , {\hat{\mathbf{a}}}=\mathbf{a}{m}-\mathbf{b}{a} 和 和 \hat{\omega}=\omega_m-\hat{\textbf{b}}g-\textbf{C}{\hat{q}}\omega_G$表示,IMU误差状态的线性化连续时间模型为:
X ~ ˙ I M U = F X ~ I M U + G n I M U \dot{\widetilde{\mathbf{X}}}_{\mathrm{IMU}}=\mathbf{F}\widetilde{\mathbf{X}}_{\mathrm{IMU}}+\mathbf{G}\mathbf{n}_{\mathrm{IMU}} X ˙IMU=FX IMU+GnIMU
其中 n I M U = [ n g T n w g T n a T n w a T ] T \mathbf{n}_{\mathrm{IMU}}=\begin{bmatrix}\mathbf{n}_g^T&\mathbf{n}_{wg}^T&\mathbf{n}_a^T&\mathbf{n}_{wa}^T\end{bmatrix}^T nIMU=[ngTnwgTnaTnwaT]T为系统噪声。 n I M U \mathbf{n}_{\mathrm{IMU}} nIMU的协方差矩阵 Q I M U \mathbf{Q}_{\mathrm{IMU}} QIMU取决于 I M U {\mathrm{IMU}} IMU的噪声特性,在传感器标定时离线计算。最后,方程中出现的矩阵 F \mathbf{F} F G \mathbf{G} G由下式给出:
F = [ − ⌊ ω ^ × ⌋ − I 3 0 3 × 3 0 3 × 3 0 3 × 3 0 3 × 3 0 3 × 3 0 3 × 3 0 3 × 3 0 3 × 3 − C q ^ T ⌊ a ^ × ⌋ 0 3 × 3 − 2 ⌊ ω C × ⌋ − C q ^ T − ⌊ ω G × ⌋ 2 0 3 × 3 0 3 × 3 0 3 × 3 0 3 × 3 0 3 × 3 0 3 × 3 0 3 × 3 I 3 0 3 × 3 0 3 × 3 ] \mathbf{F}=\begin{bmatrix}-\lfloor\hat{\boldsymbol{\omega}}\times\rfloor&-\mathbf{I}_3&\mathbf{0}_{3\times3}&\mathbf{0}_{3\times3}&\mathbf{0}_{3\times3}\\ \mathbf{0}_{3\times3}&\mathbf{0}_{3\times3}&\mathbf{0}_{3\times3}&\mathbf{0}_{3\times3}&\mathbf{0}_{3\times3}\\ -\mathbf{C}_{\hat{q}}^T\lfloor\hat{\mathbf{a}}\times\rfloor&\mathbf{0}_{3\times3}&-2\lfloor\omega_C\times\rfloor&-\mathbf{C}_{\hat{q}}^T&-\lfloor\omega_G\times\rfloor^2\\ \mathbf{0}_{3\times3}&\mathbf{0}_{3\times3}&\mathbf{0}_{3\times3}&\mathbf{0}_{3\times3}&\mathbf{0}_{3\times3}\\ \mathbf{0}_{3\times3}&\mathbf{0}_{3\times3}&\mathbf{I}_{3}&\mathbf{0}_{3\times3}&\mathbf{0}_{3\times3}\\ \end{bmatrix} F= ω^×03×3Cq^Ta^×03×303×3I303×303×303×303×303×303×32ωC×03×3I303×303×3Cq^T03×303×303×303×3ωG×203×303×3
其中 I 3 \mathbf{I}_{3} I3 3 × 3 3\times3 3×3单位矩阵,那么
G = [ − I 3 0 3 × 3 0 3 × 3 0 3 × 3 0 3 × 3 I 3 0 3 × 3 0 3 × 3 0 3 × 3 0 3 × 3 − C q ^ T 0 3 × 3 0 3 × 3 0 3 × 3 0 3 × 3 I 3 × 3 0 3 × 3 0 3 × 3 0 3 × 3 0 3 × 3 ] \textbf{G}=\begin{bmatrix}-\textbf{I}_3&\textbf{0}_{3\times3}&\textbf{0}_{3\times3}&\textbf{0}_{3\times3}\\ \textbf{0}_{3\times3}&\textbf{I}_3&\textbf{0}_{3\times3}&\textbf{0}_{3\times3}\\ \textbf{0}_{3\times3}&\textbf{0}_{3\times3}&-\textbf{C}_{\hat{q}}^{T}&\textbf{0}_{3\times3}\\ \textbf{0}_{3\times3}&\textbf{0}_{3\times3}&\textbf{0}_{3\times3}&\textbf{I}_{3\times3}\\ \textbf{0}_{3\times3}&\textbf{0}_{3\times3}&\textbf{0}_{3\times3}&\textbf{0}_{3\times3}\end{bmatrix} G= I303×303×303×303×303×3I303×303×303×303×303×3Cq^T03×303×303×303×303×3I3×303×3

离散时间实现

I M U {\mathrm{IMU}} IMU 以周期 T T T 对信号 ω m \omega_{m} ωm a m \mathbf{a}_{m} am 进行采样,这些测量值用于 I M U {\mathrm{IMU}} IMU 中的状态传播。每次接收到新的 I M U {\mathrm{IMU}} IMU 测量值时, I M U {\mathrm{IMU}} IMU状态估计都会使用方程式的 5 阶 R u n g e − K u t t a Runge-Kutta RungeKutta 数值积分进行传播。 此外, E F K {\mathrm{EFK}} EFK 协方差矩阵需要进行传播。为此,引入以下协方差划分:
P k ∣ k = [ P I I k ∣ k P I C k ∣ k P I C k ∣ k T P C C k ∣ k ] \mathbf{P}_{k|k}=\begin{bmatrix}\mathbf{P}_{II_{k|k}}&\mathbf{P}_{IC_{k|k}}\\ \mathbf{P}_{IC_{k|k}}^T&\mathbf{P}_{CC_{k|k}}\end{bmatrix} Pkk=[PIIkkPICkkTPICkkPCCkk]
其中 P I I k ∣ k \mathbf{P}_{I I_{k|k}} PIIkk I M U {\mathrm{IMU}} IMU 状态演化的 15 × 15 15\times15 15×15协方差矩阵, P C C k ∣ k \mathbf{P}_{CC_{k\mid k}} PCCkk为相机姿态估计的 6 N × 6 N 6N\times6N 6N×6N协方差矩阵, P I C k ∣ k \mathbf{P}_{IC_{k|k}} PICkk I M U {\mathrm{IMU}} IMU状态误差与相机姿态估计的相关性。用这种表示法,传播状态的协方差矩阵为:
P k + 1 ∣ k = [ P I I k + 1 ∣ k Φ ( t k + T , t k ) P I C k ∣ k P I C k ∣ k T Φ ( t k + T , t k ) T P C C k ∣ k ] \mathbf{P}_{k+1\mid k}=\begin{bmatrix}\mathbf{P}_{II_{k+1\mid k}}&\mathbf{\Phi}(t_k+T,t_k)\mathbf{P}_{IC_{k\mid k}}\\ \mathbf{P}_{IC_{k\mid k}}^T\mathbf{\Phi}(t_k+T,t_k)^T&\mathbf{P}_{CC_{k\mid k}}\end{bmatrix} Pk+1k=[PIIk+1kPICkkTΦ(tk+T,tk)TΦ(tk+T,tk)PICkkPCCkk]
其中 P I I k + 1 ∣ k \mathbf{P}_{I I_{k+1|k}} PIIk+1∣k 是通过 L y a p u n o v Lyapunov Lyapunov 方程的数值积分计算的:
P ˙ I I = F P I I + P I I F T + G Q I M U G T \dot{\mathbf{P}}_{II}=\mathbf{F}\mathbf{P}_{II}+\mathbf{P}_{II}\mathbf{F}^T+\mathbf{G}\mathbf{Q}_{\mathrm{IMU}}\mathbf{G}^T P˙II=FPII+PIIFT+GQIMUGT
对时间区间 ( t k , t k + T ) (t_k,t_k + T) (tk,tk+T)进行数值积分,初始条件为 P I I k ∣ k \mathbf{P}_{I I_{k|k}} PIIkk。状态转移矩阵 Φ ( t k + T , t k ) \mathbf{\Phi}(t_{k}+T,t_{k}) Φ(tk+T,tk)同样通过微分方程的数值积分计算:
Φ ˙ ( t k + τ , t k ) = F Φ ( t k + τ , t k ) , τ ∈ [ 0 , T ] \dot{\mathbf{\Phi}}(t_k+\tau,t_k)=\mathbf{F}\Phi(t_k+\tau,t_k), \quad \tau\in[0,T] Φ˙(tk+τ,tk)=FΦ(tk+τ,tk),τ[0,T]
初始条件 Φ ( t k , t k ) = I 15 \mathbf{\Phi}(t_{k},t_{k})=\mathbf{I}_{15} Φ(tk,tk)=I15

状态扩充

在记录新图像时,从 I M U {\mathrm{IMU}} IMU姿态估计中计算相机姿态估计为:
G C q ˉ ^ = I C q ˉ ⊗ G I q ˉ ^ ,  and  G p ^ C = G p ^ I + C q ^ T I p C { }_G^C \hat{\bar{q}}={ }_I^C \bar{q} \otimes{ }_G^I \hat{\bar{q}}, \quad \text { and } \quad{ }^G \hat{\mathbf{p}}_C={ }^G \hat{\mathbf{p}}_I+\mathbf{C}_{\hat{q}}^T{ }^I \mathbf{p}_C GCqˉ^=ICqˉGIqˉ^, and Gp^C=Gp^I+Cq^TIpC
其中${ }_I^C \bar{q} 是表示 是表示 是表示{\mathrm{IMU}} 和相机帧之间旋转的四元数, 和相机帧之间旋转的四元数, 和相机帧之间旋转的四元数,^I \mathbf{p}_C 是相机帧的原点相对于 是相机帧的原点相对于 是相机帧的原点相对于\left{I\right} 的位置,这两个都是已知的。将摄像机姿态估计值附加到状态向量上,对 的位置,这两个都是已知的。将摄像机姿态估计值附加到状态向量上,对 的位置,这两个都是已知的。将摄像机姿态估计值附加到状态向量上,对{\mathrm{EFK}}$的协方差矩阵进行相应的扩充-:
P k ∣ k ← [ I 6 N + 15 J ] P k ∣ k [ I 6 N + 15 J ] T \mathbf{P}_{k|k}\leftarrow\begin{bmatrix}\mathbf{I}_{6N+15}\\ \mathbf{J}\end{bmatrix}\mathbf{P}_{k|k}\begin{bmatrix}\mathbf{I}_{6N+15}\\ \mathbf{J}\end{bmatrix}^T Pkk[I6N+15J]Pkk[I6N+15J]T
其中雅可比矩阵 J \mathbf{J} J为:
J = [ C ( I C q ˉ ) 0 3 × 9 0 3 × 3 0 3 × 6 N ⌊ C q ˉ T I p C × ⌋ 0 3 × 9 I 3 0 3 × 6 N ] \mathbf{J}=\begin{bmatrix}\mathbf{C}\left(\begin{matrix}_I^C\bar{q}\end{matrix}\right)&\mathbf{0}_{3\times9}&\mathbf{0}_{3\times3}&\mathbf{0}_{3\times6N}\\ \left\lfloor\mathbf{C}_{\bar{q}}^{TI}\mathbf{p}C\times\right\rfloor&\mathbf{0}_{3\times9}&\mathbf{I}_{3}&\mathbf{0}_{3\times6N}\end{bmatrix} J=[C(ICqˉ)CqˉTIpC×03×903×903×3I303×6N03×6N]

测量模型

由于 E F K {\mathrm{EFK}} EFK 用于状态估计,因此为了构建测量模型,只需定义一个与状态误差 X ~ \widetilde{\textbf{X}} X 线性相关的残差 r \textbf{r} r,其一般形式为:
r = H X ~ + noise \textbf{r}=\textbf{H}\widetilde{\textbf{X}}+\text{noise} r=HX +noise
在该表达式中, H \textbf{H} H是测量雅可比矩阵,并且噪声项必须是零均值、白色并且与状态误差无关,才能应用 EFK \textbf{EFK} EFK框架。

通过考虑单个特征 f j f_j fj的情况,并从一组 M j M_j Mj个相机位姿 ( G C i q ˉ , G p C i ) (^{C_i}_{G}\bar{q},{}^G\textbf{p}_{C_i}) (GCiqˉ,GpCi),其中 i ∈ S j i\in{\mathcal{S}}_{j} iSj观察到该特征,提出了测量模型。该特征的每个 M j M_j Mj观测结果由以下模型描述:
z i ( j ) = 1 C i Z j [ C i X j C i Y j ] + n i ( j ) , i ∈ S j \textbf{z}_i^{(j)}=\frac{1}{^{C_i}Z_j}\begin{bmatrix}^{C_i}X_j\\ ^{C_i}Y_j\end{bmatrix}+\textbf{n}_i^{(j)},\quad i\in\mathcal{S}_j zi(j)=CiZj1[CiXjCiYj]+ni(j),iSj
式中 n i ( j ) \textbf{n}_i^{(j)} ni(j) 2 × 1 2\times1 2×1图像噪声向量,协方差矩阵 R i ( j ) = σ i m 2 I 2 \mathbf{R}_{i}^{(j)}=\sigma_{\mathrm{im}}^{2}\mathbf{I}_{2} Ri(j)=σim2I2。特征位置在相机帧 C i p f j {}^{C_{i}}\mathbf{p}_{f_{j}} Cipfj中表示为:
C i p f j = [ C i X j C i Y j C i Z j ] = C ( G C i q ˉ ) ( G p f j − G p C i ) ^{C_i}\textbf{p}_{f_j}=\begin{bmatrix}^{C_i} X_j\\ ^{C_i} Y_j\\ ^{C_i} Z_j\end{bmatrix}=\textbf{C}(^{C_i}_G\bar{q})(^G\textbf{p}_{f_j}-{^G\textbf{p}} _{C_i}) Cipfj= CiXjCiYjCiZj =C(GCiqˉ)(GpfjGpCi)
其中 G p f j ^G\mathbf{p}_{f_{j}} Gpfj是全局框架中的 3D \text{3D} 3D特征位置。由于这是未知的,在我们算法的第一步中,我们使用最小二乘最小化来获得特征位置的估计, G p ^ f j {}^{G}\hat{\mathbf{p}}_{f_{j}} Gp^fj

这是通过测量 z i ( j ) , i ∈ S j , \mathbf{z}_i^{(j)},i\in\mathcal{S}_j, zi(j),iSj,以及相应时刻相机姿势的滤波器估计来实现的。
r i ( j ) = z i ( j ) − z ^ i ( j ) \mathbf{r}_i^{(j)}=\mathbf{z}_i^{(j)}-\hat{\mathbf{z}}_i^{(j)} ri(j)=zi(j)z^i(j)
这里
z ^ i ( j ) = 1 C i Z ^ j [ C i X ^ j C i Y ^ j ] , [ C i X ^ j C i Y ^ j C i Z ^ j ] = C ( G C i q ˉ ^ ) ( G p ^ f j − G p ^ C i ) \hat{\mathbf{z}}_i^{(j)}=\frac{1}{^{C_i} \hat{Z}_j}\left[\begin{array}{c} ^{C_i} \hat{X}_j \\ ^{C_i} \hat{Y}_j \end{array}\right],\left[\begin{array}{c} { }^{C_i} \hat{X}_j \\ { }^{C_i} \hat{Y}_j \\ { }^{C_i} \hat{Z}_j \end{array}\right]=\mathbf{C}\left({ }_G^{C_i} \hat{\bar{q}}\right)\left({ }^G \hat{\mathbf{p}}_{f_j}-{ }^G \hat{\mathbf{p}}_{C_i}\right) z^i(j)=CiZ^j1[CiX^jCiY^j], CiX^jCiY^jCiZ^j =C(GCiqˉ^)(Gp^fjGp^Ci)
对相机姿态和特征位置的估计进行线性化处理,残差可以近似为:
r i ( j ) ≃ H X i ( j ) X ~ + H f i ( j ) G p ~ f j + n i ( j ) \mathbf{r}_i^{(j)}\simeq\mathbf{H}_{\mathbf{X}_i}^{(j)}\widetilde{\mathbf{X}}+\mathbf{H}_{f_i}^{(j)}{^G\widetilde{\mathbf{p}}_{f_j}}+\mathbf{n}_i^{(j)} ri(j)HXi(j)X +Hfi(j)Gp fj+ni(j)
在前面的表达式中, H X i ( j ) \mathbf{H}_{\mathbf{X}_i}^{(j)} HXi(j) H f i ( j ) \mathbf{H}_{f_i}^{(j)} Hfi(j)分别是关于状态和特征位置的测量 z i ( j ) \mathbf{z}_i^{(j)} zi(j)的雅可比矩阵, G p ~ f j {^G\widetilde{\mathbf{p}}_{f_j}} Gp fj f j f_j fj的位置估计的误差。

通过叠加该特征的所有 M j M_j Mj测量值的残差,得到:
r ( j ) ≃ H X ( j ) X ~ + H f ( j ) G p ~ f + n ( j ) \mathbf{r}^{(j)}\simeq\mathbf{H}_{\mathbf{X}}^{(j)}\widetilde{\mathbf{X}}+\mathbf{H}_{f}^{(j)}{^G\widetilde{\mathbf{p}}_{f}}+\mathbf{n}^{(j)} r(j)HX(j)X +Hf(j)Gp f+n(j)
其中 r ( j ) , H X ( j ) , H f ( j ) , \mathbf{r}^{(j)},\mathbf{H}_{\mathbf{X}}^{(j)},\mathbf{H}_{f}^{(j)}, r(j),HX(j),Hf(j), n ( j ) \mathbf{n}^{(j)} n(j)是包含元素 r i ( j ) , H X i ( j ) , H f i ( j ) , \mathbf{r}^{(j)}_i,\mathbf{H}_{\mathbf{X}_i}^{(j)},\mathbf{H}_{f_i}^{(j)}, ri(j),HXi(j),Hfi(j), n i ( j ) \mathbf{n}_i^{(j)} ni(j)的分块向量或矩阵 n ( j ) \mathbf{n}^{(j)} n(j) , i ∈ S j ,i\in{\mathcal{S}}_{j} ,iSj。由于不同图像中的特征观测值是独立的, n ( j ) \mathbf{n}^{(j)} n(j)的协方差矩阵为 R ( j ) = σ i m 2 I 2 M i {\mathbf{R}}^{(j)} =\sigma_{\mathrm{im}}^2\mathbf{I}_{2M_i} R(j)=σim2I2Mi

请注意,由于状态估计 X \mathbf{X} X被用于计算特征位置估计,因此方程中的误差 G p ~ f ^G\widetilde{\mathbf{p}}_{f} Gp f与误差 X ~ \widetilde{\mathbf{X}} X 相关。因此,残差 r ( j ) \mathbf{r}^{(j)} r(j)不能直接应用于 E F K {\mathrm{EFK}} EFK中的测量更新。为了解决这个问题,定义一个残差 r o ( j ) \mathbf{r}^{(j)}_o ro(j),通过将 r ( j ) \mathbf{r}^{(j)} r(j)投影到矩阵 H f ( j ) \mathbf{H}^{(j)}_f Hf(j)的左零空间上得到。具体来说,如果让 A \mathbf{A} A表示由 H f \mathbf{H}_f Hf的左零空间的基向量形成的列组成的酉矩阵,可以得到:
r o ( j ) = A T ( z ( j ) − z ^ ( j ) ) ≃ A T H X ( j ) X ~ + A T n ( j ) = H o ( j ) X ~ ( j ) + n o ( j ) \begin{aligned} \mathbf{r}_{o}^{(j)}& =\mathbf{A}^{T}(\mathbf{z}^{(j)}-{\hat{\mathbf{z}}}^{(j)})\simeq\mathbf{A}^{T}\mathbf{H}_{\mathbf{X}}^{(j)}{\widetilde{\mathbf{X}}}+\mathbf{A}^{T}\mathbf{n}^{(j)} \\ &=\mathbf{H}_o^{(j)}\widetilde{\mathbf{X}}^{(j)}+\mathbf{n}_o^{(j)} \end{aligned} ro(j)=AT(z(j)z^(j))ATHX(j)X +ATn(j)=Ho(j)X (j)+no(j)
该残差与特征坐标中的误差无关,因此可以基于它进行 E F K {\mathrm{EFK}} EFK 更新。上式定义了观察到特征 f j f_j fj的所有相机姿势之间的线性化约束。这表达了测量 z i ( j ) \textbf{z}_i^{(j)} zi(j) M j M_j Mj状态提供的所有可用信息,因此所得到的 E F K {\mathrm{EFK}} EFK更新是最优的,除了线性化引起的不准确性。

由于矩阵A是酉的,因此噪声向量 n o ( j ) \mathbf{n}_o^{(j)} no(j)的协方差矩阵为:
E { n o ( j ) n o ( j ) T } = σ i m 2 A T A = σ i m 2 I 2 M j − 3 E\{\mathbf{n}_o^{(j)}\mathbf{n}_o^{(j)T}\}=\sigma_{\mathrm{im}}^2\mathbf{A}^T\mathbf{A}=\sigma_{\mathrm{im}}^2\mathbf{I}_{2M_j-3} E{no(j)no(j)T}=σim2ATA=σim2I2Mj3

更新EKF

E F K {\mathrm{EFK}} EFK更新由以下两个事件之一触发:

  • 当在许多图像中跟踪的特征不再被检测到时。这种情况最常见,因为特征移动到摄像机的视野之外。
  • 每次记录新图像时,当前相机姿态估计的副本都包含在状态向量中。如果达到了允许的最大相机姿态数 N m a x N_{\mathrm{max}} Nmax,那么至少要删除其中一个旧的姿态。在丢弃状态之前,使用发生在相应时间点处的所有特征观测,以利用它们的本地化信息。在算法中,选择 N m a x / 3 N_{\mathrm{max}}/3 Nmax/3个姿态,这些姿态在时间上均匀分布,从第二旧的姿态开始。在使用这些姿态共同的特征约束进行 E F K {\mathrm{EFK}} EFK更新之后,这些姿态将被丢弃。选择始终保留状态向量中最古老的姿态,因为涉及到更早的姿态的几何约束通常对应于更大的基线,因此具有更有价值的定位信息。这种方法在实践中表现非常出色。

以下是详细讨论更新过程。考虑在给定时间步骤中,必须处理上述两个标准选择的 L L L个特征的约束。按照前面一节中描述的过程,计算每个特征的残差向量 r o ( j ) , j = 1 … L , \textbf{r}_o^{(j)},j=1\ldots L, ro(j),j=1L,以及相应的测量矩阵 H o ( j ) , j = 1 … L 。 \textbf{H}_o^{(j)},j=1\ldots L。 Ho(j),j=1L通过将所有残差堆叠在一个单独的向量中,得到:
r o = H X X ~ + n o \mathbf{r}_o=\mathbf{H_X}\widetilde{\mathbf{X}}+\mathbf{n}_o ro=HXX +no
其中, r o \mathbf{r}_o ro n o \mathbf{n}_o no分别是具有分块元素 r o ( j ) \textbf{r}_o^{(j)} ro(j) n o ( j ) , j = 1 … L , \textbf{n}_o^{(j)},j=1\ldots L, no(j),j=1L,的向量, H X \mathbf{H_X} HX是具有分块行 H X ( j ) , j = 1 … L \textbf{H}_\mathbf{X}^{(j)},j=1\ldots L HX(j),j=1L的矩阵。

由于特征测量值在统计上是独立的,因此噪声向量 n o ( j ) \textbf{n}_o^{(j)} no(j)是不相关的。

因此,噪声向量 n o \textbf{n}_o no的协方差矩阵为 R o = σ im 2 I d , \textbf{R}_o=\sigma^2_\text{im}\textbf{I}_d, Ro=σim2Id,其中 d = ∑ j = 1 L ( 2 M j − 3 ) d=\sum_{j=1}^{L}(2M_j-3) d=j=1L(2Mj3)为残差 R o \textbf{R}_o Ro的维数。在实践中出现的一个问题是 d d d可能是一个相当大的数字。

为了降低 E F K {\mathrm{EFK}} EFK更新的计算复杂度,采用矩阵 H X \mathbf{H_X} HX Q R \mathbf{QR} QR分解。具体地说,把这个分解表示为:
H X = [ Q 1 Q 2 ] [ T H 0 ] \mathbf{H_X}=\begin{bmatrix}\mathbf{Q_1}&\mathbf{Q_2}\end{bmatrix}\begin{bmatrix}\mathbf{T_H}\\ \mathbf{0}\end{bmatrix} HX=[Q1Q2][TH0]
式中 Q 1 \mathbf{Q_1} Q1 Q 2 \mathbf{Q_2} Q2为酉矩阵,其列分别构成 H X \mathbf{H_X} HX的值域和零空间的基, T H \mathbf{T_H} TH为上三角矩阵。根据这个定义,得到:
r o = [ Q 1 Q 2 ] [ T H 0 ] X ~ + n o ⇒ [ Q 1 T r o Q 2 T r o ] = [ T H 0 ] X ~ + [ Q 1 T n o Q 2 T n o ] \begin{aligned} \mathbf{r}_o& =\left[\begin{matrix}{\mathbf{Q}_{1}}&{\mathbf{Q}_{2}}\\ \end{matrix}\right]\left[\begin{matrix}{\mathbf{T}_{H}}\\ {\mathbf{0}}\\ \end{matrix}\right]\widetilde{\mathbf{X}}+\mathbf{n}_{o}\Rightarrow \\ \begin{bmatrix}\textbf{Q}_1^T\textbf{r}_o\\ \textbf{Q}_2^T\textbf{r}_o\end{bmatrix}& =\begin{bmatrix}\mathbf{T}_H\\ \mathbf{0}\end{bmatrix}\widetilde{\mathbf{X}}+\begin{bmatrix}\mathbf{Q}_1^T\mathbf{n}_o\\ \mathbf{Q}_2^T\mathbf{n}_o\end{bmatrix} \end{aligned} ro[Q1TroQ2Tro]=[Q1Q2][TH0]X +no=[TH0]X +[Q1TnoQ2Tno]
从上一个方程可以清楚地看出,通过将残差 r o \mathbf{r}_o ro投影到 H X \mathbf{H_X} HX值域的基向量上,保留了测量中的所有有用信息。剩余的 Q 2 T r o \mathbf{Q}_2^T\mathbf{r}_o Q2Tro只是噪声,可以完全丢弃。因此,使用以下残差来更新 E F K {\mathrm{EFK}} EFK:
r n = Q 1 T r o = T H X ~ + n n \mathbf{r}_{n}=\mathbf{Q}_{1}^{T}\mathbf{r}_{o}=\mathbf{T}_{H}\widetilde{\mathbf{X}}+\mathbf{n}_{n} rn=Q1Tro=THX +nn
式中 n n = Q 1 T n o \mathbf{n}_n=\mathbf{Q}_1^T\mathbf{n}_o nn=Q1Tno为噪声向量,其协方差矩阵为 R n = Q 1 T R o Q 1 = σ i m 2 I r , \mathbf{R}_{n}=\mathbf{Q}_{1}^{T}\mathbf{R}_{o}\mathbf{Q}_{1}=\sigma_{\mathrm{im}}^{2}\mathbf{I}_{r}, Rn=Q1TRoQ1=σim2Ir,, r r r Q 1 \mathbf{Q_1} Q1的列数。 E F K {\mathrm{EFK}} EFK更新通过计算卡尔曼增益进行:
K = P T H T ( T H P T H T + R n ) − 1 \mathbf{K}=\mathbf{PT}_H^T\left(\mathbf{T}_H\mathbf{PT}_H^T+\mathbf{R}_n\right)^{-1} K=PTHT(THPTHT+Rn)1
而对状态的校正由向量给出
Δ X = K r n \Delta\mathbf{X}=\mathbf{K}\mathbf{r}_n ΔX=Krn
最后,根据下式更新状态协方差矩阵:
P k + 1 ∣ k + 1 = ( I ξ − K T H ) P k + 1 ∣ k ( I ξ − K T H ) T + K R n K T \mathbf{P}_{k+1\mid k+1}=\left(\mathbf{I}_{\xi}-\mathbf{K}\mathbf{T}_{H}\right)\mathbf{P}_{k+1\mid k}\left(\mathbf{I}_{\xi}-\mathbf{K}\mathbf{T}_{H}\right)^{T}+\mathbf{KR}_{n}\mathbf{K}^{T} Pk+1k+1=(IξKTH)Pk+1k(IξKTH)T+KRnKT
其中 ξ = 6 N + 15 \xi=6N+15 ξ=6N+15是协方差矩阵的维数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值