本期主講人為速感科技CTO張一茗,畢業(yè)于北航,師從中國慣性技術(shù)領域的著名專家馮培德院士,多年組合導航定位系統(tǒng)研究經(jīng)驗,為資深SLAM研究員,學術(shù)研究上發(fā)表多篇相關領域論文。
今天和大家探討的是視覺SLAM技術(shù)的一些現(xiàn)狀和應用的趨勢。
大概從幾個方面來講一下SLAM的實現(xiàn)和應用:第一個是從傳感器的角度,第二個是從算法實現(xiàn)的角度,第三個是從搭載硬件傳感器平臺上來說這些問題。
首先介紹下速感科技,我們2014年成立,在國內(nèi)算是最早做SLAM相關AI技術(shù)應用的一個團隊,專注于機器視覺人工智能在實際消費類和工業(yè)類產(chǎn)品中的應用,整合了一套定位、導航、路徑規(guī)劃、場景感知的算法。
傳感器的角度
首先,現(xiàn)在深度傳感器或者攝像頭種類非常繁多,這里簡單列了一下我所了解的深度攝像頭的一些路線對比。
從大類上可以分成三種:兩種帶主動光源——帶結(jié)構(gòu)光的攝像頭和飛行時間法的攝像頭;還有一種是基于多目的被動光深度攝像頭。
結(jié)構(gòu)光實際上歷史悠久的一種方案,像精度比較高的有投影光柵相位法、動態(tài)編碼結(jié)構(gòu)光的方法,還有單目結(jié)構(gòu)光、雙目結(jié)構(gòu)光、掃描式結(jié)構(gòu)光等等,它們各有各的優(yōu)缺點。
在高精度測量上,很多人偏向用投影光柵相位法或者動態(tài)編碼結(jié)構(gòu)光的方式,比如說動態(tài)編碼結(jié)構(gòu)光,它會將6個或12個有不同編碼相位的Pattern投射到被測物體上面,然后用兩個攝像頭捕捉被投物體表面的紋理變化,再通過相位的計算,來計算出相當高精度的深度信息。
這種深度信息精度大概能夠達到微米級,但是成本相對來說也會比較高,有兩個原因:一是對投影儀光機要求高一些;另一個是對攝像頭分辨率和鏡頭要求比較高,在消費類里大家一般不會使用這么高精度的方式。
另外一種方法是投影光柵相位法,與動態(tài)編碼結(jié)構(gòu)光相比更加簡單,比如說非常有名的傅里葉變換輪廓術(shù)的方式。
除此之外還有單目結(jié)構(gòu)光,最近特別火的iPhoneX中采用的就是單目結(jié)構(gòu)光的方案。
還有成本相對比較低,精度比較適宜的雙目結(jié)構(gòu)光,目前廣泛應用在各種各樣的機器人上。
還有掃描結(jié)構(gòu)光,它的精度比較高,成本也相對可控,比較適合在工業(yè)產(chǎn)品上使用的,有的是線掃描,有的是點掃描,而且可以達到相對比較高的精度。
像Google和聯(lián)想合作的Phab2 Pro的Tango手機,背后用的PMD家的Time of Flight攝像頭,在很多工業(yè)領域,像雷達,是用飛行時間法獲得深度信息,叫飛行時間法。
最后一種就是被動的雙目。
算法實現(xiàn)的角度
三角法
先說一下三角法的法則。
三角法的本質(zhì)是一個解三角形的數(shù)學問題。
左側(cè)是一個比較有名的專利,是國外一家做清潔機器人公司在激光雷達上申請的一個專利。
這個專利描述的幾個基本點是:首先它有一個旋轉(zhuǎn)軸,帶著一個旋轉(zhuǎn)平臺,上面有一個光源,有一個傳感器,然后有一個處理器,光源向外發(fā)射一個準直的激光點,通過透鏡在傳感器的CMOS上成像。
因為三角法的原理,導致障礙物越近在CMOS上的成像越偏左側(cè),利用這種原理能夠測出跟被測點的距離信息,然后讓這個旋轉(zhuǎn)軸高速旋轉(zhuǎn),就可以獲得一個360度連續(xù)的深度信息。
這個方法在當年來看是非常有創(chuàng)意的一個想法,也是被大家廣泛接受的一個雷達設計方式。但是有一點,這個雷達設計方式依然處在專利保護期范圍內(nèi),所以有一點比較危險:當量特別大時候會有一定的專利問題。
非三角測量
后面這種叫非三角測量,它是基于飛行時間法(Time of Flight)的激光雷達設計邏輯,飛行時間法的設計邏輯簡單來說就是打出一束光,光在空間中前進時需要時間,大概是30,000km/s,通過計算光的飛行時間,解算出往返的距離,最終得到被測點到探測物體的距離信息,這是它的基本邏輯。
右側(cè)有兩個圖,代表著ToF(Time of Flight)雷達的兩種技術(shù)流派,它們的本質(zhì)都是有一顆光源向外打出一個時間調(diào)制的光脈沖,然后反射回來,但是大家持有不同的光路和專利。
像右上角這個圖,它采用的邏輯是用更小的發(fā)散孔徑,打到被測物體上,反射的時候有個凹面鏡,凹面鏡將發(fā)散的光斑匯聚在下方的APT二極管上,采集高靈敏度的光飛行時間,最終就能夠得到那一點的距離信息。
右下方的雷達,實際上是采用同心光路的一個邏輯,它旋轉(zhuǎn)的是平面度非常高的一面鏡子,這個鏡子旋轉(zhuǎn)的時候把下方的光源以及接收器做了光路的重疊和反射,讓這個光路的設計在體積上更瘦一些。但是這樣會浪費透鏡的一部分有效空間,所以效率會相對較低。
目前基于飛行時間法的激光雷達主要是這兩種基本邏輯。
深度圖測量方法
這幅圖是一種精度相對比較高的深度圖測量方法,也就是傅里葉變換輪廓術(shù)的方式,它的邏輯是向被測物體投射出一系列條紋狀的Pattern。
這個Pattern有一些特點,它在橫向上光強是以正弦波的方式在空間中存在的,看起來就和雙縫衍射的邏輯差不多,投射出這個Pattern后,會在空間中形成一個主頻,這個主頻也跟背景噪聲有關。
用傅里葉變換的方式把被射物體的照片拍攝下來,分析出其中的主頻,把噪聲剔除掉,最終計算每個點理論和實際的一個相位差,就可以得到一個深度信息。
相對來說還是有很多好處。深度圖的分辨率可以做得很高,因為每個相位點上都可以提供一些有效的信息,但是對比蘋果iPhone X的這種方法,它其實投射的并不是干涉條紋的Pattern,而是點Pattern。
優(yōu)點是更小的體積,更好的功耗控制,在亮光下效果更好,缺點是深度圖的稠密度不是特別高,但是對于手機來說是無所謂的,因為它不需要做一個特別高精度特別稠密的深度圖,所以也是夠用的。
這里是Apple的TrueDepth專利里的一些內(nèi)容,比如它采用84°FOV的攝像頭來捕捉中間這幅圖里的點Pattern,這是Apple 2013年收購Prime sense買的專利,并基于這個專利做了一個改進,實現(xiàn)了一個效果很不錯的深度圖采集。
當時為了使這個深度攝像頭有更好的成像效果,他們還針對光源、光路、DOE做了很多特定的設計,比如采用垂直面槍的激光發(fā)射器,它能夠在溫度發(fā)生變化的時候具有更好的溫漂表現(xiàn),一度大概只漂零點零幾個納米,因為光學的東西特別怕折射率發(fā)生了變化,如果頻率發(fā)生了變化,之前標定好的一些Pattern都會失效,所以它用VCSEL(Vertical Cavity Suface Emitting Laser)光源的方式將Projector投射出來的結(jié)構(gòu)光更加穩(wěn)定,而且它還利用反射鏡的方式,在不增加手機厚度的情況下增加了整個光程,就是隱形地將整個焦距拉大,這樣投射出去的效果也會更好一些。
基于線的測量
剛剛說了兩種深度攝像頭,一個是基于相位法的,一個是基于點陣法的,其實還有一些基于線的。
比如SICK公司的一個叫RULER的產(chǎn)品,它的邏輯是有一顆攝像頭,還有線激光,但是它的線激光會打到一個旋轉(zhuǎn)的鏡子上,通過鏡子的旋轉(zhuǎn),使線激光反射到空間中不同的位置。
當鏡子旋轉(zhuǎn)一圈的時候,這個線激光也可以在空間中進行一次掃描,攝像頭會連續(xù)拍下很多張照片,通過將這些圖片得到的深度信息進行疊加可以得到一個精度很高的三維圖形。這種方法在工業(yè)分揀、工業(yè)深度檢測的一些領域得到了很多應用,也是一種特別有創(chuàng)意的用法。
還有其他與之類似的邏輯,比如RealSense當年出的R200的邏輯,也是利用了一面鏡子,只不過這面鏡子有點特殊,它是利用MEMS工藝制作出來的鏡子,和TI的DLP一樣,其實是使用微機電系統(tǒng)搭建了一個非常非常小的鏡子放在硅基的芯片上,然后兩邊的諧振梁進行彎曲,控制鏡子的反射角度,然后它旁邊有一個激光器,時刻往鏡子上打一個點激光,這個鏡子被控制成一個非常高頻的調(diào)制模式,就像老式電視CRT的那個被投,迅速進行行列掃描,再在空間中投射出一個點狀的Pattern,被攝像頭采集到之后就可以解算出一個有用的深度信息。
這個最大的好處是能節(jié)省很大的體積,因為它不需要透鏡,在很多光源下的效率上也會高一些。
基于雙目結(jié)構(gòu)光的深度攝像頭
然后是現(xiàn)在機器人上用的比較多的方式:基于雙目結(jié)構(gòu)光的深度攝像頭。
據(jù)說蘋果接下來采用的也是這種技術(shù),它的基本邏輯和單目結(jié)構(gòu)光差不多,只不過多了一個攝像頭,但是有很多好處:首先是沒有專利問題,其次是對產(chǎn)品的良率要求比較低,因為單目結(jié)構(gòu)光是相當于利用點陣投射器,在攝像頭之間進行了一個三角測量。
但是雙目攝像頭實際上是利用兩顆攝像頭和被射物體點進行深度測量,這里最大的差別就在于將投射器和光源的標定要求降低了很多,不需要在生產(chǎn)的時候進行繁瑣的標定以及不需要對光源提出這么高的要求,可以用更低的生產(chǎn)成本生產(chǎn)出這個深度攝像頭,而且它有一個非??捎^的深度圖效果。
左側(cè)兩幅比較黑的圖像分別是左側(cè)攝像頭和右側(cè)攝像頭看到的紅外波段的圖像,右側(cè)這副是兩顆攝像頭合并出來的深度圖,可以看到它的效果是相當理想的。
基于面陣攝像頭
再一種就像大疆Spark飛機上用的TIme of Flight基于面陣攝像頭,有基于相位法的,有脈沖法的,核心邏輯跟雷達是一樣的,投射出一個面狀的光源,測量不同點的反射光程差,然后測量距離。
這也是一種聰明的方法,它可以用更低的標定成本來實現(xiàn)整個攝像頭的生產(chǎn)。
以ZED為例,它做了一個被動的雙目攝像頭,這種攝像頭相對來說很簡單很容易做,但是有個缺陷,就是特別怕沒有紋理或者有重復紋理的情況,對于白墻、棋盤格這種類似的東西特別敏感,而且需要一個算力相對比較強的上位機來進行深度圖的解算,也算是一個比較耗算力的計算方式,但是它應該是所有設計方案中成本最低的一種。
其他傳感器
為了實現(xiàn)整套SLAM,除了攝像頭以外,其他傳感器也是特別關鍵的,比如說IMU(Inertial Measurement Unit),主要由陀螺儀和加速器構(gòu)成。
對于陀螺儀來說,它是非常有用的一種器件,精度變化范圍特別大,像手機里面用的這種陀螺儀,一般是180°/小時的零偏穩(wěn)定性,但是精度比較高的一些地方,比如在工業(yè)領域用小直徑的光學陀螺,它可以達到大約1°/小時的精度,導彈上用的通常是零點幾度/小時,洲際戰(zhàn)略導彈大概會用百分之一以下甚至千分之幾的零偏穩(wěn)定性。
現(xiàn)在有很多人在研究原子陀螺這種方式,利用原子干涉效應可以達到十的負八次方的精度,這是相當可觀的。
如果按照這個精度來算,一個純靠慣性器件計算微距離的設備,連續(xù)使用它兩年,它定位的誤差也才達到幾米。
但是陀螺儀有很多弊端,比如零偏、噪聲的問題,它的誤差是會累積的,這個也是需要在算法里做一些互補融合。
加速度計也是里面一種關鍵的器件,它的特點和人的感受其實略有不同,它只能測量表面力,所以它默認輸出量里會包含重力加速度,這是一個比較麻煩的事情,所以大家通常會認為加速度計的直接輸出量叫比力,而不叫加速度,因為它并不代表絕對的加速度,它的公式為
這里的是地球自然角速度,是當前物體相對于地球的經(jīng)緯度,這是因為當一個物體在地球上運動的時候,它其實是一個有向心加速度的現(xiàn)象,所以一個物體在地球表面運動的時候會產(chǎn)生一定的加速度,干擾到它的存在。
這里的原理其實還挺多的,比如擺式積分式、振弦式、振梁式的等等,目前來說精度比較高的還是這種壓電式的加速度計,因為加速度計它會帶來二階導的誤差,所以大家并不在意它的誤差,但這是相比陀螺儀來說,因為陀螺儀的誤差相比它來說要多一階積分,所以陀螺儀的精度更被大家所看重。
大家在實際用的時候,通常會特別在意IMU的一些特性,比如它的標度因數(shù)誤差,就是它的刻度系數(shù)誤差,比如MEMS工藝的IMU,其實很難保證每個軸都是完全正交的,這個就需要標定出非正交性的一些誤差,零偏是一個最基本的誤差,還有溫度漂移的誤差。
溫漂誤差相對來說更加可怕一些,首先對于MEMS器件,它的溫漂一致性特別差,同一個批次的,比如說飛機上的MPU-6050,它本身的精度還不錯,可能非正交性誤差等等其他一致性還不錯,但是同一批次不同芯片,它的溫漂一致性會差別特別大,甚至升溫形成或者降溫形成整個過程,它的溫漂也是不一樣的,比如這塊IMU放在手機里面,用戶在使用的時候芯片會發(fā)熱,溫度升高的時候,它的零偏是逐漸變化的,這個時候它的差別就特別大,這個時候就需要大家能夠動態(tài)估計這些器件的一個誤差,才能夠做到一個更好的補償。
SLAM技術(shù)的崛起和發(fā)展
單目SLAM和多目SLAM
目前主流的SLAM還是希望用視覺和慣性器件來做這個組合,大家用得比較多的也是單目SLAM和多目SLAM兩條主線。
單目SLAM相對來說,它的優(yōu)勢是體積可以做得特別小,成本很低,基本上一個主芯片、一個攝像頭、一個IMU就可以把一個東西給做出來,但是有個致命的缺點,就是沒有尺度的這個問題。雖然這個問題現(xiàn)在來說可以解決了,但是通常它還是沒有雙目SLAM那么準。
還有一個問題就是,在一個陌生區(qū)域做原地旋轉(zhuǎn)的時候,它會造成尺度無法確立的問題。它也有一些解法,但是這個問題相對來說比較難解決,對算法的挑戰(zhàn)要更高。
對于雙目或者多目SLAM來說,因為它是兩個攝像頭經(jīng)過事先的標定,它知道自己的兩個眼睛的差距有多大,所以從魯棒性和穩(wěn)定性來說其實要更好一些,但是缺點就是對計算的要求更高,對于性能要求比較高的場合,用雙目或多目攝像頭更合適一些,比如HoloLens就很明智地選擇四顆小視場角的攝像頭的這種方式來進行SLAM定位,這能保證它在更多場景下定位不出問題。
雷達SLAM
雷達SLAM就不多講了,推薦一個比較有名的論文,是基于雷達、慣性器件、衛(wèi)星導航設備(GNSS)來做的一個組合融合,現(xiàn)在目前來說用RTK這種衛(wèi)星導航的方式可以做到一個厘米級的定位精度,前提是在沒有太多的多徑干擾、遮擋比較少的情況下。
這是一個相對來說比較有效的模型,它的前提是需要盡可能事先建立一個場景的三維地圖。要能夠提高它的匹配精度,應該在室外無人駕駛中用得比較多。
目前的SLAM也在朝著傳統(tǒng)的純建模和深度學習組合的方式在前進,這也是大家的一個共識,怎么把這個事情融合到一塊還是有很多的學問。
比如說這幅圖里面,首先它會分支出幾條不同的線,一條線是在定位丟失的情況下做一個重定位,另外一條線是用來更新神經(jīng)網(wǎng)絡模型,然后進行標注,最終形成一個場景語義地圖。同時也會用傳統(tǒng)的方式,將圖像送到SLAM中進行位置姿態(tài)的估計,其中會有很多的耦合和數(shù)據(jù)的內(nèi)循環(huán),整個架構(gòu)會相對復雜一些,這也是SLAM目前發(fā)展的一個挑戰(zhàn)。
SLAM具體落地應用的框架
這里講一些SLAM具體落地應用的框架,因為只有SLAM是不夠的,它只能做定位和一定程度上的建圖,而且很多時候都是用稀疏點云的方式來進行建圖,這對于導航來說還是不夠的。
對于實際的應用場景,對于魯棒性的要求非常高,所以通常情況下我們更傾向采用這種多級的保護機制,比如在機器人上最差也要有里程計這樣的東西,讓它能夠知道自己在哪,雖然不是特別準,但是它能夠提供一個基礎的信息,即使它在那一瞬間視覺信息完全失效,它也能夠堅持一會兒。
同時利用一些慣性和外界的信息,比如說超聲、碰撞信息等等,進行地圖的更新和融合,再把定位信息、各種不同傳感器和地圖的信息根據(jù)類似歷史濾波的邏輯做一個定位功能的增強,有了這些之后,會把這些地圖、機器人位置送給導航模塊來進行路徑規(guī)劃和任務的處理。
總之,只有SLAM還是不夠的,需要窮盡各種各樣的方法對傳感器進行魯棒性的提升。
現(xiàn)在,無論是Sparse SLAM還是Dense SLAM甚至Semantic SLAM已經(jīng)逐漸發(fā)展得很龐大了,對算力的要求越來越高,整體的趨勢都得到一致的認同。
具體的難點相對來說也比較明確,其中一個比較大的難點就是算力問題,算力問題一直以來都是SLAM比較頭疼的一個問題,但是也有很多解決的方法,比如Cortex A系列ARM有一個方案,它就是用ARM SISC指令集和GPU,然后基于OpenGL進行加速,比如在一些矩陣運算和濾波算子的一些加速上其實還是有不少提升的。
但是它的缺點在于從數(shù)據(jù)搬運角度來說做的優(yōu)化還不夠多,所以看起來CPU算得快了,但是數(shù)據(jù)送得不夠快,所以相對來說整個算力的提升也就是幾倍的提升。
異構(gòu)處理器
還有一些比較有名的異構(gòu)處理器,現(xiàn)在有各種各樣的SPU,一些老牌的廠商也會做自己的一些加速器,比如CEVA XM系列,就是用VPU加SPU組合的邏輯,配合他們的Vector DRAM提高數(shù)據(jù)搬運速率,同時也通過更高位寬的寄存器實現(xiàn)更高的處理效率,同時用Scalar Prcessing Unit進行邏輯上的調(diào)度,提高它的片內(nèi)數(shù)據(jù)搬運的成本,以提高整個芯片效率。
目前基于這個處理器能做到一個類似于將YOLO網(wǎng)絡實現(xiàn)大約10Hz的幀率,還是一個挺好用的方案,像之前被Intel收購的Movidius,也出了一個叫計算神經(jīng)棒的東西,能將各種網(wǎng)絡布置到它的芯片上。
比較有意思的是,它的芯片上有兩個小的類似Scalar Processing Unit,或者類似ARM小調(diào)度處理器,專門負責片內(nèi)的數(shù)據(jù)調(diào)度,旁邊有十二個Vector Processors,它同時在芯片上還做了好多外置的圖像處理算法加速器,比如有圖像特征等等。
它們都放在這個片子上,大家在用的時候可以實現(xiàn)一個更靈活的加速,因為核比較多。大疆早期也是用這個去做的,但是它的缺點就是RISC那套邏輯用的也不是ARM的,是歐洲航天局的,所以生態(tài)鏈不是特別完善,好多工具也不是特別完整,用起來比較吃力一些,但是這個片子的設計架構(gòu)和邏輯在當時是非常新穎和有創(chuàng)新性的,直到現(xiàn)在也還是非常有代表性的一個片子。
在有了算法、處理器、傳感器之后,整個SLAM還是需要生態(tài),首先前端有Camera的一些預處理邏輯,有各種各樣的傳感器接到它的Sensor Interface上,同時需要接到各種執(zhí)行器件上,比如電機、工業(yè)上的機械臂等等,它腦子里要有用Real-Time Loop,負責各種實時性的調(diào)度,比如高精度的傳感器時間戳的采集和對準,以及高實時性器件的執(zhí)行和反饋。
它后端還需要有一個相對來說比較強的后端集群優(yōu)化或者深度學習執(zhí)行,整體來說還是一個比較龐大的框架,但是任何一個機器人都需要這個框架,否則也不能夠達到一個穩(wěn)定的應用,
舉個例子,我們目前有一個單目的模塊,這個模塊其實是3cm x 8cm,核心硬件比較簡單,有處理器、DDR、Flash、攝像頭、IMU和WIFi,在主芯片上面做了一個On Chip的實時的SLAM。
它其實描述的是一個用單目攝像頭在一個家庭環(huán)境中進行的一系列定位以及全覆蓋的路徑規(guī)劃,能夠?qū)崿F(xiàn)整個家庭環(huán)境全覆蓋的清掃功能,就是基于這樣一個3刀左右芯片來實現(xiàn)的。
SLAM發(fā)展的挑戰(zhàn)
SLAM以后發(fā)展還有很多挑戰(zhàn)
視覺SLAM中依然沒有很好解決的一個問題就是暗光問題,比如怎么去實現(xiàn)低照度下的CMOS環(huán)境感知。
我們目前用的是一個3um x 3um大的像元尺寸,但是在個位數(shù)勒克斯光照強度暗室下,就是暗環(huán)境下,vSLAM還是會退化,所以這也是目前的一個挑戰(zhàn)。
未來SLAM發(fā)展方向第一點就是和AI、語義的結(jié)合,無論是Semantic還是和安防功能的結(jié)合、還是和服務功能的結(jié)合,比如說SLAM運作的過程中可以通過深度學習識別各種不同的動態(tài)障礙物,然后進行SLAM的一個精度的增強或者說進行一個場景的識別;比如說可以識別出廚房、臥室、客廳,進行場景的自動劃分,然后提供未來指令型任務的輸入和輸出,同時還可以在家里做一些安防功能,比如看門窗有沒有關好。
SLAM下一步更需要的是一個更適合的處理器,首先最好是在On-chip方式上實現(xiàn)Deep Learning,目前有些case能做出來,但是相對來說成本比較高,生態(tài)鏈也不夠完善,需要有更多公司進來把產(chǎn)業(yè)鏈做得更加開放、方便一些。
其實從處理器的角度來說,希望有各種各樣的異構(gòu)處理器,一方面能夠保證算力性能,比如用更高配置的ARM核、DSP核進行算力上的增強,同時也希望有類似MCU的這種Cortex M系列的處理器核,提高它的實時性性能,這樣它才能夠容易地應用在各種各樣的場景中。
在硬件上也需要有更高精度的IMU,提高整個慣性測量的性能。還需要更快的數(shù)據(jù)傳輸和數(shù)據(jù)存儲,SLAM隨著地圖的增大,它的數(shù)據(jù)量是迅速增加的,如果不能夠?qū)⑦@些數(shù)據(jù)通信和存儲的效率提高的話,瓶頸還是比較大,需要各種各樣的行業(yè)協(xié)力才能把SLAM做得更好。
-
傳感器
+關注
關注
2550文章
51035瀏覽量
753063 -
SLAM
+關注
關注
23文章
423瀏覽量
31820
原文標題:視覺SLAM的技術(shù)現(xiàn)狀和應用趨勢
文章出處:【微信號:IV_Technology,微信公眾號:智車科技】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論