當前位置: 華文問答 > 數位

單目SLAM在移動端套用的實作難點有哪些?

2016-09-06數位

我來答吧,提綱如下:

1. 單目SLAM難點

2. 視覺SLAM難點

3. 可能的解決思路

圖片中非原創部份均已加參照,請勿盜圖,轉載請私信告知。

單目slam的障礙來自於 理論 實踐 兩個方面。理論障礙可以看做是固有的,無法透過硬體選型或軟體演算法來解決的,例如單目初始化和尺度問題。實踐問題包括計算量,視野等,可以依靠選型、演算法、軟體設計等方法來最佳化。不過在同等硬體水平下,最佳化也存在極限的。比如對O(1)的演算法不滿意從而設計O(1/n)的演算法似乎是不可能的……

---------------我是分割線-----------------

1. 單目SLAM難點

單目的優點是成本低,最大的局限性是測不到空間物體的 距離 ,只有一個影像。所以早期視覺SLAM也被稱為「只有角度的SLAM」(Bearing Only)。距離在定位中至關重要,雙目和RGBD相機的使用就是為了能夠計算(或測量)這個距離。上一個圖你們直觀體會一下距離的重要性:

很顯然,沒有距離資訊,我們不知道一個東西的遠近——所以也不知道它的大小。它可能是一個近處但很小的東西,也可能是一個遠處但很大的東西。只有一張影像時,你沒法知道物體的實際大小——我們稱之為尺度(Scale)。

可以說,單目的局限性主要在於我們沒法確定尺度,而在雙目視覺、RGBD相機中,距離是可以被測量到的(當然測量也有一定的量程和精度限制)。雙目視覺和人眼類似,透過左右眼影像的差異來計算距離——也就是所謂的立體視覺(Stereo)。RGBD則是把(通常是紅外)光投射到物體表面,再測量反射的資訊來計算距離的。具體原理分結構光和ToF兩種,在此不多做解釋,還是上圖直觀感受一下。

