在Orb-Slam中有三個地圖分別是Covisibility Graph,Spanning Graph,以及Essential Graph,它們三個分別是什么意思呢?
首先,圖優化是目前視覺SLAM里主流的優化方式。其思想是把一個優化問題表達成圖(Graph),以便我們理解、觀察。如果題主想更清楚地認識圖優化與SLAM的關系,可以參見
一個圖中有很多頂點,以及連接各頂點的邊。當它們表示一個優化問題時,頂點是待優化的變量,而邊是指誤差項。我們把各個邊的誤差加到一起,就得到了整個優化問題的誤差函數。
頂點的參數化形式可以有很多不同的樣子。例如某些頂點可以表示相機的Pose,另一些頂點可以表示三維空間點。同理,邊也有不同的形式。除了個別的頂點和邊,我們也關心整個圖的結構,例如連通性等。
一個不太恰當的例子(圖來自FrameSLAM: From Bundle Adjustment to Real-Time Visual Mapping)。圖中紅色點可看成關鍵幀相機Pose,青色點表示空間點,藍色和紅色邊表示Pose-Pose的邊,而黃色邊表示Pose-Point的邊。(雖然這可能不是原圖的意思,但我希望通過這個圖可以幫助題主理解。)
你問題當中的Covisibility Graph, Essential Graph,都是不同圖的形式。Spanning graph理解成生成樹更好一些。
如果我們考慮所有的相機 Pose 和所有點的空間位置,構造出的圖將會非常復雜,而難以直接進行實時優化。因此,通常我們會構建一些帶有特殊結構的圖,以滿足實時性的需要。
最簡單的是Pose Graph。如果我們對特征點的空間位置並不關心,就可以構建只帶有Pose結點,以及Pose-Pose邊這樣的圖。由於一個照片中常常有上千個特征點,這樣做可以節省許多計算量。
Covisilibilty Graph 的頂點是相機的Pose,而邊是Pose-Pose的變換關系——所以也算是Pose Graph 一種吧。當兩個相機看到相似的空間點時,它們對應的Pose就會產生聯系(我們就可以根據這些空間點在照片上的投影計算兩個相機間的運動)。根據觀測到的空間點的數量,給這個邊加上一個權值,度量這個邊的可信程度。
Essential Graph 比Covisibility Graph更為簡單,ORB-SLAM主要用它來進行全局優化。為了限制優化的規模,ORB-SLAM試圖盡量減少優化邊的數量。而盡量減少邊,又保持連通性的方法,就是做一個最小生成樹。
Covisibility 是一直在用的概念,而Essential Graph是orbslam自己提出的概念,為了減小全局回環的計算量。當你自己實現SLAM時,也會碰到這些困難,並設計一些應對的策略,這些就是你的創新性。事實上,隨着SLAM時間的增長,如何控制圖的結構和優化的規模,仍是現在SLAM有待解決的一個問題。
我的理解:
頂點:相機的 pose
邊:pose 和 pose 間的位置關系
權值:邊的可信度(每條邊都有自己的權值)
頂點:相機的 pose
邊:pose 和 pose 間的位置關系
權值:邊的可信度(每條邊都有自己的權值)
是對 covisibility graph 的優化(邊最少、置信值高、保持連通性)