當前位置:
首頁 > 科技 > 速感科技CTO張一茗:視覺SLAM的技術現狀和應用趨勢

速感科技CTO張一茗:視覺SLAM的技術現狀和應用趨勢

主講人:張一茗 | 速感科技CTO

陳銘林 屈鑫 編輯整理

量子位 出品 | 公眾號 QbitAI

5月31日晚,量子位·吃瓜社邀請到速感科技CTO張一茗,從感測器的角度、演算法實現等角度詳細講解了SLAM的實現和應用,同時跟大家探討了SLAM未來的發展和應用。

本期主講人為速感科技CTO張一茗,畢業於北航,師從中國慣性技術領域的著名專家馮培德院士,多年組合導航定位系統研究經驗,為資深SLAM研究員,學術研究上發表多篇相關領域論文。

本次分享反應熱烈,量子位應讀者要求,將詳細文字筆記整理如下:

今天和大家探討的是視覺SLAM技術的一些現狀和應用的趨勢。

大概從幾個方面來講一下SLAM的實現和應用:第一個是從感測器的角度,第二個是從演算法實現的角度,第三個是從搭載硬體感測器平台上來說這些問題。

首先介紹下速感科技,我們2014年成立,在國內算是最早做SLAM相關AI技術應用的一個團隊,專註於機器視覺人工智慧在實際消費類和工業類產品中的應用,整合了一套定位、導航、路徑規劃、場景感知的演算法。

感測器的角度

首先,現在深度感測器或者攝像頭種類非常繁多,這裡簡單列了一下我所了解的深度攝像頭的一些路線對比。

從大類上可以分成三種:兩種帶主動光源——帶結構光的攝像頭和飛行時間法的攝像頭;還有一種是基於多目的被動光深度攝像頭。

結構光實際上歷史悠久的一種方案,像精度比較高的有投影光柵相位法、動態編碼結構光的方法,還有單目結構光、雙目結構光、掃描式結構光等等,它們各有各的優缺點。

在高精度測量上,很多人偏向用投影光柵相位法或者動態編碼結構光的方式,比如說動態編碼結構光,它會將6個或12個有不同編碼相位的Pattern投射到被測物體上面,然後用兩個攝像頭捕捉被投物體表面的紋理變化,再通過相位的計算,來計算出相當高精度的深度信息。

這種深度信息精度大概能夠達到微米級,但是成本相對來說也會比較高,有兩個原因:一是對投影儀光機要求高一些;另一個是對攝像頭解析度和鏡頭要求比較高,在消費類里大家一般不會使用這麼高精度的方式。

另外一種方法是投影光柵相位法,與動態編碼結構光相比更加簡單,比如說非常有名的傅里葉變換輪廓術的方式。

除此之外還有單目結構光,最近特別火的iPhoneX中採用的就是單目結構光的方案。

還有成本相對比較低,精度比較適宜的雙目結構光,目前廣泛應用在各種各樣的機器人上。

還有掃描結構光,它的精度比較高,成本也相對可控,比較適合在工業產品上使用的,有的是線掃描,有的是點掃描,而且可以達到相對比較高的精度。

像Google和聯想合作的Phab2 Pro的Tango手機,背後用的PMD家的Time of Flight攝像頭,在很多工業領域,像雷達,是用飛行時間法獲得深度信息,叫飛行時間法。

最後一種就是被動的雙目

演算法實現的角度

三角法

先說一下三角法的法則。

三角法的本質是一個解三角形的數學問題。

左側是一個比較有名的專利,是國外一家做清潔機器人公司在激光雷達上申請的一個專利。

這個專利描述的幾個基本點是:首先它有一個旋轉軸,帶著一個旋轉平台,上面有一個光源,有一個感測器,然後有一個處理器,光源向外發射一個準直的激光點,通過透鏡在感測器的CMOS上成像。

因為三角法的原理,導致障礙物越近在CMOS上的成像越偏左側,利用這種原理能夠測出跟被測點的距離信息,然後讓這個旋轉軸高速旋轉,就可以獲得一個360度連續的深度信息。

這個方法在當年來看是非常有創意的一個想法,也是被大家廣泛接受的一個雷達設計方式。但是有一點,這個雷達設計方式依然處在專利保護期範圍內,所以有一點比較危險:當量特別大時候會有一定的專利問題。

非三角測量

後面這種叫非三角測量,它是基於飛行時間法(Time of Flight)的激光雷達設計邏輯,飛行時間法的設計邏輯簡單來說就是打出一束光,光在空間中前進時需要時間,大概是30,000km/s,通過計算光的飛行時間,解算出往返的距離,最終得到被測點到探測物體的距離信息,這是它的基本邏輯。

