SLAM剛剛開始的未來

SLAM技術隨著最近幾年機器人、VR、AR的火爆而為人所知,在感測器、演算法、軟體、硬體等方向都有不同的進展。本文簡要解釋了SLAM的定義和分類,具體分析了當前VR、AR、機器人等各種應用需要什麼類別的SLAM,探討了在實際應用中實現SLAM的一些工程細節,並展望了SLAM剛剛開始的未來。

什麼是SLAM

SLAM是什麼?根據Wikipedia的介紹:「Simultaneous Localization and Mapping (SLAM) is the computational problem of constructing or updating a map of an unknown environment while simultaneously keeping track of an agent』s location within it.」最簡單而又直指本質的理解,SLAM指的是當某種設備(如機器人、VR設備等)來到一個完全陌生的環境時,它需要精準地建立時間和空間的對應關係,並能完美地回答以下一系列問題:我剛才在哪裡,現在在哪裡?我看到了什麼,現在看到的和之前看到的有哪些異同?我過去的行走軌跡是什麼?我現在看到的世界是什麼樣子,和過去相比有怎樣的變化?我的軌跡抖嗎,我的位置飄嗎?我還能跟蹤到自己的軌跡嗎,如果我丟了應該怎麼辦?我過去建立的對世界的認識還有用嗎?我能在已有世界的抽象里快速對我現在的位置進行定位嗎?

SLAM的主要分類

robotic SLAM

從最早期軍事用途的雛形到後來的機器人應用,業界對SLAM有了進一步的研究。robotic SLAM主要包括卡爾曼濾波和粒子濾波。卡爾曼濾波在很多工程領域中都有應用,最早期用於機器人的卡爾曼濾波,默認系統是線性的且帶高斯分布的噪音,經典的卡爾曼濾波可以直接給出最優解,但現實比這複雜太多,所以有了卡爾曼濾波的很多變種。而如果不是線性系統或噪音不是高斯分布,那麼粒子濾波演算法生成很多粒子,並且每個粒子是模型狀態的一種可能,再根據觀察和更新得到粒子群的狀態趨於一致的收斂結果。當然粒子濾波也有實際的問題,比如經典的粒子衰減問題(particle depletion),和工程上如何控制準確性和收斂速度很好平衡的問題。

PTAM

PTAM(Parallel Tracking and Mapping)架構更多的是系統上的設計,姿態跟蹤(Tracking)和建立地圖(Mapping)兩個線程是並行的,這實質上是一種針對SLAM的多線程設計。PTAM在當前SLAM領域看來是小兒科,但在當時是一個創舉,第一次讓大家覺得對地圖的優化可以整合到實時計算中,並且整個系統可以跑起來。具體而言,姿態跟蹤線程不修改地圖,只是利用已知地圖來快速跟蹤;而在建立地圖線程專註於地圖的建立、維護和更新。即使建立地圖線程耗時稍長,姿態跟蹤線程仍然有地圖可以跟蹤(如果設備還在已建成的地圖範圍內)。這是兩個事情並行來做的一個好處,但很現實的問題是如果地圖建立或優化過慢,跟蹤線程很容易會因為沒有最新的地圖或者沒有優化過的地圖而跟丟。另外比較實際的工程問題是地圖線程的最新地圖數據應該lock還是copy data between threads以及threading的實現質量。

sparse SLAM

現在常說的sparse SLAM從架構上主要分為兩大類:filter based和keyframe based。這裡的濾波比早年的robotic SLAM的濾波已經複雜很多,比較有代表性的是EKF SLAM,核心的思想是對非線性系統進行線性近似。最簡單的例子,如果是一個變數,那麼就用當前模型值和導數來表達;如果多個變數,那麼表達就是Jacobian Matrix。filter based的full scale SLAM需要注意filter state和計算時間的平衡,以及實際工程實現裡面的矩陣分塊更新(高維度的稀疏矩陣取逆直接就爆了)。keyframe based SLAM的核心思想是關鍵幀(keyframe)的概念——因為每一張圖都用來建立或更新地圖計算量太大,從image stream裡面選擇一些好的關鍵幀來建立並更新地圖——PTAM里的地圖建立就是從關鍵幀生成地圖。這種思路已經被業內普遍接受。但關鍵幀的提取本身就是一門很大的學問,伴隨而來的還有局部地圖和全局地圖的維護、更新和效率平衡。

