SLAM(同步定位與地圖構建或Simultaneous localization and mapping)
今天,我們邀請到了速感科技CTO張一茗,為大家揭秘SLAM技術的前世今生。
張一茗。速感科技CTO。畢業於北京航空航天大學,師從中國慣性技術領域的著名專家馮培德院士,多年組合導航定位系統研究經驗。熱愛技術和研發,摘得過許多諸如Intel iot創客馬拉松、清華創客馬拉松等創客比賽第一名。速感科技經過多年歷練,發展出一套以視覺SLAM為核心,集探索、導航、定位、避障、路徑規劃為一體的成熟化機器人無源導航算法。
SLAM作為一種基礎技術,從最早的軍事用途(核潛艇海底定位就有了SLAM的雛形)到今天,已經逐步走入人們的視野,過去幾年掃地機器人的盛行讓它名聲大噪,近期基於三維視覺的VSLAM,又讓它越來越顯主流,許多人不得不關注它,但根據記者的調查,瞭解它並能真正把它說清楚的專家並不多,今天,我們請來了速感科技的CTO,張一茗,從SLAM的前世今生開始,徹底掃清我們心中的疑惑。
▌SLAM的前世
我之前從本科到研究生,一直在導航與定位領域學習,一開始偏重於高精度的慣性導航、衛星導航、星光制導及其組合導航。出於對實現無源導航的執念,我慢慢開始研究視覺導航中的SLAM方向,並與傳統的慣性器件做組合,實現獨立設備的自主導航定位。
定位、定向、測速、授時是人們惆悵千年都未能完全解決的問題,最早的時候,古人只能靠夜觀天象和司南來做簡單的定向。直至元代,出於對定位的需求,中國人發明了牽星術,用牽星板測量星星實現緯度估計。
1964年美國投入使用GPS,突然就打破了大家的遊戲規則。軍用的P碼可以達到1-2米級精度,開放給大眾使用的CA碼也能夠實現5-10米級的精度。
後來大家一方面為了突破P碼封鎖,另一方面為了追求更高的定位定姿精度,想出了很多十分具有創意的想法來挺升GPS的精度。利用RTK的實時相位差分技術,甚至能實現釐米的定位精度,基本上解決了室外的定位和定姿問題。
但是室內這個問題就難辦多了,為了實現室內的定位定姿,一大批技術不斷湧現,其中,SLAM技術逐漸脫穎而出。SLAM是一個十分交叉學科的領域,我先從它的傳感器講起。
▌離不開這兩類傳感器
目前用在SLAM上的Sensor主要分兩大類,雷射雷達和攝影機。
這裡面列舉了一些常見的雷達和各種深度攝影機。雷射雷達有單線多線之分,角分辨率及精度也各有千秋。SICK、velodyne、Hokuyo以及中國的北醒光學、Slamtech是比較有名的雷射雷達廠商。他們可以作為SLAM的一種輸入形式。
這個小影片裡展示的就是一種簡單的2D SLAM。
這個小影片是中國賓大的教授kumar做的特別有名的一個demo,是在無人機上利用二維雷射雷達做的SLAM。
而VSLAM則主要用攝影機來實現,攝影機品種繁多,主要分為單眼、雙眼、單眼結構光、雙眼結構光、ToF幾大類。他們的核心都是獲取RGB和depth map(深度信息)。簡單的單眼和雙眼(Zed、leapmotion)我這裡不多做解釋,我主要解釋一下結構光和ToF。
▌最近流行的結構光和TOF
結構光原理的深度攝影機通常具有雷射投射器、光學衍射元件(DOE)、紅外線攝影機三大核心器件。
這個圖(下圖)摘自primesense的專利。
可以看到primesense的doe是由兩部分組成的,一個是擴散片,一個是衍射片。先通過擴散成一個區域的隨機散斑,然後複製成九份,投射到了被拍攝物體上。根據紅外線攝影機捕捉到的紅外線散斑,PS1080這個芯片就可以快速解算出各個點的深度資訊。
這兒還有兩款結構光原理的攝影機。
第一頁它是由兩幅十分規律的散斑組成,最後同時被紅外相機獲得,精度相對較高。但據說DOE成本也比較高。
還有一種比較獨特的方案(最後一幅圖),它採用mems微鏡的方式,類似DLP投影機,將雷射器進行調頻,通過微鏡反射出去,並快速改變微鏡姿態,進行行列掃描,實現結構光的投射。(產自ST,ST經常做出一些比較炫的黑科技)。
ToF(time of flight)也是一種很有前景的深度獲取方法。
傳感器發出經調制的近紅外光,遇物體後反射,傳感器通過計算光線發射和反射時間差,或相位差,來換算被拍攝景物的距離,以產生深度資訊。類似於雷達,或者想象一下蝙蝠,softkinetic 的 DS325 採用的就是 ToF 方案(TI 設計的),但是它的接收器微觀結構比較特殊,有 2 個或者更多快門,測 ps 級別的時間差,但它的單位像素尺寸通常在 100 um 的尺寸,所以目前分辨率不高。以後也會有不錯的前景,但我覺得並不是顛覆性的。
好,那在有了深度圖之後呢,SLAM 算法就開始工作了,由於 Sensor 和需求的不同,SLAM的呈現形式略有差異。大致可以分為激光 SLAM(也分 2D 和 3D)和視覺 SLAM(也分 Sparse、semiDense、Dense)兩類,但其主要思路大同小異。
這個是Sparse(稀疏)的
這個偏Dense(密集)的
▌SLAM算法實現的4要素
SLAM算法在實現的時候主要要考慮以下4個方面吧:
1. 地圖表示問題,比如dense和sparse都是它的不同表達方式,這個需要根據實際場景需求去抉擇
2. 信息感知問題,需要考慮如何全面的感知這個環境,RGBD 攝影機 FOV 通常比較小,但激光雷達比較大
3. 數據關聯問題,不同的sensor的數據類型、時間戳、坐標系表達方式各有不同,需要統一處理
4. 定位與構圖問題,就是指怎麼實現位姿估計和建模,這裡面涉及到很多數學問題,物理模型建立,狀態估計和優化
其他的還有回環檢測問題,探索問題(exploration),以及綁架問題(kidnapping)。
這個是一個比較有名的SLAM算法,這個回環檢測就很漂亮。但這個調用了cuda,gpu對運算能力要求挺高,效果看起來比較炫。
▌以VSLAM舉個例子
我大概講一種比較流行的VSLAM方法框架。
整個 SLAM 大概可以分為前端和後端,前端相當於VO(視覺里程計),研究幀與幀之間變換關係。首先提取每幀圖像特徵點,利用相鄰幀圖像,進行特徵點匹配,然後利用RANSAC去除大噪聲,然後進行匹配,得到一個 pose 資訊(位置和姿態),同時可以利用 IMU(Inertial measurement unit 慣性測量單元)提供的姿態資訊進行濾波融合。
後端則主要是對前端出結果進行優化,利用濾波理論(EKF、UKF、PF)、或者優化理論TORO、G2O進行樹或者圖的優化。最終得到最優的位姿估計。
後端這邊難點比較多,涉及到的數學知識也比較多,總的來說大家已經慢慢拋棄傳統的濾波理論走向圖優化去了。
因為基於濾波的理論,濾波器穩度增長太快,這對於需要頻繁求逆的EKF(擴展卡爾曼濾波器),PF壓力很大。而基於圖的SLAM,通常以keyframe(關鍵幀)為基礎,建立多個節點和節點之間的相對變換關係,比如仿射變換矩陣,並不斷地進行關鍵節點的維護,保證圖的容量,在保證精度的同時,降低了計算量。
列舉幾個目前比較有名的SLAM算法:PTAM,MonoSLAM,
ORB-SLAM,RGBD-SLAM,RTAB-SLAM,LSD-SLAM。
所以大家如果想學習SLAM的話,各個大學院校提高的素材是很多的,比如賓大、MIT、ETH、香港科技大學、帝國理工等等都有比較好的代表作品,還有一個比較有前景的就是三維的機器視覺,普林斯頓大學的肖劍雄教授結合SLAM和Deep Learning做一些三維物體的分類和辨識, 實現一個對場景深度理解的機器人感知引擎。
總的來說,SLAM技術從最早的軍事用途(核潛艇海底定位就有了SLAM的雛形)到今天,已經逐步走入人們的視野,掃地機器人的盛行更是讓它名聲大噪。同時基於三維視覺的VSLAM越來越顯主流。在地面/空中機器人、VR/AR/MR、汽車/AGV自動駕駛等領域,都會得到深入的發展,同時也會出現越來越多的細分市場等待挖掘。
這個是occipital團隊出的一個產品,是個很有意思的應用,中國賣RMB4000+,大概一個月1000出貨量吧(雖然不是很多,但是效果不錯,pad可玩)虛擬家居、無人飛行/駕駛、虛擬試衣、3D打印、刑偵現場記錄、沈浸式遊戲、增強現實、商場推送、設計輔助、地震救援、工業流水線、GIS採集等等,都等待著VSLAM技術一展宏圖。
▌SLAM的今生——還存在著問題
多傳感器融合、優化數據關聯與回環檢測、與前端異構處理器整合、提升魯棒性和重定位精度都是SLAM技術接下來的發展方向,但這些都會隨著消費刺激和產業鏈的發展逐步解決。就像手機中的陀螺儀一樣,在不久的將來,也會飛入尋常百姓家,改變人類的生活。
不過說實話,SLAM在全面進入消費級市場的過程中,也面對著一些阻力和難題。比如Sensor精度不高、計算量大、Sensor應用場景不具有普適性等等問題。
多傳感器融合、優化數據關聯與回環檢測、與前端異構處理器整合、提升魯棒性和重定位精度都是SLAM技術接下來的發展方向,但這些都會隨著消費刺激和產業鏈的發展逐步解決。就像手機中的陀螺儀一樣,在不久的將來,也會飛入尋常百姓家,改變人類的生活。
(雷射雷達和攝影機兩種 SLAM 方式各有什麼優缺點呢,有沒有一種綜合的方式互補各自的缺點的呢?)
雷射雷達優點是可視範圍廣,但是缺點性價比低,低成本的雷達角分辨率不夠高,影響到建模精度。vSLAM的話缺點就是FOV通常不大,50-60degree,這樣高速旋轉時就容易丟,解決方案有的,我們公司就在做vSLAM跟雷達還有IMU的組合。
(請問目前基於視覺的SLAM的計算量有多大?嵌入式系統上如果要做到實時30fps,是不是只有Nvidia的芯片(支持cuda)才可以?)
第一個問題,雖然基於視覺的SLAM計算量相對較大,但在嵌入式系統上是可以跑起來的,Sparse的SLAM可以達到30-50hz(也不需要GPU和Cuda),如果dense的話就比較消耗資源,根據點雲還有三角化密度可調,10-20hz也是沒有問題。
并不一定要用cuda,一些用到cuda和GPU的算法主要是用来加速SIFT、ICP,以及后期三角化和mesh的过程,即使不用cuda可以采用其他的特征点提取和匹配策略也是可以的。
▌最後一個問題
這個問題就比較大了。
機器人產業是個很大的Ecosystem,短時間來講,可能產業鏈不夠完整,消費級市場缺乏爆點爆款。雖然大家都在談論做機器人,但是好多公司並沒有解決用戶痛點,也沒有為機器人產業鏈創造什麼價值。
但是大家可以看到, 大批缺乏特色和積澱的機器人公司正在被淘汰,行業格局越來越清晰,分工逐漸完善,一大批細分市場成長起來。
從機器人的感知部分來說,傳感器性能提升、前端處理(目前的sensor前端處理做的太少,給主CPU造成了很大的負擔)、多傳感器融合是一個很大的增長點。
現在人工智能也開始揚頭,深度學習、神經網絡專用的分布式異構處理器及其協處理器成為緊急需求,我個人很希望有公司能把這塊做好。
也有好多創業公司做底層製作,比如高推重比電機、高能量密度電池、復合材料,他們和機器人產業的對接,也會加速機器人行業的發展。整個機器人生態架構會越來越清晰,從硬件層到算法層到功能層到SDK 再到應用層,每一個細分領域都有公司切入,隨著這些產業節點的完善,能看到機器人行業的前景還是很棒的,相信不久之後就會迎來堪比互聯網的指數式增長!
1 comments:
為何有圖的連結都看不到呢(我試過IE和chrome)?
張貼留言