右側有兩個圖,代表著ToF(Time of Flight)雷達的兩種技術流派,它們的本質都是有一顆光源向外打出一個時間調製的光脈衝,然後反射回來,但是大家持有不同的光路和專利。

像右上角這個圖,它採用的邏輯是用更小的發散孔徑,打到被測物體上,反射的時候有個凹面鏡,凹面鏡將發散的光斑匯聚在下方的APT二極體上,採集高靈敏度的光飛行時間,最終就能夠得到那一點的距離信息。

右下方的雷達,實際上是採用同心光路的一個邏輯,它旋轉的是平面度非常高的一面鏡子,這個鏡子旋轉的時候把下方的光源以及接收器做了光路的重疊和反射,讓這個光路的設計在體積上更瘦一些。但是這樣會浪費透鏡的一部分有效空間,所以效率會相對較低。

目前基於飛行時間法的激光雷達主要是這兩種基本邏輯。

深度圖測量方法

這幅圖是一種精度相對比較高的深度圖測量方法也就是傅里葉變換輪廓術的方式,它的邏輯是向被測物體投射出一系列條紋狀的Pattern。

這個Pattern有一些特點,它在橫向上光強是以正弦波的方式在空間中存在的,看起來就和雙縫衍射的邏輯差不多,投射出這個Pattern後,會在空間中形成一個主頻,這個主頻也跟背景雜訊有關。

用傅里葉變換的方式把被射物體的照片拍攝下來,分析出其中的主頻,把雜訊剔除掉,最終計算每個點理論和實際的一個相位差,就可以得到一個深度信息。

相對來說還是有很多好處。深度圖的解析度可以做得很高,因為每個相位點上都可以提供一些有效的信息,但是對比蘋果iPhone X的這種方法,它其實投射的並不是干涉條紋的Pattern,而是點Pattern。

優點是更小的體積,更好的功耗控制,在亮光下效果更好,缺點是深度圖的稠密度不是特別高,但是對於手機來說是無所謂的,因為它不需要做一個特別高精度特別稠密的深度圖,所以也是夠用的。

這裡是Apple的TrueDepth專利里的一些內容,比如它採用84°FOV的攝像頭來捕捉中間這幅圖裡的點Pattern,這是Apple 2013年收購Prime sense買的專利,並基於這個專利做了一個改進,實現了一個效果很不錯的深度圖採集。

當時為了使這個深度攝像頭有更好的成像效果,他們還針對光源、光路、DOE做了很多特定的設計,比如採用垂直面槍的激光發射器,它能夠在溫度發生變化的時候具有更好的溫漂表現,一度大概只漂零點零幾個納米,因為光學的東西特別怕折射率發生了變化,如果頻率發生了變化,之前標定好的一些Pattern都會失效,所以它用VCSEL(Vertical Cavity Suface Emitting Laser)光源的方式將Projector投射出來的結構光更加穩定,而且它還利用反射鏡的方式,在不增加手機厚度的情況下增加了整個光程,就是隱形地將整個焦距拉大,這樣投射出去的效果也會更好一些。

基於線的測量

剛剛說了兩種深度攝像頭,一個是基於相位法的,一個是基於點陣法的,其實還有一些基於線的。

比如SICK公司的一個叫RULER的產品,它的邏輯是有一顆攝像頭,還有線激光,但是它的線激光會打到一個旋轉的鏡子上,通過鏡子的旋轉,使線激光反射到空間中不同的位置。

當鏡子旋轉一圈的時候,這個線激光也可以在空間中進行一次掃描,攝像頭會連續拍下很多張照片,通過將這些圖片得到的深度信息進行疊加可以得到一個精度很高的三維圖形。這種方法在工業分揀、工業深度檢測的一些領域得到了很多應用,也是一種特別有創意的用法。

還有其他與之類似的邏輯,比如RealSense當年出的R200的邏輯,也是利用了一面鏡子,只不過這面鏡子有點特殊,它是利用MEMS工藝製作出來的鏡子,和TI的DLP一樣,其實是使用微機電系統搭建了一個非常非常小的鏡子放在硅基的晶元上,然後兩邊的諧振梁進行彎曲,控制鏡子的反射角度,然後它旁邊有一個激光器,時刻往鏡子上打一個點激光,這個鏡子被控制成一個非常高頻的調製模式,就像老式電視CRT的那個被投,迅速進行行列掃描,再在空間中投射出一個點狀的Pattern,被攝像頭採集到之後就可以解算出一個有用的深度信息。