dense SLAM

dense SLAM是另外一大類SLAM。這裡說的sparse或dense指的是地圖點的稀疏或稠密程度。舉個簡單的例子,sparse map都是通過三角測量法算出來的,在一個卧室里有一千個點足夠了;但dense map一般是某種主動光源的深度感測器(depth sensor,如英特爾的RealSense裡面是ASIC)產生的,假設depth sensor每一幀的解析度是640x480,即使有2/3的invalid depth,仍然有十萬個3D點,所以通常所說的sparse map和dense map相比至少差了兩個數量級。因為dense SLAM有足夠多的地圖信息,所以很適合用來做精細的3D重建。而如果dense SLAM要實時地從0到1邊建地圖邊跟蹤,就要把每一幀的可用像素的深度數據全部用來貢獻到建立地圖和跟蹤上。dense SLAM的代表是Kinect Fusion,到目前已經有很多變種和進化,如ElasticFusion和DynamicFusion等。

近年來的SLAM「變種人」

DTAM - Dense Tracking and Mapping

DTAM繼承了關鍵幀的架構,但對關鍵幀的處理和傳統的特徵點提取有很大的不同。相比傳統方法對每一幀進行很稀疏的特徵點提取,DTAM的direct method在默認環境亮度不變(brightness consistancy assumption)的前提下,對每一個像素的深度數據進行inverse depth的提取和不斷優化來建立稠密地圖並實現穩定的位置跟蹤。用比較直觀的數字對比來說明DTAM和PTAM的區別:DTAM的一個關鍵幀有30萬個像素的深度估計,而PTAM一般的做法是最多一千個。DTAM的優缺點很明顯(具體對比見圖1):准、穩,但速度是問題,每一個像素都計算,確實容易通過GPU並行計算,但功耗和產品化的難度也都隨之升高。

圖1 兩種關鍵幀處理方式的比較,圖片來自Jakob Engel在ICCV 2015的PPT

Semi-Dense LSD SLAM - Semi-Dense Large Scale Direct SLAM

這裡要特別說明,LSD SLAM里semi的是像素數量,也就是說,只估計「有信息」的區域,而不是像DTAM那樣每個像素都估計,更簡單形象(但不是100%學術嚴謹)地說,只估計「有紋理」的地方,不估計令每一個做SLAM的人都害怕的終極大魔頭——「大白牆」部分。參見圖2,右上是semi-dense, 左下是sparse approach,右下是dense approach。估計深度的部分在原理上也是direct method,和DTAM類似,這裡不做過多描述。速度上,semi-dense在一台只有酷睿i7處理器的電腦上是可以做到實時的。

圖2 semi-dense的不同,圖片來自Semi-Dense Visual Odometry for a Monocular Camera,Jakob Engel、Ju rgen Sturm和Daniel Cremers的ICCV 2013論文

VIO - Visual Inertial Odometry

VIO和之前的幾種SLAM最大的不同在於兩點:首先,VIO在硬體上需要感測器的融合,包括相機和六軸陀螺儀,相機產生圖片,六軸陀螺儀產生加速度和角速度。相機相對準但相對慢,六軸陀螺儀的原始加速度如果拿來直接積分會在很短的時間飄走(zero-drift),但六軸陀螺儀的頻率很高,在手機上都有200Hz。其次,VIO實現的是一種比較複雜而有效的卡爾曼濾波,比如MSCKF(Multi-State-Constraint-Kalman-Filter),側重的是快速的姿態跟蹤,而不花精力來維護全局地圖,也不做keyframe based SLAM裡面的針對地圖的全局優化(bundle adjustment)。最著名的商業化實現就是Google的Project Tango和已經被蘋果收購的Flyby Media,其中第二代Project Tango搭載了Nividia TK1並有主動光源的深度攝像頭的平板電腦,這款硬體可謂每個做演算法的小夥伴的夢幻搭檔,具體在這裡不多闡述。

