估计器描述
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^C1T⋯GCNqˉ^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ˉ)(Ga−Gg+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×3−Cq^T⌊a^×⌋03×303×3−I303×303×303×303×303×303×3−2⌊ωC×⌋03×3I303×303×3−Cq^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×3−Cq^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
Runge−Kutta 数值积分进行传播。 此外,
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}
Pk∣k=[PIIk∣kPICk∣kTPICk∣kPCCk∣k]
其中
P
I
I
k
∣
k
\mathbf{P}_{I I_{k|k}}
PIIk∣k为
I
M
U
{\mathrm{IMU}}
IMU 状态演化的
15
×
15
15\times15
15×15协方差矩阵,
P
C
C
k
∣
k
\mathbf{P}_{CC_{k\mid k}}
PCCk∣k为相机姿态估计的
6
N
×
6
N
6N\times6N
6N×6N协方差矩阵,
P
I
C
k
∣
k
\mathbf{P}_{IC_{k|k}}
PICk∣k为
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+1∣k=[PIIk+1∣kPICk∣kTΦ(tk+T,tk)TΦ(tk+T,tk)PICk∣kPCCk∣k]
其中
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}}
PIIk∣k。状态转移矩阵
Φ
(
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
Pk∣k←[I6N+15J]Pk∣k[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}
i∈Sj观察到该特征,提出了测量模型。该特征的每个
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),i∈Sj
式中
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ˉ)(Gpfj−GpCi)
其中
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),i∈Sj,以及相应时刻相机姿势的滤波器估计来实现的。
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^fj−Gp^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}
,i∈Sj。由于不同图像中的特征观测值是独立的,
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=σim2I2Mj−3
更新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=1…L,以及相应的测量矩阵
H
o
(
j
)
,
j
=
1
…
L
。
\textbf{H}_o^{(j)},j=1\ldots L。
Ho(j),j=1…L。通过将所有残差堆叠在一个单独的向量中,得到:
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=1…L,的向量,
H
X
\mathbf{H_X}
HX是具有分块行
H
X
(
j
)
,
j
=
1
…
L
\textbf{H}_\mathbf{X}^{(j)},j=1\ldots L
HX(j),j=1…L的矩阵。
由于特征测量值在统计上是独立的,因此噪声向量 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(2Mj−3)为残差 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+1∣k+1=(Iξ−KTH)Pk+1∣k(Iξ−KTH)T+KRnKT
其中
ξ
=
6
N
+
15
\xi=6N+15
ξ=6N+15是协方差矩阵的维数。