這個最大的好處是能節省很大的體積,因為它不需要透鏡,在很多光源下的效率上也會高一些。

基於雙目結構光的深度攝像頭

然後是現在機器人上用的比較多的方式:基於雙目結構光的深度攝像頭。

據說蘋果接下來採用的也是這種技術,它的基本邏輯和單目結構光差不多,只不過多了一個攝像頭,但是有很多好處:首先是沒有專利問題,其次是對產品的良率要求比較低,因為單目結構光是相當於利用點陣投射器,在攝像頭之間進行了一個三角測量。

但是雙目攝像頭實際上是利用兩顆攝像頭和被射物體點進行深度測量,這裡最大的差別就在於將投射器和光源的標定要求降低了很多,不需要在生產的時候進行繁瑣的標定以及不需要對光源提出這麼高的要求,可以用更低的生產成本生產出這個深度攝像頭,而且它有一個非常可觀的深度圖效果。

左側兩幅比較黑的圖像分別是左側攝像頭和右側攝像頭看到的紅外波段的圖像,右側這副是兩顆攝像頭合併出來的深度圖,可以看到它的效果是相當理想的。

基於面陣攝像頭

再一種就像大疆Spark飛機上用的TIme of Flight基於面陣攝像頭,有基於相位法的,有脈衝法的,核心邏輯跟雷達是一樣的,投射出一個面狀的光源,測量不同點的反射光程差,然後測量距離。

這也是一種聰明的方法,它可以用更低的標定成本來實現整個攝像頭的生產。

以ZED為例,它做了一個被動的雙目攝像頭,這種攝像頭相對來說很簡單很容易做,但是有個缺陷,就是特別怕沒有紋理或者有重複紋理的情況,對於白牆、棋盤格這種類似的東西特別敏感,而且需要一個算力相對比較強的上位機來進行深度圖的解算,也算是一個比較耗算力的計算方式,但是它應該是所有設計方案中成本最低的一種。

其他感測器

為了實現整套SLAM,除了攝像頭以外,其他感測器也是特別關鍵的,比如說IMU(Inertial Measurement Unit),主要由陀螺儀和加速器構成

對於陀螺儀來說,它是非常有用的一種器件,精度變化範圍特別大,像手機裡面用的這種陀螺儀,一般是180°/小時的零偏穩定性,但是精度比較高的一些地方,比如在工業領域用小直徑的光學陀螺,它可以達到大約1°/小時的精度,導彈上用的通常是零點幾度/小時,洲際戰略導彈大概會用百分之一以下甚至千分之幾的零偏穩定性。

現在有很多人在研究原子陀螺這種方式,利用原子干涉效應可以達到十的負八次方的精度,這是相當可觀的。

如果按照這個精度來算,一個純靠慣性器件計算微距離的設備,連續使用它兩年,它定位的誤差也才達到幾米。

但是陀螺儀有很多弊端,比如零偏、雜訊的問題,它的誤差是會累積的,這個也是需要在演算法里做一些互補融合。

加速度計也是裡面一種關鍵的器件,它的特點和人的感受其實略有不同,它只能測量表面力,所以它默認輸出量里會包含重力加速度,這是一個比較麻煩的事情,所以大家通常會認為加速度計的直接輸出量叫比力,而不叫加速度,因為它並不代表絕對的加速度,它的公式為

這裡的是地球自然角速度,是當前物體相對於地球的經緯度,這是因為當一個物體在地球上運動的時候,它其實是一個有向心加速度的現象,所以一個物體在地球表面運動的時候會產生一定的加速度,干擾到它的存在。

這裡的原理其實還挺多的,比如擺式積分式、振弦式、振梁式的等等,目前來說精度比較高的還是這種壓電式的加速度計,因為加速度計它會帶來二階導的誤差,所以大家並不在意它的誤差,但這是相比陀螺儀來說,因為陀螺儀的誤差相比它來說要多一階積分,所以陀螺儀的精度更被大家所看重。

大家在實際用的時候,通常會特別在意IMU的一些特性,比如它的標度因數誤差,就是它的刻度係數誤差,比如MEMS工藝的IMU,其實很難保證每個軸都是完全正交的,這個就需要標定出非正交性的一些誤差,零偏是一個最基本的誤差,還有溫度漂移的誤差。

溫漂誤差相對來說更加可怕一些,首先對於MEMS器件,它的溫漂一致性特別差,同一個批次的,比如說飛機上的MPU-6050,它本身的精度還不錯,可能非正交性誤差等等其他一致性還不錯,但是同一批次不同晶元,它的溫漂一致性會差別特別大,甚至升溫形成或者降溫形成整個過程,它的溫漂也是不一樣的,比如這塊IMU放在手機裡面,用戶在使用的時候晶元會發熱,溫度升高的時候,它的零偏是逐漸變化的,這個時候它的差別就特別大,這個時候就需要大家能夠動態估計這些器件的一個誤差,才能夠做到一個更好的補償。