在不同應用中用哪種SLAM

筆者一直以來的一個觀點是SLAM技術和別的技術一樣:一方面,從研究和開發的角度,技術需要達到一個較高的學術或工業標準;另一方面,技術本身必須落地到真正的產品中去,單純的技術上要達到100分當然也有它的意義,但一味追求技術或數學上的「美」而完全無視工程實現和產品化要求就很可能誤入歧途。在今天SLAM種類如此繁多細微細節如此複雜的情況下,微軟、蘋果、Google、Facebook等大公司憑藉多年各方面積累和各種資源能夠負擔得起核心演算法、軟體的研發,但廣大中小型公司或是之前沒在這方面布局的大公司,在急需這項技術時,需要想好自己的產品規劃和具體需求再做決策。以下為SLAM在幾個不同方向或行業的應用:

VR產品:VR的本質是讓用戶通過沉浸式的體驗來感受一個完全不同的虛擬世界,而SLAM是對真實世界的感知和理解,如果VR產品需要SLAM,那一定是虛擬世界和真實世界的結合。目前市場上除了三大廠(Oculws、索尼和HTC)有自己的「outside-in tracking」,大部分沒有「outside-in tracking」解決方案的VR產品只能通過六軸陀螺儀來跟蹤用戶的頭部轉動而不能跟蹤用戶的位移,但SLAM能解決六個自由度的跟蹤問題。另外,對於VR產品是否需要SLAM中的地圖(mapping)、什麼形式什麼場景有需要,也有待各方面進一步的思考。

AR產品:AR的本質是虛擬元素在現實中的完美融合,相比於VR,AR產品無論演算法、軟體的複雜度還是硬體的複雜度或者量產難度都增大了很多很多。對於AR來說,SLAM不是「最好能擁有」而是「必須擁有」。更進一步地說,SLAM作為感知世界的技術僅僅是AR產品「必須擁有」的技術中的一項,對世界的學習和解讀、顯示的內容、光學顯示的質量、硬體的舒適度以及硬體的量產能力等,也都是需要解決的,需要大量的人力物力財力能力和加班。

機器人產品:比爾蓋茨曾在2007年新年展望了「A Robot in Every Home」的願景,如今已過去了將近十年,機器人已有太多種類,包括工業類、服務類、家庭類等等。但如果一款機器人需要自主性的探索,如定位、製作地圖、跟隨、監控、路徑規劃、識別和應對等,那麼SLAM也是「必須擁有」的。具體的SLAM種類也隨著機器人種類和應用的不同而千差萬別。

行業應用:不同行業有不同行業的具體需求,比如兒童玩具類,如果只是跟蹤玩具卡片,那麼marker-based tracking就應該能夠滿足基本的AR效果;比如一家房地產公司想實現VR看房,那麼需要考慮給用戶帶來什麼樣的體驗:360度高清全景圖還是3D mesh?如果是一個房子裡面幾個位置的360度全景圖,那麼並不需要SLAM,但如果是真正3D重建(dense reconstruction)模型,那麼必須要稠密的地圖,而這種情況下需要考慮的是想讓用戶看的最低地圖解析度要求是多少,因為現有的放在手機或平板上的3D攝像頭的解析度一般也就是VGA(640x480),這種情況下重建出來的3D模型是沒有photorealistic那種效果。而如果不考慮計算時間和成本,那麼高精度高準確性校準好的高端LiDAR+高清相機系統應該可以滿足非常好的體驗。再比如一家遊戲公司要做一款VR或AR遊戲,需要對用戶進行六個自由度的姿態跟蹤,那他需要很精準的位置信息和地圖信息,但這個地圖只是為了定位,所以準確快速更新的稀疏地圖就可以了。

SLAM在實際應用中的「愛恨情仇」

