SLAM初始化问题的原理和比较

近段时间重新回顾了SLAM相关的基础知识,顺便将自己在组会上讲的PPT整理成文档同大家分享但谢绝转载。

本文通过回顾SLAM中单目、双目/RGB-D初始化的过程来比较两种不同的初始化的方法,由于SLAM的众多方案中ORB-SLAM2提供了单目、双目和RGB-D三种模式,所以本文中以ORB-SLAM2的初始化方法为例进行阐述。由于我的水平实在有限,若文中出现错误望大家指正。

一 、单目SLAM的初始化

单目ORB-SLAM2的初始化步骤如下:

  1. 匹配初始帧;
  2. 位姿计算;
  3. 三角测量和地图创建;
  4. BA优化。

1 匹配初始帧

这一阶段工作是,通过计算连续两帧图片中能够匹配的特征点数量来判断是否可以作为初始帧,即只有当连续两帧中能够匹配的特征点的数量大于某个值时认为该帧(前一帧)为初始帧;
在ORM-SLAM2中认为连续帧匹配点的数量大于100时可以将前一帧作为初始帧并记录两帧的匹配关系;
以下是在ORB-SLAM2中相关部分的代码,功能为对两帧图片进行ORB特征点提取并进行匹配,当匹配的点的数量大于100时认为前一帧可以作为初始帧;可以通过修改代码中的参数来调整判断是否能够作为初始帧的条件。

int nmatches = matcher.SearchForInitialization(mInitialFrame,mCurrentFrame,mvbPrevMatched,mvIniMatches,100);

2 位姿计算

在得到超过100对匹配点后ORB-SLAM2同时计算适用于平面场景的单应矩阵H和适用于普通场景的基础矩阵F;
方法是:首先由抽样点计算出单次抽样的H(四对点)和F矩阵(八点法),通过若干次RANSAC抽样计算出最优的H和F矩阵;然后选择最合适的结果作为相机的初始位姿。

2.1 八点法

在对极几何约束中两帧图片中一对特征点p_1,p_2是空间中一点P在图片中的投影,一对特征点可以确定空间中的一点P,在第一帧的坐标系下设P的空间位置为P=[X,Y,Z]^T在针孔相机模型中两个像素点p_1,p_2的像素位置为s_1p_1=KP, s_2p_2=K(RP+t);
其中s_1,s_2为对应点的深度,将上式用齐次坐标表示为p_1=KP,p_2=K(RP+t);
在归一化平面上有x_1=K^-1p_1,x_2=K^-1p_2;
其中x_1,x_2是归一化平面上p_1,p_2对应的点。根据上式有x_2=Rx_1+t;
对上式做以下数学变换:
t^ x_2=t^Rx_1
x_2^Tt^x_2=x_2^T t^Rx_1
因为t^ x_2是一个t和x_2都垂直的向量(t^x_2相当于t同x_2做外积 )所以同x_2做内积时等于0,因此上式等于
x_2^Tt^ Rx_1=0
p_1,p_2代入,有:
p_2^TK^{-T} t^RK^{-1}p_1=0
以上的两个式子都成为对极约束,几何意义是P,O_1,O_2共面(O_1,O_2是相机中心),对极约束中包括了旋转和平移,将这个式子中的t^ R记作本质矩阵E,将K^{-T}EK^{-1}记作基础矩阵F,因此对极约束可以记为x_2^TEx_1=p_2^TFp_1=0
所以相机位姿估计问题是求解E或者F然后求解R和t。
对于E矩阵认为是一个3*3的矩阵,因为任意常数乘以E不变,所以E矩阵的自由度是8(实际上E矩阵的自由度是5,但是对于SLAM运算中八点法和五点法区别不大且会增加麻烦所以我们只考虑E矩阵的尺度等价性用八点法来计算),从上式可以看出一对点可以确定一个关于E矩阵的方程,8个自由度就需要8对点来求解E矩阵,这就是八点法。

2.2 计算位姿

在同时计算单应矩阵和基础矩阵后对两个模型进行打分选择得分高的那个模型用来位姿计算,打分是用求得的E矩阵和F矩阵将前一帧上的特征点投影到下一帧并将下一帧的特征点投影到前一帧来计算重投影误差的和,代码如下:

cv::Mat Hn = ComputeH21(vPn1i,vPn2i); //计算单应矩阵        
currentScore = CheckHomography(H21i, H12i, vbCurrentInliers, mSigma); //进行评分
cv::Mat Fn = ComputeF21(vPn1i,vPn2i);//计算基础矩阵         
currentScore = CheckFundamental(F21i, vbCurrentInliers, mSigma);//   进行评分                
float RH = SH/(SH+SF);//计算评分比,如果RH>0.4,选择单应矩阵来恢复相机位姿,否则选择基础矩阵来恢复相机位姿。

