日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

Slam设计模式

發(fā)布時(shí)間:2024/8/1 asp.net 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Slam设计模式 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

對(duì)于“面向?qū)ο蟆钡某绦蛟O(shè)計(jì)者來說,有本必備的書的叫做《設(shè)計(jì)模式-可復(fù)用面向?qū)ο筌浖幕A(chǔ)》。那么在slam的實(shí)現(xiàn)中有沒有這一種或者幾種可以總結(jié)歸納的設(shè)計(jì)模式呢?
我們?cè)诳匆恍㏒lam的書的時(shí)候,有些要么就是介紹很多狀態(tài)估計(jì)的理論,要么就是介紹多視圖幾何的各種視覺理論。那么我們?cè)诳戳诉@些理論之后,仍然無法下手,那么一個(gè)典型的好的Slam的代碼的基本結(jié)構(gòu)是什么樣的呢?一個(gè)slam代碼的基本結(jié)構(gòu)是怎樣的?有哪些基本要素?
一個(gè)自然的想法就是從圖像中獲取想要的定位的信息。在機(jī)器人移動(dòng)的過程中相機(jī)捕捉到一個(gè)圖像序列。在這個(gè)圖像序列中機(jī)器人看到周圍的景物是在按照一定的規(guī)律移動(dòng)和變化的,那么景物移動(dòng)的規(guī)律和機(jī)器人自身移動(dòng)的規(guī)律有什么關(guān)系呢?這個(gè)關(guān)系可以根據(jù)空間變換來確定。
那么如何根據(jù)圖像序列的內(nèi)容提取景物的移動(dòng)規(guī)律呢?可以跟蹤圖像上景物的一些點(diǎn),圖像很多點(diǎn)的統(tǒng)計(jì)規(guī)律可以表征景物的移動(dòng)規(guī)律。這就是提取特征點(diǎn)進(jìn)行跟蹤或者直接使用灰度點(diǎn)跟蹤的意義所在,根據(jù)我們使用的點(diǎn)的方式不容,可以看到兩種不同的slam前端方法——直接法和特征法。
那么如何實(shí)現(xiàn)這樣的跟蹤器呢?slam算法在讀到一張圖像之后,首先把當(dāng)前圖像的點(diǎn)和前一幀圖像的點(diǎn)對(duì)應(yīng)起來,那么需要多少個(gè)點(diǎn)對(duì)應(yīng)呢?怎么實(shí)現(xiàn)點(diǎn)對(duì)應(yīng)呢?基于特征的方法是提取圖像中的特征點(diǎn),用于匹配不同圖像中相同的點(diǎn),這是一種思路,常用的有SIFT ORB等。另外一個(gè)思路是由于機(jī)器人的運(yùn)動(dòng)相對(duì)于圖像的幀率較慢的時(shí)候,圖像的內(nèi)容變化較小,因此在局部搜索可以找到上一幀圖像的點(diǎn)的位置,這就是直接法的思路。
我們這里引入一個(gè)Frame結(jié)構(gòu),為了實(shí)現(xiàn)上述的跟蹤器,第一步是讀取圖像,通過圖像的數(shù)據(jù)估計(jì)當(dāng)前幀對(duì)應(yīng)的位姿狀態(tài)。場(chǎng)景中相同的點(diǎn)在不同的視角中構(gòu)成一個(gè)基礎(chǔ)矩陣的關(guān)系,一個(gè)圖像幀的圖像平面和另一幀的圖像的平面之間構(gòu)成單應(yīng)矩陣的關(guān)系。使用最小二乘法通過圖像點(diǎn)可以計(jì)算得到單應(yīng)矩陣和基礎(chǔ)矩陣,使用矩陣奇異值分解(SVD)可將單應(yīng)矩陣或者基礎(chǔ)矩陣分解恢復(fù)出位姿變化。這些內(nèi)容的實(shí)現(xiàn)可以放到Frame結(jié)構(gòu),也可以像ORB那樣專門放到一個(gè)Initializer里邊。Frame需要和Map完成互動(dòng)。除了需要計(jì)算當(dāng)前幀的位姿,還要完成特征點(diǎn)的三維重建。有的方法使用了一個(gè)深度濾波器,如SVO,LSD中考慮了極線與深度的夾角,這樣會(huì)得到一個(gè)半稠密的地圖。因?yàn)槌砻艿牡貓D點(diǎn)想要試試完成一般是需要使用GPU來完成的。圖像的上的特征點(diǎn)和空間中的三維點(diǎn)如何對(duì)應(yīng)呢?常用的方法是PnP。PnP是已知三維點(diǎn)計(jì)算相機(jī)位姿,三維重建是已知相機(jī)位姿計(jì)算三維點(diǎn)。
PnP的計(jì)算中需要知道相機(jī)的內(nèi)參數(shù),這里引入第二個(gè)結(jié)構(gòu)—-相機(jī)模型Camera,他保存并管理相機(jī)的參數(shù),進(jìn)行一些圖像空間到世界空間的轉(zhuǎn)換,完成圖像點(diǎn)(關(guān)鍵特征點(diǎn))的去畸變。
如何解決累積誤差問題?常用的方法是使用路標(biāo)點(diǎn)和當(dāng)前圖像點(diǎn)進(jìn)行匹配估計(jì)相機(jī)的運(yùn)動(dòng),這時(shí)候需要存儲(chǔ)這些路標(biāo)點(diǎn)的描述子。另外一方面在LSD-SLAM, SVO等方法中,是怎樣存儲(chǔ)路標(biāo)點(diǎn)的呢?這里引入一個(gè)結(jié)構(gòu)叫做Mappoint。
如何評(píng)價(jià)一個(gè)路標(biāo)點(diǎn)的好壞程度?如何保存并管理這些路標(biāo)點(diǎn)呢?路標(biāo)點(diǎn)的添加刪除等管理工作可以放入另外一個(gè)結(jié)構(gòu)Map中進(jìn)行。地圖中以何種形式保存這些路標(biāo)呢,一種方法是路標(biāo)放在圖像幀里,作為關(guān)鍵幀KeyFrame進(jìn)行保存和提取。關(guān)鍵幀串起來成為一個(gè)地圖。這樣做的好處就是我們使用了關(guān)鍵幀繼承了幀的性質(zhì),便于以后特征點(diǎn)匹配。在前邊累計(jì)相機(jī)運(yùn)動(dòng)的時(shí)候,參考幀是前一幀圖像,這里的參考幀是關(guān)鍵幀的圖像。關(guān)鍵幀是相機(jī)運(yùn)動(dòng)過程中保留了重要信息的最小集合中的元素。理論上關(guān)鍵幀是沒有重疊的。后端優(yōu)化的對(duì)象主要是關(guān)鍵幀。
那么我們換一個(gè)角度來看問題,從時(shí)間軸上,我們關(guān)心的有兩個(gè)狀態(tài),一個(gè)當(dāng)前的時(shí)刻,另外一個(gè)以前的時(shí)刻。對(duì)于當(dāng)前的時(shí)刻我們要保持實(shí)時(shí)性。對(duì)于以前的時(shí)刻我們要通過他來提高精度。這就是為什么要分開來做前端和后端的問題。 事實(shí)上,優(yōu)化并非僅僅存在于后端,優(yōu)化存在于前端的運(yùn)動(dòng)估計(jì)中(基礎(chǔ)矩陣計(jì)算,于運(yùn)動(dòng)估計(jì)的計(jì)算),后端中關(guān)鍵幀的優(yōu)化(BA)。這些優(yōu)化中形成矩陣結(jié)構(gòu)H是稀疏的(對(duì)應(yīng)圖網(wǎng)絡(luò)),可以顯式的利用圖優(yōu)化表示。H的稀疏性為圖優(yōu)化方法的SLAM提供了實(shí)時(shí)性的保證。這里可以引入一個(gè)結(jié)構(gòu)Optimizater,用來完成上述內(nèi)容中提到的各種優(yōu)化工作。我們這里總結(jié)一下可以優(yōu)化的步驟是那些呢?
? 三維點(diǎn)(點(diǎn)的深度)的優(yōu)化(三角測(cè)量)
? 后端的關(guān)鍵幀中的位姿和路標(biāo)點(diǎn)的BA(關(guān)鍵幀的邊緣化)
? 初始化過程的單應(yīng)矩陣和基礎(chǔ)矩陣的優(yōu)化
? PnP計(jì)算相機(jī)位姿
注意
有些VO的算法中由于后端很小,所以把后端的內(nèi)容一起移到了前端,然后每一幀都做一次BA,這樣要求H矩陣(BA中的被優(yōu)化結(jié)構(gòu))一定要保持稀疏性。
維護(hù)一個(gè)地圖的另外一個(gè)好處就是即使當(dāng)前跟蹤的某一幀丟失,之后跟蹤上的幀仍然可以恢復(fù)出運(yùn)動(dòng)。這樣的前提是一個(gè)不斷更新的地圖,而且這個(gè)地圖是正確的。這樣的地圖可以是局部的也可以全局的。全局地圖的規(guī)模較大(更像SLAM,可以完成閉環(huán)),計(jì)算量比較大,因此適用于一些要求精確定位的地方,對(duì)于一些計(jì)算能力弱的場(chǎng)合適用于局部地圖(更像一個(gè)VO,不能做閉環(huán))。在局部地圖中,考慮需要丟掉一些之前的幀,這個(gè)過程叫做marginalization(邊緣化)。
跟蹤器的狀態(tài)有幾種,1. 初始化,順利跟蹤,丟失。因此我們還需要一個(gè)初始化的過程,這個(gè)過程中有哪些內(nèi)容?對(duì)第一/二幀圖像的匹配,單應(yīng)和基礎(chǔ)矩陣的計(jì)算。這個(gè)其實(shí)在Frame結(jié)構(gòu)中涉及過。那么可以構(gòu)建一個(gè)Initializer,完成相應(yīng)的工作。
到這里,slam只是完成了一部分,可以稱之為前端吧。我們?cè)谥蟮膬?nèi)容接續(xù)介紹關(guān)于后端的設(shè)計(jì)方法和一些模塊的關(guān)系總結(jié)。
這里我們繼續(xù)完成slam的前后端的設(shè)計(jì)
首先我們給出slam程序中各模塊的主要組成部分。
我們先理清楚到底他們干了些什么,然后再說他們?cè)趺磳?shí)現(xiàn)的。其實(shí)吧,現(xiàn)代的CPU對(duì)多線程的代碼支持的越來越好,因?yàn)闆]法提速,只能多個(gè)人(CPU核)干。所以在PTAM把Tracking 和 Maping 分開完之后,大家一下子就覺得這樣玩真的不錯(cuò),一窩蜂都轉(zhuǎn)成這種玩法。
所以按照國(guó)際慣例,我們還是把前后端分開處理,前端是一個(gè)跟蹤器,后端干的事還挺多的,什么建圖啊,BA,閉環(huán)啊,各種,看著都累。
跟蹤器(定位的過程)
跟蹤顧名思義就是上一幀里邊的點(diǎn)我們特別關(guān)心他們現(xiàn)在在哪里,然后呢,怎么知道他們?nèi)ツ睦锬?#xff1f;有兩種方法,一種使用局部范圍的直接搜索,另外只是使用特征描述子進(jìn)行匹配。匹配正確的點(diǎn)用來計(jì)算他們的幾何關(guān)系,根據(jù)幾何關(guān)系可以恢復(fù)出相機(jī)的運(yùn)動(dòng),進(jìn)而重建出世界中的三維點(diǎn)。這樣到來新的一幀之后我們都可以提取到一些新的三維點(diǎn)。另外我們可以對(duì)應(yīng)三維點(diǎn)和圖像中的點(diǎn)進(jìn)行計(jì)算相機(jī)的姿態(tài)。這就是跟蹤器的主要目的。
以上內(nèi)容是假設(shè)跟蹤器在順利跟蹤的時(shí)候要干的事,那么問題來了,如果跟蹤不順利或者這就是第一幀那怎么辦?
所以我們把跟蹤分為三種狀態(tài),一種是第一幀,叫做初始狀態(tài),其實(shí)在單目中第二幀也屬于這個(gè)狀態(tài),因?yàn)榈谝粠裁匆哺刹涣?#xff0c;就只能提特征,第二幀來了才有匹配等等。
如果跟蹤失敗,那么這個(gè)狀態(tài)我們成為lost,然后對(duì)應(yīng)的措施是relocalization。 我們看到的那篇posenet就是干這個(gè)的。
在跟蹤中初始化的時(shí)候,計(jì)算匹配點(diǎn)的集合關(guān)系使用的是的一般是單應(yīng)矩陣和基礎(chǔ)矩陣。
在跟蹤時(shí)候匹配當(dāng)前幀和路標(biāo)點(diǎn),一個(gè)圖像中的點(diǎn),一個(gè)三維空間中的點(diǎn),因此用的是PnP,優(yōu)化Pose,路標(biāo)點(diǎn)這里是假設(shè)為靜止的,只有pose被優(yōu)化。
那么優(yōu)化完了,我們可以得到測(cè)量數(shù)據(jù)了,但是為了完成下一次的跟蹤,我們還有一些工作要做。
1. update Local KeyFrame
2. update Local Points
為什么?我們先看他到底做了哪些事就是他的目的是什么。在更新KeyFrame中增加了路標(biāo)點(diǎn)對(duì)當(dāng)前關(guān)鍵幀的索引。我們是通過正匹配找到的這些路標(biāo)點(diǎn),然后還沒有整理好這些路標(biāo)點(diǎn)和當(dāng)前關(guān)鍵幀的所有關(guān)系,然后就沒法使用這個(gè)幀進(jìn)行匹配了,因?yàn)槲覀兛恳粋€(gè)參考關(guān)鍵幀找到他們的路標(biāo)點(diǎn)。
初始化狀態(tài)
其實(shí)初始化的內(nèi)容還是比較簡(jiǎn)單,因?yàn)楦傻亩嗔司腿菀赘傻木?#xff0c;干的久,實(shí)時(shí)性就沒了,所以只有一件事就是計(jì)算前兩者之間的相對(duì)位姿。一些方法只使用Homograph,有一些方法還要加上基礎(chǔ)矩陣(極線約束),然后就是雙視BA,有一些方法(ORB),指明了要做一個(gè)full BA(為了提高精度),為啥? 因?yàn)殚_始的時(shí)候最好基礎(chǔ)打的好一些,有信心一些,不然以后的誤差太大,就玩不下去啦。
Lost state
地圖(BA優(yōu)化)
主要有2個(gè)待優(yōu)化的內(nèi)容,一是軌跡中位姿,另外一個(gè)是圖中的路標(biāo)點(diǎn),不過很多時(shí)候路標(biāo)經(jīng)過幾次優(yōu)化之后就會(huì)不動(dòng)了,那么這個(gè)時(shí)候就會(huì)使用一個(gè)pose graph來降低優(yōu)化的規(guī)模,在ORB中 Covisibility Graph建模這些位姿,就是用路標(biāo)點(diǎn)個(gè)數(shù)表明位姿節(jié)點(diǎn)的權(quán)重的一個(gè)圖。
BA,這個(gè)東西一般是放在整個(gè)過程的最后,就是別人都折騰過(優(yōu)化)一遍之后(緊著那些保證實(shí)時(shí)性的那些東西盡快的先搞出點(diǎn)東西來用著),把所有的東西放到一個(gè)優(yōu)化器全部?jī)?yōu)化。這樣做的好處就是優(yōu)化過后的各部分都會(huì)精度提到,便于以后放心的使用這些東西,剔除掉了不好的outliers,把網(wǎng)絡(luò)之間的關(guān)系理順。
由于跟蹤器和建圖的過程是分線程實(shí)現(xiàn)的,因此兩者之間的同步和協(xié)調(diào)這里也要做一下,主要配合tracker,當(dāng)然tracker因?yàn)榧婢邔?shí)時(shí)性的重要任務(wù),那么這些工作就丟給了mapping。
mapping其實(shí)也很忙,tracker一直再把關(guān)鍵幀丟過來,mapping根本就來不及處理,只好先 放到一個(gè)地方存著,有一個(gè)隊(duì)列deque。
功能 函數(shù)
計(jì)算關(guān)鍵幀特征點(diǎn)的BoW映射,將關(guān)鍵幀插入地圖 ProcessNewKeyFrame()
剔除ProcessNewKeyFrame函數(shù)中引入的不合格MapPoints MapPointCulling()
相機(jī)運(yùn)動(dòng)過程中與相鄰關(guān)鍵幀通過三角化恢復(fù)出一些MapPoints CreateNewMapPoints()
檢查并融合當(dāng)前關(guān)鍵幀與相鄰幀(兩級(jí)相鄰)重復(fù)的MapPoints SearchInNeighbors()
已經(jīng)處理完隊(duì)列中的最后的一個(gè)關(guān)鍵幀,并且閉環(huán)檢測(cè)沒有請(qǐng)求停止 LocalMapping
local BA Optimizer::LocalBundleAdjustment
檢測(cè)并剔除當(dāng)前幀相鄰的關(guān)鍵幀中冗余的關(guān)鍵幀 KeyFrameCulling();
將當(dāng)前幀加入到閉環(huán)檢測(cè)隊(duì)列中 InsertKeyFrame
相機(jī)
? 相機(jī)的內(nèi)參數(shù)
? 相機(jī)的畸變參數(shù)
? 世界空間到圖像空間的變換
? 圖像空間到世界空間的逆轉(zhuǎn)換
? 圖像點(diǎn)(關(guān)鍵特征點(diǎn))的去畸變
圖像幀結(jié)構(gòu)
? 圖像的數(shù)據(jù)
? frame ID
? frame 位姿
? 圖像的特征點(diǎn)(關(guān)鍵點(diǎn))提取,特征匹配
? 尺度因子(這個(gè)是特征里的對(duì)應(yīng)了描述子的圖像的層)
? 獲取相機(jī)的光心
? 計(jì)算單應(yīng)矩陣
? 計(jì)算基礎(chǔ)矩陣
? 單應(yīng)矩陣分解相機(jī)運(yùn)動(dòng)
? 基礎(chǔ)矩陣分解相機(jī)運(yùn)動(dòng)
? 根據(jù)2幀圖像三角測(cè)量點(diǎn)的三維位置(三維重建)
? 計(jì)算詞袋
尺度的問題
特征法中,把尺度作為幀的狀態(tài),和深度關(guān)聯(lián),那么在DSO中由于殘差計(jì)算的時(shí)候已經(jīng)考慮了尺度。ORB中同時(shí)具備了Frame和關(guān)鍵幀的結(jié)構(gòu),所以關(guān)鍵幀中包括了三個(gè)ID號(hào),當(dāng)前幀ID,關(guān)鍵幀ID,上一關(guān)鍵幀ID
Mappoint/路標(biāo)點(diǎn)
? 三維點(diǎn),在世界坐標(biāo)系下的坐標(biāo)
? 描述子,這個(gè)描述子相對(duì)于其他的描述子(表征同一個(gè)三維點(diǎn))的漢明距離最小。
? 可見關(guān)鍵幀,觀測(cè)到該點(diǎn)的關(guān)鍵幀和該點(diǎn)點(diǎn)在該幀中的索引
? 該點(diǎn)的平均觀測(cè)方向
? 參考關(guān)鍵幀(這個(gè)的設(shè)置是在干什么?)
? 觀測(cè)距離,最小距離和最大距離根絕ORB的尺度不變形計(jì)算。
路標(biāo)點(diǎn)和關(guān)鍵幀之間
- 表述該點(diǎn)在哪些關(guān)鍵幀可以看到
- 如何添加共視關(guān)系呢?維持一個(gè)std::map類型的hash,指定對(duì)于該路標(biāo)點(diǎn)對(duì)于那些幀看到了,對(duì)應(yīng)的是該幀里路標(biāo)點(diǎn)的序號(hào)為多少。如果要?jiǎng)h除該點(diǎn),那么就要?jiǎng)h除該hash。
路標(biāo)點(diǎn)和描述子
一個(gè)路標(biāo)點(diǎn)可多個(gè)描述子對(duì)應(yīng),在插入關(guān)鍵幀(建圖的時(shí)候),對(duì)于每個(gè)路標(biāo)點(diǎn)可以找到一個(gè)最合適的描述子,所以會(huì)出現(xiàn)一個(gè)過程就是獲取所有的描述子,探后計(jì)算兩兩之間的距離,最好的描述子就是與其他距離最小的那個(gè)。描述子和每個(gè)關(guān)鍵幀對(duì)應(yīng)。
路標(biāo)點(diǎn)的觀測(cè)方向和觀測(cè)距離
觀測(cè)方向的計(jì)算是所有可見關(guān)鍵幀的方向(相對(duì)于路標(biāo)點(diǎn))的平均,觀測(cè)距離(深度)通過路標(biāo)點(diǎn)減去參考關(guān)鍵幀的光心。
在路標(biāo)點(diǎn)中特征法和直接法的區(qū)別
- 優(yōu)化路標(biāo)點(diǎn)
 關(guān)鍵幀