距離未知 導致單目SLAM存在以下問題:

  • 需要初始化
  • 尺度不確定
  • 尺度漂移
  • 而一旦我們擁有了距離資訊,上述幾條就都不是問題,這也是雙目和RGBD存在的意義。下面分別講一下以上幾條。

    ---------------我是分割線-----------------

    1.1 初始化

    單目SLAM剛開始時,只有影像間的資訊,沒有三維空間的資訊。於是一個基本問題就是: 怎麽透過兩張影像確定相機自身運動,並且確定像素點的距離 。這個問題稱為單目SLAM 初始化問題 。一般是透過匹配影像特征來完成的。

    匹配好的特征點給出了一組2D-2D像素點的對應關系,但由於是單目,沒有距離資訊。初始化的意義是求取兩個影像間的 運動 和特征點 距離 ,所以初始化完畢後你就知道這些特征點的3D位置了。後續的相機運動就可以透過3D點-2D點的匹配資訊來估計。後續的問題叫PnP(Perspective n Point)。

    對,你想的沒錯,單目的流程就是:初始化——PnP——PnP——……

    初始化的運動是透過 對極幾何 來求解的,結構是由三角測量得到的。初始化問題是一個2D-2D求 運動 結構 的問題,比3D-2D的PnP要難(資訊更少,更不確定)。我不展開對極幾何求運動的原理,但是理解它,對理解單目局限性是很有幫助的。如題主感興趣,請看Multiple View Geometry第8章。如果在知乎上寫,會占掉很大的篇幅。

    對極幾何最終會分解一個本質矩陣(Essential Matrix)(或基本矩陣(Fundametal Matrix))來得到相機運動。但分解的結果中,你會發現對平移量乘以任意非零常數,仍滿足對極約束。直觀地說, 把運動和場景同時放大任意倍數,單目相機仍會觀察到同樣的影像 !這種做法在電影裏很常見。例用用相機近距離拍攝建築模型,影片看起來就像在真實的高樓大廈一樣(比如阿特曼打怪獸實際是兩個穿著特攝服裝的演員,多麽無情的現實)。

    這個事實稱為單目的尺度不確定性(Scale Ambiguity)。所以,我們會把初始化的平移當作單位1,而之後的運動和場景,都將以初始化時的平移為單位。然而這個單位具體是多少,我們不知道(攤手)。並且,在初始化分解本質矩陣時,平移和旋轉是 在一起的。如果初始化時只有旋轉而沒有平移,初始化就失敗了——所以業界有種說法,叫做「看著一個人端相機的方式,就知道這個人有沒有研究過SLAM」。有經驗的人會盡量帶平移,沒經驗的都是原地打轉……

    所以,從套用上來說,單目需要一個帶平移的初始化過程,且存在尺度不確定問題,這是它理論上的障礙。

    員工:老板你這樣移動相機不行啊,要有平移的……

    老板:我花20k請你來做slam,一個初始化都搞不定?

    1.2 結構問題

    由於單目沒有距離資訊,所有特征點在第一次出現時都只有一個2d投影,實際的位置可能出現在光心與投影連線的任意一處。只有在相機運動起來以後,才可能透過三角測量,估計特征點的距離。

    三角測量的套用範圍很廣,傳說高斯在十幾歲的時候就已經用最小平方法測量山的距離,來吊打這些二十大幾還在水paper的博士們。現代天文學測星星的距離也使用三角測量。


    然而三角測量的前提是——你得有三角啊。

    高斯用三角測量是站在兩座山上去量另一座,這就構成了三角。雙目視覺左右兩個相機,存在一定的平移,和目標點也構成了三角。但在單目情形下,你必須移動相機之後,才可能去估計空間點的3D位置。換句話說,如果相機擺在那兒不動——就沒有三角了。這導致單目在機器人避障中套用存在困難,不過既然在談AR我們就先不說機器人吧。

    1.3 尺度漂移

    用單目估計出來的位移,與真實世界相差一個比例,叫做尺度。這個比例在初始化時確定,但單純靠視覺無法確定這個比例到底有多大。進而,由於SLAM過程中雜訊的影響,這個比♂例還不是固定不變的。當你用單目SLAM,會發現,咦怎麽跑著跑著地圖越來越小了……[1]?


    這種現象在當前state-of-the-art的單目開源方案出亦會出現,修正方法是透過回環檢測。但是有沒有出現回環,則要看實際的運動方式。所以……

    員工:老板你這樣移動相機不行啊,要經常把它移回去……

    老板:我花20k請你來做slam,怎麽搞的地圖一會兒大一會兒小,這怎麽用?

    ---------------我是分割線-----------------

    2. 視覺SLAM的困難

    雙目相機和RGBD相機能夠測量深度數據,於是就不存在初始化和尺度上的問題了。但是,整個視覺SLAM的套用中,存在一些共同的困難,主要包括以下幾條:

  • 相機運動太快
  • 相機視野不夠
  • 計算量太大
  • 遮擋
  • 特征缺失
  • 動態物體或光源幹擾

  • 2.1 運動太快

    運動太快可能導致相機影像出現運動模糊,成像品質下降。傳統卷簾快門式的相機,在運動較快時將產生明顯的模糊現象。不過現在我們有全域快門的相機了,即使動起來也不會模糊的相機,只是價格貴一些。

    (你真以為啥圖都可以用來SLAM嗎?拿衣服啊,圖片來自TUM數據集)


    (全域快門相機在拍攝高速運動的物體仍是清晰的,圖片來自網路)


    運動過快的另一個結果就是兩個影像的重疊區(Overlap)不夠,導致沒法匹配上特征。所以視覺SLAM中都會選用廣角、魚眼、全景相機,或者幹脆多放幾個相機。


    2.2 相機視野不夠

    如前所述,視野不夠可能導致演算法易遺失。畢竟特征匹配的前提是影像間真的存在共有的特征。


    2.3 計算量太大

    基於特征點的SLAM大部份時間會花在特征提取和匹配上,所以把這部份程式碼寫得非常高效是很有幫助的。這裏就有很多奇技淫巧可以用了,比如選擇一些容易計算的特征/並列化/利用指令集/放到硬體上計算等等,當然最直接的就是減少特征點啦。這部份很需要工程上的測試和經驗。總而言之特征點的計算仍然是主要瓶頸所在。要是哪天相機直接輸出特征點就更好了。


    2.4 遮擋

    相機可能運動到一個墻角,還存在一些邪惡的開發者刻意地用手去擋住你的相機。他們認為你的視覺SLAM即使不靠影像也能順利地工作。這些觀念是毫無道理的,所以直接無視他們即可。


    2.5 特征缺失、動態光源和人物的幹擾

    老實說SLAM套用還沒有走到這一步,這些多數是研究論文關心的話題(比如直接法)。現在AR能夠穩定地在室內執行就已經很了不起了。


    ---------------我是分割線-----------------

    3. 可能的解決思路

    前邊總結了一些單目視覺可能碰到的困難。我們發現大部份問題並不能在當下的視覺方案能夠解決的。你或授權以透過一些工程技巧加速特征匹配的過程,但像尺度、遮擋之類的問題,明顯無法透過設計軟體來解決。


    所以怎麽辦呢?——既然視覺解決不了,那就靠別的來解決吧。畢竟一台裝置上又不是只有一塊單目相機。更常見的方案是,用視覺+IMU的方式做SLAM。


    當前廣角單目+IMU被認為是一種很好的解決方案。它價格比較低廉,IMU能在以下幾點很好地幫助視覺SLAM:

  • IMU能幫單目確定尺度
  • IMU能測量快速的運動
  • IMU在相機被遮擋時亦能提供短時間的位姿估計

  • 所以不管在理論還是套用上,都出現了一些單目+IMU的方案[2,3,4]。眾所周知的Tango和Hololens亦是IMU+單目/多目的定位方式。


    (用Tango玩MC,缺點是蓋的房子尺寸和真實世界一樣。蓋二樓你就得真跑到樓上去蓋——這怎麽造圓明園?)

    (這貨就是靠後邊這魚眼+IMU做跟蹤的)

    (Hololens圖就不上了吧……橫豎也不是自己的)

    [1]. Strasdat, Montiel, A.J.Davison, Scale drift-aware large scale monocular SLAM, RSS 2006.

    [2]. Leutenegger et. al., Keyframe-based visual-inertial odometry using nonlinear optimization, IJRR 2015.

    [3]. Huang Guoquan, Kaess and Leonard, Towards Consistent Visual-Inertial Navigation, ICRA 2014.

    [4]. Li Mingyang and Mourikis, High-precision, consistent EKF-based visual-inertial odometry, IJRR, 2013.