在计算完E矩阵和F矩阵并确定模型后,如果是本质矩阵E,进行SVD分解会得到4组可能的R,t,对这些解进行检查求出唯一真正的解;如果是单应矩阵进行分解(数值法、解析法)得到4组解,利用先验信息进行排除得到唯一解。

3 三角测量和地图创建

已知位姿后通过三角测量可以计算出特征点对应的深度从而生成点云;并以第一帧为世界坐标系创建地图并进行数据关联。

三角测量

三角测量指通过在两处观察同一个角的夹角从而确定该点的距离。数学上可以从下式进行求解,设x_1,x_2是两个特征点的归一化坐标,那么存在
s_1x_1=s_2Rx_2+t
现在已知R,t要求解深度s_1,s_2,先求解s_2,对上式左乘x_1^:
s_1x_1^ x_1=0=s_2x_1^ Rx_2+x_1^ t
上式就变成了求解s_2的方程,求解出s_2,s_1也可以求出。但是由于存在噪声,估计的R和t一般不能使上式等于0,因此一般是求最小二乘解而不是零解。

数据关联

地图点与关键帧关联

一个地图点可被多个关键帧观测到,将观测到这个地图点的关键帧与这个地图点进行关联,同时记录关键帧上哪一个特征点与这个地图点有关联。对于单目初始化来说,地图点需要关联第一步创建的两个关键帧;地图点与关键帧上的特征点关联后,计算最合适的描述子来描述该地图点,用于之后跟踪的匹配。

关键帧与地图点关联

一个关键帧上的特征点由多个地图点投影而成,将关键帧与地图点关联。

关键帧与关键帧关联

关键帧之间会共视一个地图点,如果共视的地图点个数越多,说明这两个关键帧之间的联系越紧密。对于某个关键帧,统计其与其他关键帧共视的特征点个数,如果大于某个阈值,那么将这两个关键帧进行关联。

将关键帧和地图点加入到地图中

4 全局BA优化

在初始化的最后一步对只有两个关键帧的地图进行全局BA优化来优化位姿和观测点,以优化后的结果来重新生成点云地图。
同局部BA优化来最小化重投影误差不同,全局BA优化是在求解观测误差的最小二乘。由于观测误差的最小二乘是非线性的,利用了雅克比矩阵和H矩阵的稀疏性进行边缘化来简化运算,其中也使用了图优化理论。
实际上求解观测误差的最小二乘的过程是力较复杂的,在这里就不多赘述了。
值得一提的是,由于单目没有尺度,因此在地图尺寸初始化时选择生成点深度的中位数作为单位尺寸1当作基准来进行地图的尺寸初始化。

二、双目/RGB-D初始化

由于双目和RGB-D相机不需要通过两个相邻帧来恢复地图点深度,所以初始化过程极其相似,只要当前到来帧满足条件即可开始初始化。双目/RGB-D相机已知若干个特征点的深度(通过双目匹配、结构光或者飞行时间等深度计算方法),可以求解二维点对应的世界坐标系下的空间点,即已知若干个3D空间点及其投影的位置;此时使用PnP来估计相机运动;PnP问题的求解方法有很多种,包括P3P, DLT, EPnP, UPnP, BA等,其中ORM-SLAM2使用的PnP方法是EPnP,具体计算方法在这里不多赘述了。

三、 单目-双目/RGB-D初始化的比较

1.初始化的目的是建立三维的空间点和地图并为之后的计算提供初始值;
2.同双目/RGB-D SLAM不同,单目SLAM无法从一帧图片中计算出深度,因此初始化需要两帧连续满足条件的图片来进行初始化;
3.单目SLAM初始化计算位姿是一个对极约束问题,而双目/RGB-D SLAM的初始化计算位姿是一个PnP问题;
4.在初始化成功后单目SLAM和双目SLAM一样是通过PnP来求解相机位姿的;
5.单目SLAM尺度不确定性的原因是因为在通过SVD分解E矩阵求解R,t时计算的t是没有单位的;
6.单目SLAM初始化的过程中对t进行了归一化来固定尺度,即以求解的初始帧的t为单位1,而后的轨迹和平移都将以这个t为单位;
7.单目SLAM的初始化一定要有一定程度的平移,纯旋转是无法完成初始化的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,783评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,360评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,942评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,507评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,324评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,299评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,685评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,358评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,652评论 1 293
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,704评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,465评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,318评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,711评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,991评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,265评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,661评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,864评论 2 335

推荐阅读更多精彩内容