SLAM with camera and laser
我们描述一个装有3D激光雷达和未校正的单目相机的SLAM问题,待评估状态量 χ = { x 1 , . . . , x t , l t , . . . , l n , K } \chi = \lbrace x_1, ... , x_t, l_t, ..., l_n, K \rbrace χ={x1,...,xt,lt,...,ln,K},这里 x i x_i xi是机器人在时刻i的位姿, l j l_j lj是路标点, K K K是相机内参。
雷达前端提供扫描数据给ICP算法去计算两个连续雷达位置的相对运动(里程计),用里程计评估,里程计后端定义了里程计因子
u
u
u, 每个里程计因子
u
u
u,联系了相邻的两个位姿,并且响应的评估被
z
i
u
z^u_i
ziu被以下的评估模型描述:
(1)
z
i
u
=
h
i
u
(
x
i
,
x
i
+
1
)
 
⊕
ϵ
i
u
z_i^u = h_i^u(x_i, x_{i+1})\,\oplus \epsilon_i^u \tag1
ziu=hiu(xi,xi+1)⊕ϵiu(1)
h
i
u
h_i^u
hiu计算相对位姿;
ϵ
i
u
\epsilon_i^u
ϵiu 是协方差矩阵为
Ω
i
u
\Omega_i^u
Ωiu的零均值高斯噪声。在(1)中,标准求和被扰动取代,
⨁
\bigoplus
⨁映射一个向量到SE(3)元素。3D位姿的流形。闭环检测被标记为c,他们评估机器人非序列位姿
(2)
z
i
j
c
=
h
i
j
c
(
x
i
,
x
j
)
⊕
ϵ
i
j
u
z_{ij}^c = h_{ij}^c(x_i, x_j)\oplus \epsilon_{ij}^u \tag2
zijc=hijc(xi,xj)⊕ϵiju(2)
视觉前端在时间点
i
i
i 从每个相机图像提取视觉特征,然后数据关联模块匹配每个特征观测到3D路标点
l
j
l_j
lj。通过这些信息,后端定义了视觉因子
v
v
v 每个视觉因子包含了评估
z
i
j
v
z_{ij}^v
zijv ,评估模型为:
(3)
z
i
j
v
=
h
i
j
v
(
x
i
,
l
j
,
K
)
+
ϵ
i
j
v
z_{ij}^v = h_{ij}^v(x_i, l_j, K) + \epsilon_{ij}^v \tag3
zijv=hijv(xi,lj,K)+ϵijv(3)
z
i
j
z_{ij}
zij 是时间
i
i
i 时刻路标点
l
j
l_j
lj在图像平面的投影评估。函数
h
i
j
v
(
.
)
h_{ij}^v(.)
hijv(.) 是标准的透视投影。
最后,先验因子
p
p
p 编码了机器人初始位姿的先验。
(4)
z
p
=
x
1
⊕
ϵ
i
j
v
z_p = x_1 \oplus \epsilon_{ij}^v \tag4
zp=x1⊕ϵijv(4)
由于本例中相机没有先验,所以我们通常设置其先验为单位矩阵(先验使得MAP的评估是唯一的,一些类似EVO之类的评估软件应该就是通过对应单位矩阵然后在评估后面的位姿的吧)。
给定所有那些因子,SLAM后端就可以通过最小化接下来的非线性最小二乘问题评估
χ
\chi
χ:
(5)
χ
k
∗
=
min
χ
k
∣
∣
z
p
⊖
x
1
∣
∣
Ω
p
2
+
∑
i
∈
O
∣
∣
z
i
j
c
⊖
h
i
j
c
(
x
i
,
x
j
)
∣
∣
Ω
i
u
2
+
∑
i
j
∈
L
∣
∣
z
i
j
c
⊖
h
i
j
v
(
x
i
,
x
j
)
∣
∣
Ω
i
j
c
2
+
∑
i
j
∈
P
∣
∣
z
i
j
v
−
h
i
j
v
(
x
i
,
l
j
,
K
)
∣
∣
Ω
i
j
v
2
\chi_k^* = \underset{\chi_k}{\operatorname{min}} ||z^p \ominus x_1||_{\Omega_p }^2 + \sum_{i \in O}||z_{ij}^c\ominus h_{ij}^c(x_i, x_j)||^2_{\Omega_i^u} + \sum_{ij\in L}||z_{ij}^c \ominus h_{ij}^v(x_i,x_j)||^2_{\Omega_{ij}^c} + \sum_{ij \in P}||z_{ij}^v - h_{ij}^v(x_i, l_j,K)||_{\Omega_{{ij}}^v}^2 \tag5
χk∗=χkmin∣∣zp⊖x1∣∣Ωp2+i∈O∑∣∣zijc⊖hijc(xi,xj)∣∣Ωiu2+ij∈L∑∣∣zijc⊖hijv(xi,xj)∣∣Ωijc2+ij∈P∑∣∣zijv−hijv(xi,lj,K)∣∣Ωijv2(5)
这里的
⊖
\ominus
⊖ 可以简单的理解为在流形SE(3) 上的差分。