用織夢(mèng)做的網(wǎng)站一般后臺(tái)個(gè)人主頁(yè)網(wǎng)頁(yè)設(shè)計(jì)
1.ORB-SLAM2的總體框架是怎樣的
ORB-SLAM2一共有三個(gè)線程,分別是Tracking、Local Mapping、Loop Closing線程,,其中Tracking負(fù)責(zé)完成關(guān)鍵點(diǎn)提取,并進(jìn)行幀間匹配,同時(shí)初步選取關(guān)鍵幀;Local Mapping線程主要進(jìn)行關(guān)鍵點(diǎn)篩選和地圖點(diǎn)剔除,同時(shí)回環(huán)進(jìn)行一個(gè)局部?jī)?yōu)化;Loop Closing線程主要進(jìn)行檢測(cè)。
2.ORB-SLAM2怎樣進(jìn)行初始化
ORB-SLAM2在進(jìn)行跟蹤前需要先完成初始化,初始化包括相機(jī)初始幀位姿,新建地圖,新建關(guān)鍵幀等,ORB-SLAM2一共提供三種接口,分別為單目,雙目,RGBD,其中單目初始化最為復(fù)雜,具體步驟如下:
(1)尋找匹配點(diǎn):對(duì)前兩幀圖像提取ORB特征關(guān)鍵點(diǎn),進(jìn)行特征匹配,如果匹配點(diǎn)個(gè)數(shù)小于100認(rèn)為匹配失敗;
(2)由匹配點(diǎn)恢復(fù)位姿:利用八點(diǎn)法同時(shí)計(jì)算基礎(chǔ)矩陣和本質(zhì)矩陣,通過計(jì)算評(píng)分比選擇合適的結(jié)果來作為初始位姿
(3)創(chuàng)建初始地圖:根據(jù)前兩幀位姿,利用三角法恢復(fù)三維地圖點(diǎn),創(chuàng)建初始如圖,將這兩幀都設(shè)為關(guān)鍵幀,并完成關(guān)鍵幀與關(guān)鍵幀,關(guān)鍵幀與地圖點(diǎn)的關(guān)聯(lián),對(duì)上述兩個(gè)關(guān)鍵幀和地圖點(diǎn)進(jìn)行一次全局BA,并選擇地圖點(diǎn)深度的中位數(shù)作為單位尺度1來進(jìn)行地圖的尺寸初始化?
其中,單目初始化深度是根據(jù)三角化完成的,因此只有純旋轉(zhuǎn)是不夠的,還需要進(jìn)行平移。
雙目和RGBD初始化不同的是,初始化不需要三角化來恢復(fù)深度,而是通過計(jì)算左右目的差別得到深度和采取特定的傳感器,因此只需要一個(gè)關(guān)鍵幀圖像,不具有上面(3)中關(guān)鍵幀間關(guān)聯(lián)和全局BA的操作
3.ORB-SLAM2是如何進(jìn)行Tracking的
Tracking的目的是兼顧計(jì)算速度和魯棒性使得當(dāng)前幀中的特征點(diǎn)可以跟蹤匹配到上一幀,在ORB-SLAM2中一共使用了三種模型,分別是(1)運(yùn)動(dòng)模型;(2)關(guān)鍵幀模型;(3)重定位模型
(1)運(yùn)動(dòng)模型:假設(shè)相機(jī)運(yùn)動(dòng)是勻速的,根據(jù)上一幀的速度和位姿估計(jì)當(dāng)前幀的位姿,然后進(jìn)行跟蹤匹配,也就是把地圖點(diǎn)再投影到當(dāng)前幀進(jìn)行匹配,然后就可以根據(jù)BA來進(jìn)行優(yōu)化了,相當(dāng)于經(jīng)典的PnP。如果幀與幀之間都采用暴力匹配的話,運(yùn)行速度會(huì)受到很大限制,因此作者采用跟蹤匹配加速了匹配過程(就是將上一幀的特征點(diǎn)投影到下一幀中,然后在投影點(diǎn)的附近區(qū)域進(jìn)行搜索)
(2)關(guān)鍵幀模型:和上一個(gè)關(guān)鍵幀匹配,采用BOW進(jìn)行匹配加速
(3)重定位模型:和所有關(guān)鍵幀匹配,采用BOW進(jìn)行匹配加速
這幾個(gè)模型的使用規(guī)則是,(1)不好則使用(2),(2)不好則使用(3)? ? ? ? ·
在完成上述三個(gè)模型的匹配后,程序還會(huì)將局部地圖點(diǎn)投影到當(dāng)前幀中實(shí)現(xiàn)一個(gè)匹配,目的是對(duì)局部地圖和局部關(guān)鍵幀進(jìn)行更新(用于優(yōu)化,以提升速度)
4.ORB_SLAM2如何選取關(guān)鍵幀
關(guān)鍵幀的選取標(biāo)準(zhǔn)是:
(1)距離上一次重定位至少距離20幀
(2)局部建圖線程空閑,或者距離上一次加入關(guān)鍵幀過去了20幀,防止圖像重疊度太高,并且局部建圖線程有空閑處理新的關(guān)鍵幀。如果需要關(guān)鍵幀插入,而Local Mapping建圖線程忙,則發(fā)送信號(hào)到Local Mapping建圖線程,停止局部地圖優(yōu)化,使得新的關(guān)鍵幀可以被及時(shí)處理
(3)當(dāng)前跟蹤至少50個(gè)點(diǎn),確保了跟蹤定位的精確度
(4)當(dāng)前幀跟蹤到Local Map中參考幀的地圖點(diǎn)數(shù)量少于90%,確保關(guān)鍵幀之間有明顯的視覺變化
這里只是判斷是否需要將當(dāng)前幀加入到關(guān)鍵幀,并沒有真正加入到全局地圖,因?yàn)門racking線程的主要作用就是局部定位,而處理地圖中的關(guān)鍵幀、地圖點(diǎn),以及如何加入、如何刪除的工作是在Local Mapping線程進(jìn)行的
5.ORB-SLAM2中有哪些(非線性/后端)優(yōu)化的相關(guān)操作
一共有五種,分別是局部BA優(yōu)化、全局BA優(yōu)化、閉環(huán)位姿優(yōu)化、全局位姿優(yōu)化、單幀BA優(yōu)化
(1)局部BA優(yōu)化:運(yùn)行在Local Mapping線程,在剔除關(guān)鍵幀之前進(jìn)行局部地圖優(yōu)化,當(dāng)新的關(guān)鍵幀加入到convisibility graph時(shí),作者在關(guān)鍵幀附近進(jìn)行一次局部?jī)?yōu)化,優(yōu)化目標(biāo)是最小化重投影誤差
(2)全局BA優(yōu)化:用于單目初始化的CreateInitialMapMonocular函數(shù)以及閉環(huán)優(yōu)化的RunGlobalBundleAdjustment函數(shù)(在閉環(huán)結(jié)束前新開一個(gè)線程,用于全劇優(yōu)化)
(3)閉環(huán)位姿優(yōu)化:當(dāng)檢測(cè)到閉環(huán)時(shí),閉環(huán)連接的兩個(gè)關(guān)鍵幀的位姿需要通過SIM3/SE3優(yōu)化,以使得其尺度一致。優(yōu)化求解兩幀之間的相似變換矩陣,使得二維對(duì)應(yīng)點(diǎn)的投影誤差小
(4)全局位姿優(yōu)化:這相當(dāng)于《視覺SLAM十四講》中的Pose Graph,值得注意的是如果是單目的話這里優(yōu)化的是Sim3,如果是雙目或者RGBD的話這里優(yōu)化的SE3,殘差定義為,ORB SLAM2中優(yōu)化的對(duì)象是Essential Graph,Essential Graph指的是所有的關(guān)鍵幀頂點(diǎn),但是優(yōu)化邊大大減少,包括spanning tree(生成樹)和共視權(quán)重θ > 100 的邊,以及閉環(huán)連接邊,閉環(huán)調(diào)整CorrectLoop過程中的優(yōu)化。
(5)單幀BA優(yōu)化:只優(yōu)化當(dāng)前幀pose,地圖點(diǎn)固定,用于LocalTracking中運(yùn)動(dòng)模型跟蹤、參考幀跟蹤、地圖跟蹤TrackLocalMap、重定位,每進(jìn)行過一次PnP投影操作將地圖點(diǎn)投影到當(dāng)前平面上之后,都會(huì)進(jìn)行一次PoseOptimization位姿優(yōu)化,通過BA優(yōu)化重投影誤差
上面幾張圖把問題描述得非常清楚,紅色的是優(yōu)化的對(duì)象,灰色的是固定的對(duì)象,通過對(duì)比就能知道各個(gè)優(yōu)化方法之間的區(qū)別。
6.ORB-SLAM2維護(hù)了哪些圖
(1)Covisibility Graph:共視圖,是一個(gè)無向有權(quán)圖,該圖中每個(gè)頂點(diǎn)就是關(guān)鍵幀,如果兩個(gè)關(guān)鍵幀有相同的地圖點(diǎn)(即它們有共視點(diǎn)),就把這兩個(gè)頂點(diǎn)連接起來,連接邊的權(quán)重就是兩個(gè)關(guān)鍵幀共享的3D點(diǎn)的個(gè)數(shù)。局部BA優(yōu)化依賴的就是一個(gè)局部的共視圖,全局BA優(yōu)化依賴的就是一個(gè)全局的共視圖,總之共視圖在ORB-SLAM2里用的很多。
(2)Essential Graph:為了在優(yōu)化階段減小計(jì)算量,ORB-SLAM2作者提出了Essential Graph的概念,主要用它來進(jìn)行全局位姿優(yōu)化。它是共視圖的子集,即Covisibity Graph的最小生成樹(MST)。該圖中頂點(diǎn)是關(guān)鍵幀,但只連接某個(gè)關(guān)鍵幀和與之擁有最多共享的地圖點(diǎn)的關(guān)鍵幀,這樣能夠連接所有的頂點(diǎn),但是邊會(huì)減少很多。
(3)Spanning Graph:生成樹,是代價(jià)最小的全聯(lián)通圖,Essential Graph就是基于Sanning Graph生成的。
如下圖所示可以觀察他們的區(qū)別:
7. ORB SLAM2中是如何對(duì)地圖點(diǎn)進(jìn)行篩選的?
在Local Mapping線程中在進(jìn)行局部BA之前會(huì)先對(duì)地圖點(diǎn)進(jìn)行剔除,剔除規(guī)則如下:
(1)該地圖點(diǎn)是壞點(diǎn),直接從檢查列表去掉;
(2)跟蹤(匹配上)到該地圖點(diǎn)的普通幀幀數(shù)(Increase Found)小于應(yīng)該觀測(cè)到該地圖點(diǎn)的普通幀數(shù)量(25%*Increase Visible),即比值mnFound/mnVisible小于0.25,設(shè)置為壞點(diǎn),并從檢查列表去掉。比值低說明這樣的地圖點(diǎn)該地圖點(diǎn)雖在視野范圍內(nèi),但很少被普通幀檢測(cè)到;
(3)從添加該地圖點(diǎn)的關(guān)鍵幀算起,當(dāng)前關(guān)鍵幀至少是第三個(gè)添加該地圖點(diǎn)的關(guān)鍵幀的條件下,看到該地圖點(diǎn)的幀數(shù)<=2(雙目和RGBD模式是幀數(shù)<=3),設(shè)置為壞點(diǎn),并從檢查列表去掉;因此在地圖點(diǎn)剛建立的階段,要求比較嚴(yán)格,很容易被剔除;而且單目的要求更嚴(yán)格,需要三幀都看到;
(4)若從添加該地圖點(diǎn)的關(guān)鍵幀算起,一共有了大于三個(gè)關(guān)鍵幀,還存在列表中,則說明該地圖點(diǎn)是高質(zhì)量的,從檢查列表中去掉。
總而言之就是太少幀看到的地圖點(diǎn)是壞點(diǎn)都要剔除掉,而看得多的則是高質(zhì)量點(diǎn)
8. ORB SLAM2中是如何對(duì)關(guān)鍵幀進(jìn)行剔除的?
候選的關(guān)鍵幀是LocalMapping中當(dāng)前處理的關(guān)鍵幀的共視關(guān)鍵幀,不包括第一幀關(guān)鍵幀與當(dāng)前關(guān)鍵幀。如果一個(gè)關(guān)鍵幀檢測(cè)到的90%的地圖點(diǎn),在其他不少于三個(gè)具有相同或更精確尺度的關(guān)鍵幀里面都被檢測(cè)到,就認(rèn)定該關(guān)鍵幀冗余(該關(guān)鍵幀的存在提供的地圖點(diǎn)觀測(cè)信息有限),并剔除。
9. ORB SLAM2中Loop Closing的具體實(shí)現(xiàn)流程是怎樣的?
首先是通過回環(huán)檢測(cè)(Bow得分)和共視關(guān)系檢查從所有關(guān)鍵幀中篩選出一組和當(dāng)前幀有可能形成閉環(huán)的候選幀,然后利用相似求解器Sim3Solver求解出候選幀與當(dāng)前幀之間的相似變換(注意這里是單目相似變換,而雙目或者RGBD是剛體變換),利用相似變換找出更多的匹配地圖點(diǎn),然后進(jìn)行閉環(huán)位姿優(yōu)化(對(duì)應(yīng)5中的回答),如果優(yōu)化結(jié)果較好的話就不再判斷其他候選幀。然后就是閉環(huán)矯正,通過就出來的相似變換對(duì)當(dāng)前幀進(jìn)行位姿調(diào)整并且傳播到當(dāng)前幀相連的關(guān)鍵幀,回環(huán)兩側(cè)的關(guān)鍵幀完成對(duì)齊,然后利用調(diào)整過的位姿更新這些相連關(guān)鍵幀對(duì)應(yīng)的地圖點(diǎn),同時(shí)在Covisibility Graph里面增加閉環(huán)邊,然后進(jìn)行Essential Graph的優(yōu)化(即全局位姿優(yōu)化),當(dāng)前幀與閉環(huán)匹配幀之間的邊不進(jìn)行優(yōu)化,最后再來一個(gè)全局BA優(yōu)化即完成了Loop Closing的全部流程。
10.什么是Sim3優(yōu)化
Sim3優(yōu)化是單目特有的優(yōu)化方式,因?yàn)閱文砍叨染哂胁淮_定性,對(duì)于空間點(diǎn)坐標(biāo)有如下相似變換:
于是我們建立了一個(gè)相似變換群Sim(3)
其對(duì)應(yīng)的李代數(shù)如下
相比于歐式群的李代數(shù)其多了一個(gè)σ,變成了一個(gè)七維向量,而不是六維,關(guān)聯(lián)Sim(3) 和s i m ( 3 )的仍是指數(shù)映射和對(duì)數(shù)映射,指數(shù)映射為
其中
微分求導(dǎo)模型和擾動(dòng)求導(dǎo)模型對(duì)其同樣適用。Sim3優(yōu)化其實(shí)就是Pose Graph優(yōu)化,其優(yōu)化目標(biāo)殘差是
其優(yōu)化效果如下:
11.如何理解視覺重投影誤差
對(duì)于單目視覺來說,3D點(diǎn)是通過兩幀圖像恢復(fù)得到的。3D點(diǎn)通過相機(jī)位姿重新投影到相機(jī)平面,與其對(duì)應(yīng)像素點(diǎn)之間的像素差被稱為重投影誤差,也算是觀察誤差,投影的相機(jī)平面一般都是使用歸一化平面。最終要優(yōu)化的是重投影誤差,理想情況下像素差是0。
12.簡(jiǎn)述PnP原理,適用的場(chǎng)景是什么?
答:PnP是已知n個(gè)3D點(diǎn)坐標(biāo)和其對(duì)應(yīng)的2D相機(jī)投影點(diǎn)坐標(biāo),求解相機(jī)位姿,其中至少需要3對(duì)點(diǎn)(3D-2D)可求解(平移+旋轉(zhuǎn)一共6個(gè)自由度)。
其中求解方法有:DLT(直接線性變換法,至少6對(duì)點(diǎn),因?yàn)樾D(zhuǎn)平移矩陣3*4個(gè)未知量),P3P(余弦定理、三角形相似),EPnP等
13.關(guān)鍵幀的刪除
在局部建圖線程,檢查到當(dāng)前關(guān)鍵幀為冗余關(guān)鍵幀了(里面有90%的地圖點(diǎn)都被至少其他三幀觀察到過,就會(huì)設(shè)置為冗余關(guān)鍵幀進(jìn)行刪除)
14. 解釋SLAM中的綁架問題
綁架問題就是重定位,是指機(jī)器人在缺少之前位置信息的情況下,如何去確定當(dāng)前位姿。例如當(dāng)機(jī)器人被安置在一個(gè)已經(jīng)構(gòu)建好地圖的環(huán)境中,但是并不知道它在地圖中的相對(duì)位置,或者在移動(dòng)過程中,由于傳感器的暫時(shí)性功能故障或相機(jī)的快速移動(dòng),都導(dǎo)致機(jī)器人先前的位置信息的丟失,在這種情況下如何重新確定自己的位置。
初始化綁架可以闡述為一種通常狀況初始化問題,可使用蒙特卡洛估計(jì)器,即粒子濾波方法,重新分散粒子到三維位形空間里面,被里程信息和隨機(jī)擾動(dòng)不斷更新,初始化粒子聚集到/收斂到可解釋觀察結(jié)果的區(qū)域。追蹤丟失狀態(tài)綁架,即在綁架發(fā)生之前,系統(tǒng)已經(jīng)保存當(dāng)前狀態(tài),則可以使用除視覺傳感器之外的其他的傳感器作為候補(bǔ)測(cè)量設(shè)備
參考鏈接:https://blog.csdn.net/weixin_46135347/article/details/120160599
https://www.cnblogs.com/linglingdog/p/15874424.html
https://blog.csdn.net/weixin_44580210/article/details/90760584