在今年的Oculus Connect大會上,扎克伯格公布了一款正在開發(fā)的VR一體機產(chǎn)品——Santa Cruz。細看報道你會發(fā)現(xiàn),這款產(chǎn)品除了將計算單元都集成到頭盔中,還在前面增加了4顆攝像頭。這些攝像頭的作用,其實是用來實現(xiàn)空間定位的,在Oculus Rift CV1上,空間定位系統(tǒng)需要通過一套外部傳感器來實現(xiàn),這顯然不適合移動方案。
許多人都說VR一體機是未來,而移動VR要真正移動起來,就需要擺脫外部空間定位基站的束縛。那么如何用另一種方案來擺脫有線VR通常使用的Outside-in空間定位方案呢?那就是Inside-out空間定位技術(shù),此類方案大都基于計算機視覺技術(shù),包括微軟、Google和Facebook在內(nèi)的科技巨頭都在進行相關(guān)研究。
所謂的Inside-out追蹤到底是如何做的呢?它使用了哪些技術(shù),又有什么難點,本期公開課將為您解答這些疑問。
嘉賓介紹
馬賡宇,清華大學計算機系本科,碩士,以及博士。馬博士于2015年9月加入uSens凌感科技,現(xiàn)任凌感科技技術(shù)副總裁和中國研發(fā)中心主任。
在清華,馬博士在人工智能 與媒體集成實驗室主攻人機交互和人工智能。馬博士曾任三星中國研究院(SAIT China)首席研究員與研發(fā)主任,是三維顯示與人機交互技術(shù)以及虛擬現(xiàn)實技術(shù)的專家,為Timothy Sauer所著教科書《Numerical Analysis》的譯者。
以下內(nèi)容整理自馬賡宇博士本次公開課演講,您將看到以下內(nèi)容:
大家好,本次講座的主題是基于視覺+慣性傳感器的空間定位方法,前半部分是基于視覺的定位方法,以前和學校及研究機構(gòu)做得比較多。后半部分介紹慣性傳感器在定位中的應用。慣性傳感器是最近幾年才興起的,主要是因為手機傳感器(這方面主要是iPhone)的發(fā)展,傳感器的精度也在逐年提高。
手機里面的陀螺儀現(xiàn)在基本可以達到0.01度的誤差,加速度計雖然誤差稍微大一點,如果用來估計針尖運動也可以起到很大的輔助作用。
空間定位方法簡介
這里列舉了一些空間技術(shù)應用場景。據(jù)我了解空間定位是從軍事上開始應用的,主要是導彈的定位,可以在沒有GPS導航的情況下,根據(jù)自身的IMU和加速度計達到在幾千公里外只差幾百米的誤差。然后像室外的自動駕駛、無人機,室內(nèi)的機器人、吸塵器等都是需要SLAM技術(shù)的。
SLAM(simultaneous localization and mapping)就是同時進行場景的建模和相機自身位置的定位,它的用途就是估計一些設(shè)備在場景中的位置和相對運動軌跡。
在VR的場景里呢,因為需要模擬出頭部運動后一些虛擬物體在場景中的位置,所以要實時得到頭相對于世界的位置。圖示中的頭部位置有六個參數(shù),三個表示旋轉(zhuǎn)三個表示位置一共六個自由度。旁邊有手和控制器,意思是在VR的應用里除了要知道這個設(shè)備相對于世界的位置還要知道手相對于設(shè)備、以及控制器相對于頭盔或世界的位置。
然后我們在實驗過程中發(fā)現(xiàn),VR環(huán)境和其他一些應用環(huán)境相比,對SLAM的性能要求有些不同。在VR環(huán)境下對用戶影響比較大的幾個指標是:
延時,也就是說頭運動之后一般二十毫秒之內(nèi)就能把運動反饋到渲染部分;
相對位置精度,很小的運動都能識別;
穩(wěn)定性,如果頭不動,識別出來的結(jié)果不能左右抖動。
相對不太重要的指標,一是loop closing,比如說我在院子里走了一圈,回到起始位置時它識別的結(jié)果是否和剛才的起始位置重合。戴上VR頭盔以后看不到世界場景,有可能一米的誤差也感覺不到。二是絕對誤差,戴上頭盔以后頭部轉(zhuǎn)了100度,識別出來90度,實際用戶也體驗不到差別;那么第三個絕對位置也就好理解了。
下面介紹幾種方向傳感器,也就是陀螺儀的原理。
機械陀螺儀
可能我們最了解的是以前上物理課見過的機械陀螺儀。機械陀螺儀里面有一個轉(zhuǎn)子,由于能量守恒的原因,整個設(shè)備高速旋轉(zhuǎn),而轉(zhuǎn)子的方向是不變的,通過這種原理確定這個設(shè)備的方向。這種設(shè)備可能早期在航海里應用,但現(xiàn)在應該基本不用了。
激光陀螺儀
中間是現(xiàn)代高精度的激光陀螺儀,在軍事上和一些高精度應用上使用。圖中中間是激光發(fā)射模塊,往兩個方向發(fā)射激光,左上角的傳感器會計算兩束光路距離的差。當設(shè)備靜止時,兩邊的光線長度一樣;當設(shè)備旋轉(zhuǎn)時,兩邊的光路長度會不一樣,通過距離差來計算旋轉(zhuǎn)速度。激光陀螺儀是很難小型化的。
MEMs陀螺儀
手機常用的是基于微機械結(jié)構(gòu)的MEMs陀螺儀,它可以做到很小。兩個黃色區(qū)域中間通過一個軸固定,利用科里奧利力——旋轉(zhuǎn)物體在有徑向運動時所受到的切向力,來計算出角速度。
圖中是一個加速度計的示意圖。基于彈簧的原理,一個重物兩邊有彈簧固定,如果有加速度,重物在彈簧上的位置就會改變,位置的改變用電信號輸出就是它的加速度。對比之下,陀螺儀識別出來的是角速度的值,因為物體在旋轉(zhuǎn)時會產(chǎn)生離心力,陀螺儀就是把離心力的大小輸出出來了。本質(zhì)上陀螺儀和加速度計識別的都是受力,等價于加速度。
這類磁場傳感器是基于磁場的。比如說手機里的數(shù)字羅盤就是可以感應出地球磁場的方向。另外一種Razer Hydra遙控器,中間的球會產(chǎn)生一個強磁場,手柄上有一個傳感器可以識別出磁場的強度和方向,以此來進行手柄位置的定位。
總結(jié)以上三種常見的傳感器的優(yōu)缺點,陀螺儀精度很高,手機上的采樣率可達到100hz,一些先進的頭盔可達到1khz的采樣率。加速度計的精度比較低,從芯片的參數(shù)表來看,誤差達到0.1米每秒方的加速度。如果用加速度進行積分,經(jīng)過1秒鐘的累計誤差會到0.05m,誤差較大。
Outside-in定位
介紹一些基于Outside-in定位的一些VR頭盔設(shè)備,比如流行的Oculus、HTC VIVE、PSVR。主要講講HTC VIVE Lighthouse的工作原理。因為我們覺得他是性能最好的定位算法,而且設(shè)計很有意思,如果把它理解成一個圖像的話,可以達到很高的分辨率。
發(fā)射器有兩排燈,起始時會全部照亮以示初始時間,分別有豎直和水平的兩束光線旋轉(zhuǎn)掃描,頭盔上的記錄器會記錄光線掃到的時刻。如果把時刻轉(zhuǎn)換成圖像坐標,那么簡單理解就是每次掃描可以得到一張圖像,圖像記錄的是每個紅外感應點在圖像上的XY坐標。這樣有個好處就是如果時間很精確,圖像的分辨率會很高。
現(xiàn)在的數(shù)碼相機分辨率是有限制的,一般做SLAM的達到1080p就很高了。另外,每個LED的ID 都是已知的,不需要在圖像上進行匹配或跟蹤,就可以知道自己的圖像坐標。
Inside-out定位
微軟的Hololens基于四個魚眼相機來進行slam定位,不需要在場景里設(shè)置傳感器。高通發(fā)布VR820一體機頭盔的參考設(shè)計,前面有兩個攝像頭,使用高通芯片的DSP來進行處理,也能達到inside-out的效果。我們公司出的Power Fingo也是通過兩個紅外攝像頭進行跟蹤,里面有自帶的高通820來進行計算,也是Inside-Out的SLAM硬件。
上圖是三種跟蹤算法的比較
上圖是比較誤差對Outside-In 和Outside-Out的影響。Outside-In的方法是假設(shè)傳感器是在外面的,認為外面有個攝像頭,頭盔上的Marker點在攝像頭的成像算出二維或三維的位置,設(shè)備角度通過IMU來得到。如果角度有誤差,位置是不會影響的。因為這些點的位置不變,如果角度變化最多識別出紅框的結(jié)果,至少位置上是相對穩(wěn)定變化不大的。
Inside-Out的方法是頭盔上有攝像頭來識別外部的點,假設(shè)外部點離設(shè)備一米遠,如果識別出的角度差了1度,位置可能就會差幾厘米。如果大家仔細體驗Hololens就會發(fā)現(xiàn),在湊近虛擬物體時,距離頭盔一分米內(nèi)的物體就會慢慢變黑不顯示。因為它識別出的頭盔位置的誤差會有一些抖動,比如一米遠的物體有稍微抖動,成像時顯示出來可能就很小,如果物體就在眼前,顯示出的抖動會很大,所以Hololens采用取折中方法,近處的物體不顯示,以此減小SLAM誤差的影響。這也說明Inside-out的方法對精度的要求會更高。
視覺和IMU融合的SLAM算法
下面介紹視覺和IMU融合的SLAM算法,包括有什么改進可以提高SLAM精度。先來看一些Demo。
第一個Demo是融合IMU數(shù)據(jù)和基于單個普通相機的PTAM算法。在筆記本的屏幕上可以看到桌面上有四個眼睛是虛擬的物體,整個場景是以AR的方式來顯示場景,眼睛的位置和真實場景綁定。如果SLAM的效果好,那么當相機運動的時候,這4個眼睛的位置依然綁定在真實場景的物體上不會變。 在這個Demo中大家可以看到,頭盔的運動(旋轉(zhuǎn))速度很快,這是在模擬真實的VR環(huán)境,人戴著頭盔時一秒鐘可以運動180度,有很快角速度。原始的PTAM算法在這種情況下會跟蹤失敗。 而這個Demo毫無問題,因為融合了IMU才能達到這么穩(wěn)定的跟蹤。
第二個Demo是在手機上運行的基于Mark點的SLAM算法,桌面上有4個紅外反射點。這個初音跳舞的Demo,可以通過移動手機(通過頭盔也可以)在不同的位置來看,這個就是和Gear VR最大的區(qū)別, Gear VR只能識別旋轉(zhuǎn),而前面運動場景是不會變的。
第三個Demo是Marker點SLAM算法的測試程序,手機在Mark前晃動,這個程序顯示的紅線是相機的運動軌跡,我們也模擬VR環(huán)境下頭的快速運動,即使以很快的速度晃手機,也可以跟蹤到很好的軌跡,不會丟失。
這些算法與網(wǎng)上一些SLAM定位算法或者基于手機的AR算法的最大區(qū)別就是,在快速運動或快速旋轉(zhuǎn)時也都可以很好的跟蹤到。在VR環(huán)境下必須保證SLAM永遠是對的,必須保證即使多快的運動都不能丟失。否則如果丟失了再找回來,用戶看到的就是場景跳了一下又回來了,體驗是很差的。
基于視覺的3D立體幾何的基本原理
這一頁介紹一下基于視覺的3D立體幾何的基本原理,需要了解的兩個基礎(chǔ)知識,一個是3D坐標變換,一個是針孔相機模型。左邊是成像的基本原理,相機兩個關(guān)鍵幀,一幀在c1位置,一幀在c2位置,同時觀測到一個三維空間點,就是前面藍色的點,這個點和相機光心的連線,這條連線和成像平面的交點,就是這個點在圖像上的坐標,這就是基本的針孔相機模型。
因為這個3D點的位置在空間中是不變的,所以這兩個相機的方向和位置以及3D點的位置就滿足一個方程,簡單說就是這兩條射線要相交。
右邊是對應的一個投影方程,XYZ就是3D點的空間坐標,T是相機的光心,XYZ減T再乘以R就是3D點在圖像坐標系下的坐標。左邊的矩陣一般叫K矩陣,F(xiàn)是相機的焦距,cx、cy是相機的光心,K乘以相機坐標系下的坐標就等價于得到了這個點的圖像坐標。
這一頁是方程的具體應用:
第一個應用是相機定位,就是在這個方程里已知3D點位置和投影點的圖像坐標,求相機的位置和方向R,T;
第二個應用是已知好幾個R和T,就是已知好幾幀圖像,以及這個圖像3D點的投影位置,要求3D點的世界坐標,實際上就是剛剛那一頁左圖里邊,已經(jīng)兩條射線的方向,要求它們的交點;
第三個應用是最復雜的,SLAM中Localization是相機定位,mapping求解3D坐標,這個公式里邊如果相機位置和3D坐標都不知道的話,就需要多幀圖像,只知道u、v,x、y、z都不知道的話,需要很多個這樣的方程進行方程組求解,也是可以解出來這些未知數(shù)的。
還有一些進階的技術(shù)知識,簡單列舉一下。第一是四元素,之所以用四元素表示旋轉(zhuǎn),是因為如果用歐拉角表示旋轉(zhuǎn),無法保證表達的連續(xù)性。還要了解各種非線性方程組求解的算法。雖然現(xiàn)在有些工具包是解SLAM問題的,但基本上都沒有融合IMU,或者說融合方法千差萬別。在VR需求下要求低延遲、相對位置準,對絕對值要求不高,方程都是需要改變的,對于改變的方程要求解的話就需要了解各種非線性議程組的求解方法,下面列了這些,常用的是最后這種。
Visual SLAM 算法
介紹一下Visual SLAM 算法,一些論文里邊只用了視覺的方法(單目相機)進行SLAM,包含Localization和Mapping,這兩塊已經(jīng)介紹了。Visual+IMU的融合,主要改進是在Localization的模塊,Mapping是建立三維點坐標的過程,這是用不到IMU的,只是在Localization上要精確估計出相機的位置,才需要IMU的融合。
純Visual SLAM的方法,主要是在場景中提取特征點,進行特征點匹配,但這種方法在室內(nèi)場景,尤其是特征點比較少,主要特征都是線和邊緣的場景,很容易跟蹤失敗。
最近幾年有一些Direct Method,不是通過特征點匹配而是直接通過圖像像素顏色匹配來優(yōu)化相機位置,代表的一些論文算法包括LSD-SLAM和DSO-SLAM,下面有兩個YouTube 視頻供參考。
他們的效果是基于純視覺算法中最好的了,但是像剛剛那邊快速頭盔旋轉(zhuǎn),他們的Demo如果出現(xiàn)這種情況肯定會丟失。
這頁是DSO算法的簡單介紹,在圖像management上要保留7個關(guān)鍵幀,新來的每幀圖像會和最近的幀的特征進行比較,優(yōu)化新圖像的姿態(tài)(Localization)。到了一定范圍之后就要添加新的關(guān)鍵幀,把所有關(guān)鍵幀一起優(yōu)化(Mapping),來更新3D點的位置。右邊是運行示意圖,上邊那些黑色的點是歷史建出來的3D點的點云。
紅色的一條線,是相機運動軌跡,藍色的小框是選擇的那些關(guān)鍵幀,下面這些圖,上面右下角是最近的關(guān)鍵,后面是歷史上的一些關(guān)鍵。在現(xiàn)在的場景,如何最遠的那個關(guān)鍵關(guān)鍵幀中那些點太少,就會去掉,生成一個新的關(guān)鍵幀。
Vision+IMU融合
Vision+IMU融合的產(chǎn)品包括HoloLens、Tango和高通的一體機。它的好處包括:
通過IMU可以減小圖像匹配的搜索范圍,在VR環(huán)境下頭快速旋轉(zhuǎn)時可以達到每秒180度的速度,如果沒有IMU的話,相鄰圖像里邊搜索的范圍可能會很大,比如當前這個點在圖像的最左邊,下一幀可能就移動到圖像最右邊了;
可以在很少或沒有特征點時繼續(xù)跟蹤;Tango一個比較好的性能就是,在沒有特征點,比如掃過一面白墻時,也能夠基本正確地跟蹤一兩秒的時間。
可以在圖像幀間預測位置,因為攝像頭的采集速率一般比較低,可能每秒30、60幀,最快有300幀(Intel ,而IMU可以達到每秒1000幀或者更高,如果把IMU加到圖像幀間預測,那么SLAM就可以以每秒1000幀的速率輸出位置,而不是只在有圖像的時間輸出位置。高通的VR820就可以以800Hz的速度輸出頭部運動的結(jié)果。
手機里邊有很多傳感器,陀螺儀可以輸出采樣時的角速度,加速度計可以輸出這個時刻的加速度。還有磁場傳感器,GPS。有些手機里自帶的融合算法,將磁場、陀螺儀和加速度計整合到一起輸出一個方向,它輸出的方向看上去誤差很小。
IMU的速度很快,1000Hz,但是相機的速度很慢,需要有一個解決方法。
從Gear VR開始提出ATW這個概念后,現(xiàn)在大部分頭盔都實現(xiàn)了這個功能。簡單介紹一下,用戶看到圖像的時間,是經(jīng)過了好幾個處理,從圖像采集加上圖像處理加上渲染引擎渲染的時間,才是用戶最終看到的時間。
所以SLAM需要輸出的,不單是有圖像時刻相機的R和P,還有圖像之后通過IMU積分的,當前最新時刻的R和P,以及在當前時刻往后預測的渲染結(jié)束時刻的R和P,最后輸出的預測R和P才是渲染引擎需要知道的相機位置和方向。
SLAM對硬件的要求是很高的,上面列舉了一些。對攝像頭的要求是全局快門,手機里是卷簾快門,它的圖像掃描每一行曝光是不同的,手機快速運動時圖像會變形,這種處理起來會增加很多難度,雖然很多paper也處理這種問題,但現(xiàn)有的所有SLAM算法并不考慮卷簾快門的影響。
相機需要固定的焦距、光圈,焦距固定可以通過預先的標定來標定相機的焦距和畸變;光圈的固定可以讓相機在運動過程中場景的亮度不會變化,方便特征點的匹配和跟蹤。
相機需要大的視角,比如魚眼或全景,視角越大跟蹤的效果越穩(wěn)定。還有相機的快門速度足夠高,這樣在相機高速運動和旋轉(zhuǎn)時圖像不會產(chǎn)生運動模糊。相機的幀率要足夠高,這樣相對幀的圖像差距比較小,方便跟蹤。
傳感器的要求,外置高性能IMU會比手機自帶的精度要高。加速度計的精度需要過一兩年能發(fā)明出更好的加速度計對SLAM性能的改進也會有很大提高。
這頁是列了一些uSens的產(chǎn)品,右上角是雙目的彩色攝像機,Color Fingo,可以進行RGB SLAM,以及AR see through顯示。左下角是Fingo紅外相機,可以識別手識,以及進行基于紅外Marker的SLAM跟蹤。右下角是Power Fingo,集合了兩個RGB和兩個紅外攝像頭,同時內(nèi)置有820處理器,可以機器內(nèi)部進行手勢識別和SLAM跟蹤。
我們做的Markerless SLAM相比現(xiàn)有SLAM算法有多種改進,在預測和優(yōu)化階段都結(jié)合了IMU的信息。
Markerless的算法計算量比較大,在手機上跑不到實時快速運動跟蹤效果,所以出于實用的目的,uSens也開發(fā)了基于Marker點的SLAM算法。下面兩個圖,左圖是桌面級別的SLAM,需要在桌面放四個Marker反射點。右圖是房間級別的SLAM,每面墻放6、7個,房頂6、7個,大概一個房間需要30個Marker點,這些Marker點的坐標都可以事先通過離線方法計算出來,Marker點的ID通過點之間的位置來確定,這種基于Marker的算法可以直接在手機上實時跑起來,戰(zhàn)資源比較小,在手機上每幀圖像是5ms之下的處理時間。
Q&A環(huán)節(jié)
Q:Markerless SLAM定位怎么樣可以做到低延遲、高精度,擼棒性也很好呢?
A:Markerless SLAM是在三個階段都整合了IMU信息,第一個階段是已知當前幀相機的位置,通過IMU信息來預測相機的位置,可以預測到3D的空間點在下一幀圖像的位置,這樣就可以提高特征點跟蹤的穩(wěn)定性。
然后是在沒有圖像時候,通過IMU來預測相機的位置,輸出給渲染模塊。
還有是在優(yōu)化相機位置時,不光考慮圖像特征點的投影坐標,也考慮幀間和加速度計的信息來進行統(tǒng)一優(yōu)化,就是那一頁講得最復雜的議程。
Q:為什么HoloLens的定位可以做得這么好?
A:HoloLens的SLAM做得很好,它的SLAM過程中是沒有用深度相機的,完全依靠左右兩側(cè)的4個魚眼相機,深度相機只在場景建模時候用,它跟我們的思路一樣,分兩個階段,一是把場景里3D點的位置確定出來,后面的跟蹤就只用特征點的圖像坐標和IMU來處理。
它的IMU精度還不確定,我們做過實驗,比如在電梯里戴HoloLens,電梯一啟動一停時,場景整個就飛到上面飛到下面,它首先是相信IMU的數(shù)據(jù),其次才是相信圖像的數(shù)據(jù)。
它里面有一個專門處理器HPU,專門處理特征點的識別匹配問題,這樣就可以達到實時的效果了。最后,他們的位置跟蹤誤差其實挺大的,如果你湊近看一個物體可以發(fā)現(xiàn)抖動挺大,再近一點就直接不顯示了。
來源:雷鋒網(wǎng)
投稿/爆料:tougao@youxituoluo.com
稿件/商務(wù)合作: 六六(微信 13138755620)
加入行業(yè)交流群:六六(微信 13138755620)