SLAM技術的崛起和發展

單目SLAM和多目SLAM

目前主流的SLAM還是希望用視覺和慣性器件來做這個組合,大家用得比較多的也是單目SLAM和多目SLAM兩條主線。

單目SLAM相對來說,它的優勢是體積可以做得特別小,成本很低,基本上一個主晶元、一個攝像頭、一個IMU就可以把一個東西給做出來,但是有個致命的缺點,就是沒有尺度的這個問題。雖然這個問題現在來說可以解決了,但是通常它還是沒有雙目SLAM那麼准。

還有一個問題就是,在一個陌生區域做原地旋轉的時候,它會造成尺度無法確立的問題。它也有一些解法,但是這個問題相對來說比較難解決,對演算法的挑戰要更高。

對於雙目或者多目SLAM來說,因為它是兩個攝像頭經過事先的標定,它知道自己的兩個眼睛的差距有多大,所以從魯棒性和穩定性來說其實要更好一些,但是缺點就是對計算的要求更高,對於性能要求比較高的場合,用雙目或多目攝像頭更合適一些,比如HoloLens就很明智地選擇四顆小視場角的攝像頭的這種方式來進行SLAM定位,這能保證它在更多場景下定位不出問題。

雷達SLAM

雷達SLAM就不多講了,推薦一個比較有名的論文,是基於雷達、慣性器件、衛星導航設備(GNSS)來做的一個組合融合,現在目前來說用RTK這種衛星導航的方式可以做到一個厘米級的定位精度,前提是在沒有太多的多徑干擾、遮擋比較少的情況下。

這是一個相對來說比較有效的模型,它的前提是需要儘可能事先建立一個場景的三維地圖。要能夠提高它的匹配精度,應該在室外無人駕駛中用得比較多。

目前的SLAM也在朝著傳統的純建模和深度學習組合的方式在前進,這也是大家的一個共識,怎麼把這個事情融合到一塊還是有很多的學問。

比如說這幅圖裡面,首先它會分支出幾條不同的線,一條線是在定位丟失的情況下做一個重定位,另外一條線是用來更新神經網路模型,然後進行標註,最終形成一個場景語義地圖。同時也會用傳統的方式,將圖像送到SLAM中進行位置姿態的估計,其中會有很多的耦合和數據的內循環,整個架構會相對複雜一些,這也是SLAM目前發展的一個挑戰。

SLAM具體落地應用的框架

這裡講一些SLAM具體落地應用的框架,因為只有SLAM是不夠的,它只能做定位和一定程度上的建圖,而且很多時候都是用稀疏點雲的方式來進行建圖,這對於導航來說還是不夠的。

對於實際的應用場景,對於魯棒性的要求非常高,所以通常情況下我們更傾向採用這種多級的保護機制,比如在機器人上最差也要有里程計這樣的東西,讓它能夠知道自己在哪,雖然不是特別准,但是它能夠提供一個基礎的信息,即使它在那一瞬間視覺信息完全失效,它也能夠堅持一會兒。

同時利用一些慣性和外界的信息,比如說超聲、碰撞信息等等,進行地圖的更新和融合,再把定位信息、各種不同感測器和地圖的信息根據類似歷史濾波的邏輯做一個定位功能的增強,有了這些之後,會把這些地圖、機器人位置送給導航模塊來進行路徑規劃和任務的處理。

總之,只有SLAM還是不夠的,需要窮盡各種各樣的方法對感測器進行魯棒性的提升。

現在,無論是Sparse SLAM還是Dense SLAM甚至Semantic SLAM已經逐漸發展得很龐大了,對算力的要求越來越高,整體的趨勢都得到一致的認同。

具體的難點相對來說也比較明確,其中一個比較大的難點就是算力問題,算力問題一直以來都是SLAM比較頭疼的一個問題,但是也有很多解決的方法,比如Cortex A系列ARM有一個方案,它就是用ARM SISC指令集和GPU,然後基於OpenGL進行加速,比如在一些矩陣運算和濾波運算元的一些加速上其實還是有不少提升的。

但是它的缺點在於從數據搬運角度來說做的優化還不夠多,所以看起來CPU算得快了,但是數據送得不夠快,所以相對來說整個算力的提升也就是幾倍的提升。

異構處理器

