本人讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解的(01)ORB-SLAM2源码无死角解析-接如下:
(01)ORB-SLAM2源码无死角解析-(00)目录_最新无死角讲解:https://blog.csdn.net/weixin_43013761/article/details/123092196
有兴趣的朋友可以加微信 17575010159 相互讨论技术 - 文末公众号也可关注
一、前言
通过前面的博客,我们可以知道如下两个公式(如果为同一相机,则其相机内参
K
1
=
K
2
\mathbf K_1=\mathbf K_2
K1=K2):
E
=
t
∧
R
=
t
×
R
p
0
T
E
p
1
=
0
(1)
\tag{1} \color{blue} \mathbf E=\mathbf t ^{\wedge} \mathbf R=\mathbf t\times \mathbf R~~~~~~~~~\color{blue} p_0^T \mathbf Ep_1=0
E=t∧R=t×R p0TEp1=0(1)
F
=
(
K
0
−
1
E
K
1
−
1
)
v
o
T
F
v
1
=
0
(2)
\tag{2} \color{blue} \mathbf F=(\mathbf K_0^{-1} \mathbf E\mathbf K_1^{-1}) ~~~~~~~~~~ \color{blue} v_o^T\mathbf Fv_1=0
F=(K0−1EK1−1) voTFv1=0(2)其上的
p
0
,
p
1
p_0,p_1
p0,p1 是图像坐标,
v
0
,
v
1
v_0,v_1
v0,v1 是像素坐标;
E
\mathbf E
E 表示本质矩阵 Essential,
F
\mathbf F
F 表示基本矩阵 Fundamental。一般在程序的运行过程中,相机内参是移植的,另外在 ORB-SLAM2 源码中
K
1
=
K
2
\mathbf K_1=\mathbf K_2
K1=K2,因为是同一相机。也就是已知相机内参的情况下,一般会先计算出本质矩阵,然后通过本质矩阵求解
R
t
\mathbf R\mathbf t
Rt。求解本质矩阵的公式如下(同一相机):
E
=
K
F
K
(3)
\tag{3} \color{blue} \mathbf E= \mathbf K \mathbf F \mathbf K
E=KFK(3)
二、公式推导
首先这里我们作如下假设(偏移矩阵与旋转矩阵):
t
=
(
t
1
,
t
2
,
t
3
)
R
=
(
r
1
,
r
2
,
r
3
)
(4)
\tag{4} \color{blue} \mathbf t=(t_1,t_2,t_3)~~~~~~~~~~~~~\mathbf R=(\mathbf r_1,\mathbf r_2,\mathbf r_3)
t=(t1,t2,t3) R=(r1,r2,r3)(4)那么我们根据公式(1)可得:
E
=
t
R
=
(
t
∧
r
1
,
t
∧
r
2
,
t
∧
r
3
)
(5)
\tag{5} \color{blue} \mathbf E=\mathbf t \mathbf R=\mathbf(\mathbf t^{\wedge} \mathbf r_1,\mathbf t^{\wedge}\mathbf r_2,\mathbf t^{\wedge}\mathbf r_3)
E=tR=(t∧r1,t∧r2,t∧r3)(5)根据前面我们的推论,我们知道
,
E
,\mathbf E
,E 的奇异矩阵必是
d
i
a
g
(
σ
1
,
σ
2
,
0
)
=
(
t
1
2
+
t
2
2
+
t
3
2
,
t
1
2
+
t
2
2
+
t
3
2
,
0
)
diag(\sigma_{1}, \sigma_{2}, 0)=(t_{1}^{2}+t_{2}^{2}+t_{3}^{2}, t_{1}^{2}+t_{2}^{2}+t_{3}^{2}, 0)
diag(σ1,σ2,0)=(t12+t22+t32,t12+t22+t32,0),且