首先,SLAM對數學專業知識有一定的基本要求,包括矩陣、微積分、數值計算和空間幾何等,同時對計算機視覺的基礎知識也有一定的要求,包括特徵點、地圖、multi-view geometry、bundle adjustment、filter和camera model等。這些知識都需要一定的基礎和積累,不過也不需要純數學專業背景。SLAM編程一般使用C++,如果針對某個特殊指令集或平台進行優化,可能需要知道SSE、NEON、GPU的一些知識和經驗,需要對系統設計有一定的經驗和感覺,需要比較靠譜的動手能力及寫代碼的能力和意願。總體而言,門檻就是一定的數學和工科背景、一定的計算機視覺的基礎知識、一定的編程基礎和經驗以及最關鍵的踏踏實實寫代碼的意願。

其次,SLAM強調實時和準確性。SLAM是一整套的大型系統,實時系統一般是多線程並發執行,資源的分配、讀寫的協調、地圖數據的管理、優化和準確性、一些關鍵參數和變數的不確定性和高速度高精度的姿態跟蹤(比如VR/AR應用必須要至少90fps才有可能解決眩暈和渲染效果)等,都是需要解決的挑戰。

再次,SLAM難在適應硬體,更難在系統整合。SLAM的數據來源於感測器,而且越來越多的SLAM種類來源於多個感測器融合,那麼感測器的質量對SLAM的效果影響很大。舉個例子,如果一套SLAM系統用了某款相機,該相機在一動不動而且光照環境完全不變時圖像噪點非常多,那麼系統對穩定的姿態跟蹤影響就非常不好,因為特徵點提取會很不一致。另一個很實際的例子,如果用多個感測器(相機或六軸陀螺儀),如果時間戳不一致(至少毫秒級),也會很影響演算法。多個感測器的分別校準和互相校準,乃至整個系統幾十個上百個參數的調整,都是很實際很花時間的東西。

此外,在對數學有一定要求的同時,SLAM目前還有很多工程方面的問題,需要靜下心來一塊一塊地至少走兩遍踩各種坑並一一解決。如果只看已有代碼就覺得數學和演算法盡在掌握,而動手時要麼眼高手低要麼根本不去寫代碼,這對真正要做產品研發的團隊而言是非常可怕的。當前多個領域因為硬體系統和產品應用之間差異很大,所以距離所有領域的SLAM都實現產品化還有很多的工作,但相信在不久的未來會有較大的突破。而由於SLAM的複雜特性和眾多的演算法及其產品化仍然需要在SLAM的基礎上實現,可以預見和SLAM相關的產品研發在未來相當長一段時間內仍然需要大量人力和資源。

圖3 SLAM的未來才剛剛開始

SLAM剛剛開始的未來

在過去的兩年里,隨著VR、AR、機器人資本市場和消費者市場熱度的不斷升級,在SLAM相關的感測器、演算法、軟體、硬體等方向,小公司在關鍵細分領域快速創新、大公司在各個關鍵方向布局並且頻繁收購的趨勢越來越明顯。目前,軟體公司往硬體做,硬體公司往演算法做,大公司渴望擁有自己的技術和硬體,小公司希望反應快執行力強地快速推進,SLAM相關各個領域的產品化的努力日新月異,所以有志布局在SLAM的大中型公司需要儘快行動,而對於初創公司,專註SLAM研發、產品化、深耕某個應用或行業都是可行的思路。

由於產品和硬體高度差異化,而SLAM相關技術的整合和優化又很複雜,導致演算法和軟體高度碎片化,所以市場上目前還沒有一套通用普適的解決方案,在短時間內也不會有。正如前文所述,SLAM技術是對世界的感知和理解,是撐起VR、AR、機器人的骨骼,但骨骼搭起後離最終完美的用戶體驗仍有大量工作來做,SLAM的未來才剛剛開始。另一方面,移動端硬體的計算能力還遠遠不夠,所以SLAM相關技術可以而且正在從軟體和演算法層面向硬體推動,筆者相信在這個過程中一定會成就一批新的公司。


推薦閱讀:

TAG:技術與應用科學 |