? 相機(jī)的位姿,從世界坐標(biāo)系到相機(jī)坐標(biāo)系的剛體變換
? 相機(jī)的內(nèi)參數(shù)
? ORB 特征、描述子 以上這兩個(gè)和圖像幀結(jié)構(gòu)是相同的。(特征法中的內(nèi)容)
? vector<路標(biāo)點(diǎn)>
? 刪除/增加路標(biāo)點(diǎn)
? 特征點(diǎn)網(wǎng)格
? BOW
關(guān)鍵幀和Covisibility Graph
Covisibility Graph的實(shí)現(xiàn)使用map”keyfram kf, int idx”的一種結(jié)構(gòu),前者指定了有共視關(guān)系的關(guān)鍵幀,后者指定了兩者之間的共視關(guān)系的強(qiáng)弱(共視點(diǎn)的個(gè)數(shù))。refer
更新具有共視關(guān)系的關(guān)鍵幀之間的鏈接的步驟
1. 首先獲得該關(guān)鍵幀的所有MapPoint點(diǎn),統(tǒng)計(jì)觀測(cè)到這些3d點(diǎn)的每個(gè)關(guān)鍵與其它所有關(guān)鍵幀之間的共視程度
對(duì)每一個(gè)找到的關(guān)鍵幀,建立一條邊,邊的權(quán)重是該關(guān)鍵幀與當(dāng)前關(guān)鍵幀公共3d點(diǎn)的個(gè)數(shù)。
2. 并且該權(quán)重必須大于一個(gè)閾值,如果沒有超過該閾值的權(quán)重,那么就只保留權(quán)重最大的邊(與其它關(guān)鍵幀的共視程度比較高)
3. 對(duì)這些連接按照權(quán)重從大到小進(jìn)行排序,以方便將來的處理
更新完covisibility圖之后,如果沒有初始化過,則初始化為連接權(quán)重最大的邊(與其它關(guān)鍵幀共視程度最高的那個(gè)關(guān)鍵幀),類似于最大生成樹
我們看到大量重復(fù)的并且要保存下來數(shù)據(jù)的有2種,一種是MapPoint,一種是KeyFrame,路標(biāo)點(diǎn)之間假設(shè)是獨(dú)立的,路標(biāo)點(diǎn)和位姿(關(guān)鍵幀)之間具備聯(lián)系,位姿和位姿之間是關(guān)聯(lián)的。
另外一個(gè)問題SLAM中的Data Association表示的是什么,這里最開始的認(rèn)識(shí)就是路標(biāo)點(diǎn)之間的數(shù)據(jù)關(guān)聯(lián),只有但那些點(diǎn)關(guān)聯(lián)之后,我們才會(huì)直到,哪些點(diǎn)構(gòu)成一個(gè)物體,或者一個(gè)目標(biāo),如果目標(biāo)是移動(dòng)的,我們也得到一個(gè)啟發(fā)式的處理動(dòng)態(tài)場(chǎng)景的方法。
地圖
? vector<路標(biāo)點(diǎn)>
? vector<關(guān)鍵幀>
? 對(duì)關(guān)鍵幀進(jìn)行優(yōu)化(BA)
? 刪除/增加路標(biāo)點(diǎn)
? 增加/刪除關(guān)鍵幀
跟蹤器(定位的過程)
在跟蹤中初始化的時(shí)候使用的是單應(yīng)矩陣和基礎(chǔ)矩陣,在跟蹤時(shí)候匹配當(dāng)前幀和路標(biāo)點(diǎn),一個(gè)圖像中的點(diǎn),一個(gè)三維空間中的點(diǎn),因此用的是PnP,優(yōu)化Pose,路標(biāo)點(diǎn)這里是假設(shè)為靜止的,只有pose被優(yōu)化。
地圖(BA優(yōu)化)
主要有2個(gè)待優(yōu)化的內(nèi)容,一是軌跡中位姿,另外一個(gè)是圖中的路標(biāo)點(diǎn),不過很多時(shí)候路標(biāo)進(jìn)過幾次優(yōu)化之后就會(huì)不動(dòng)了,那么這個(gè)時(shí)候就會(huì)使用一個(gè)pose graph來降低優(yōu)化的規(guī)模,在ORB中 Covisibility Graph建模這些位姿,就是用路標(biāo)點(diǎn)個(gè)數(shù)表明位姿節(jié)點(diǎn)的權(quán)重的一個(gè)圖。
BA,這個(gè)東西一般是放在整個(gè)過程的最后,就是別人都折騰過(優(yōu)化)一遍之后(緊著那些保證實(shí)時(shí)性的那些東西盡快的先搞出點(diǎn)東西來用著),把所有的東西放到一個(gè)優(yōu)化器全部?jī)?yōu)化。這樣做的好處就是優(yōu)化過后的各部分都會(huì)精度提到,便于以后放心的使用這些東西,踢掉了不好的outliers,把網(wǎng)絡(luò)之后的關(guān)系理順。

總結(jié)

以上是生活随笔為你收集整理的Slam设计模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。