還有一些比較有名的異構處理器,現在有各種各樣的SPU,一些老牌的廠商也會做自己的一些加速器,比如CEVA XM系列,就是用VPU加SPU組合的邏輯,配合他們的Vector DRAM提高數據搬運速率,同時也通過更高位寬的寄存器實現更高的處理效率,同時用Scalar Prcessing Unit進行邏輯上的調度,提高它的片內數據搬運的成本,以提高整個晶元效率。

目前基於這個處理器能做到一個類似於將YOLO網路實現大約10Hz的幀率,還是一個挺好用的方案,像之前被Intel收購的Movidius,也出了一個叫計算神經棒的東西,能將各種網路布置到它的晶元上。

比較有意思的是,它的晶元上有兩個小的類似Scalar Processing Unit,或者類似ARM小調度處理器,專門負責片內的數據調度,旁邊有十二個Vector Processors,它同時在晶元上還做了好多外置的圖像處理演算法加速器,比如有圖像特徵等等。

它們都放在這個片子上,大家在用的時候可以實現一個更靈活的加速,因為核比較多。大疆早期也是用這個去做的,但是它的缺點就是RISC那套邏輯用的也不是ARM的,是歐洲航天局的,所以生態鏈不是特別完善,好多工具也不是特別完整,用起來比較吃力一些,但是這個片子的設計架構和邏輯在當時是非常新穎和有創新性的,直到現在也還是非常有代表性的一個片子。

在有了演算法、處理器、感測器之後,整個SLAM還是需要生態,首先前端有Camera的一些預處理邏輯,有各種各樣的感測器接到它的Sensor Interface上,同時需要接到各種執行器件上,比如電機、工業上的機械臂等等,它腦子裡要有用Real-Time Loop,負責各種實時性的調度,比如高精度的感測器時間戳的採集和對準,以及高實時性器件的執行和反饋。

它後端還需要有一個相對來說比較強的後端集群優化或者深度學習執行,整體來說還是一個比較龐大的框架,但是任何一個機器人都需要這個框架,否則也不能夠達到一個穩定的應用,

舉個例子,我們目前有一個單目的模塊,這個模塊其實是3cm x 8cm,核心硬體比較簡單,有處理器、DDR、Flash、攝像頭、IMU和WIFi,在主晶元上面做了一個On Chip的實時的SLAM。

它其實描述的是一個用單目攝像頭在一個家庭環境中進行的一系列定位以及全覆蓋的路徑規劃,能夠實現整個家庭環境全覆蓋的清掃功能,就是基於這樣一個3刀左右晶元來實現的。

SLAM發展的挑戰

SLAM以後發展還有很多挑戰。

視覺SLAM中依然沒有很好解決的一個問題就是暗光問題,比如怎麼去實現低照度下的CMOS環境感知。

我們目前用的是一個3um x 3um大的像元尺寸,但是在個位數勒克斯光照強度暗室下,就是暗環境下,vSLAM還是會退化,所以這也是目前的一個挑戰。

未來SLAM發展方向第一點就是和AI、語義的結合,無論是Semantic還是和安防功能的結合、還是和服務功能的結合,比如說SLAM運作的過程中可以通過深度學習識別各種不同的動態障礙物,然後進行SLAM的一個精度的增強或者說進行一個場景的識別;比如說可以識別出廚房、卧室、客廳,進行場景的自動劃分,然後提供未來指令型任務的輸入和輸出,同時還可以在家裡做一些安防功能,比如看門窗有沒有關好。

SLAM下一步更需要的是一個更適合的處理器,首先最好是在On-chip方式上實現Deep Learning,目前有些case能做出來,但是相對來說成本比較高,生態鏈也不夠完善,需要有更多公司進來把產業鏈做得更加開放、方便一些。

其實從處理器的角度來說,希望有各種各樣的異構處理器,一方面能夠保證算力性能,比如用更高配置的ARM核、DSP核進行算力上的增強,同時也希望有類似MCU的這種Cortex M系列的處理器核,提高它的實時性性能,這樣它才能夠容易地應用在各種各樣的場景中。

在硬體上也需要有更高精度的IMU,提高整個慣性測量的性能。還需要更快的數據傳輸和數據存儲,SLAM隨著地圖的增大,它的數據量是迅速增加的,如果不能夠將這些數據通信和存儲的效率提高的話,瓶頸還是比較大,需要各種各樣的行業協力才能把SLAM做得更好。

相關學習資料


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 量子位 的精彩文章:

史上最大規模機器人「面相」調查:157張臉背後的人類感受
科大訊飛360雙雙增發募資,加碼人工智慧等領域投入

TAG:量子位 |