0
本文作者: 李詩 | 2017-09-27 17:51 |
雷鋒網(wǎng)按:本文的作者為大朋VR工程師,雷鋒網(wǎng)經(jīng)授權(quán)發(fā)布。
據(jù)雷鋒網(wǎng)了解,空間定位是VR 市場中一個非常關(guān)鍵的技術(shù),當(dāng)今排名前列的VR硬件設(shè)備廠商(HTC/Vive和Oculus)分別采用了不同的空間定位方案。
Oculus 的 Constellation 系統(tǒng)紅外攝像頭定位
HTC/Vive、大朋VR的 燈塔激光定位系統(tǒng)
盡管這兩種定位方式都采用了PnP解算,但都有各自的局限性和適應(yīng)的場景,下文將逐一詳細分析。
Oculus采用的是基于Camera的定位方案,被稱為Constellation。在Oculus頭盔和手柄上都布滿了紅外sensor,以某個固定的模式在閃爍。
通過特制的camera以一個固定的頻率(Oculus CV1是60fps)拍攝,得到一組圖片。系統(tǒng)通過這些點在圖片上的二維位置,以及已知的頭盔或者手柄的三維模型,反推出點在三維空間中的位置。這個過程可以進一步的細分成以下的步驟:
首先,為了確保準確的定位到頭盔和手柄上的LED,PC端的Oculus Camera軟件/驅(qū)動程序通過HID接口發(fā)送某個命令點亮LED,該亮度足以被Camera捕捉到,同時這些LED以某個特殊的模式閃爍。這樣能確保即使有遮擋的情況下,在不同的角度下,只要有足夠多的LED被拍攝到,整個的tracking系統(tǒng)就能正常工作,不會被環(huán)境中的其他噪聲信號所影響。
然后是記錄下每一個被捕捉到的LED的位置和方向。
當(dāng)然,為了做好定位,Oculus camera本身并不需要LED的顏色,只需記錄每個點的明暗,所以 Oculus Camera固件中記錄下的的圖像為 752×480像素, 像素格式為 Y8灰階,每一幅圖看起來如下:
拿到頭盔上的LED在二維圖片上的位置,又有頭盔上Sensor的三維模型,有什么辦法可以估算出這些點的三維位置?這本質(zhì)上是一個Pnp解算的問題 (https://en.wikipedia.org/wiki/Perspective-n-Point):有了n個3D點的模型(就像上面提到的LED點在頭盔上的3D分布), camera拍攝下來的n個2D點的集合,再加上camera本身的內(nèi)部的參數(shù),可以推算出這些點的位置坐標(X,Y,Z) 以及姿態(tài)(Yaw,Pitch,Roll)。
這個點的集合到底有多大?這是一個尋求最優(yōu)解的問題,常見的做法是n>=3,也就是圖片上只要拍到三個以上的LED,就能夠解算出相關(guān)的姿態(tài)和位置。考慮到遮擋或者拍攝的照片不夠清楚等因素,實踐中看,至少要拍攝到4-5個點,整個頭盔的姿態(tài)和位置才能被正確的算出,這也是為什么在Oculus的頭盔上布滿了很多LED點的一個重要原因。
算出來的數(shù)據(jù)有誤差怎么解決?一個常見的辦法是得到6DOF的數(shù)據(jù)之后,用該數(shù)據(jù)再做一次投影,產(chǎn)生新的2D圖像,把該圖像和我們開始用來計算的圖像進行比較,得到一個誤差函數(shù),應(yīng)用該函數(shù)來進行校準。不過這帶來另外一個問題:點進行比較的時候,你怎么知道3d模型上的點,和拍攝到的二維圖像上的點之間的匹配關(guān)系?如果做一一對應(yīng)的全匹配計算的話,計算量太大。所以O(shè)culus采用的辦法是采用不同的閃爍模式,來快速匹配3d模型上的點和拍攝到的圖像上的點。
進一步,在姿態(tài)估計的問題上面,通過光學(xué)(camera圖片)得到的姿態(tài)會有誤差,而這種誤差主要來自于物體快速移動時捕獲到的照片上的點識別的困難。為了減少這種誤差,需要通過IMU信息來進行一步校準通過PnP解算得到的姿態(tài),這就是所謂的Sensor數(shù)據(jù)融合。
從上面的描述可以看出來,基于camera的光學(xué)定位技術(shù),安裝配置比較簡單,成本也比較低,但是圖像處理技術(shù)較為復(fù)雜,物體移動較快時識別物體的位置有比較大的困難,同時容易受到自然光的干擾。
另外,基于Camera的定位精準度受到Camera本身分辨率的限制,比如Oculus Rift的Camera為720p,比較難以提供亞毫米級的精準定位。
最后,Camera自身能夠捕捉到的照片的距離比較近,不能應(yīng)用到很大的房間位置,一般都只能提供桌面級別的VR定位。當(dāng)然最近Oculus提供了三個Camera的方案,試圖在room scale級別和燈塔定位技術(shù)一較高下。
燈塔激光定位技術(shù)
反之,htc,大朋等企業(yè)提供的燈塔激光定位技術(shù),避免了Camera定位技術(shù)的高復(fù)雜度,具有定位精度高,反應(yīng)速度快,可分布式處理等優(yōu)勢,能夠允許用戶在一定的空間內(nèi)進行活動,對使用者來說限制小,能夠適配需要走動起來的游戲,真正實現(xiàn)Room Scale級別的vr定位。
下面從燈塔定位的原理解釋為什么在大空間的應(yīng)用中燈塔激光定位是一個更好的選擇。
HTC的燈塔定位系統(tǒng)中有兩個基站,每個基站上面有兩個馬達,其中一個馬達往水平方向掃射,另外一個朝垂直方向掃射。
基站刷新的頻率是60赫茲,基站a上面的馬達1首先朝水平方向掃射,8.33毫秒之后,第二個馬達朝垂直方向上掃射(第二個8.33毫秒),然后基站a關(guān)閉,接著基站b重復(fù)和基站a一樣的工作......
這樣只要在16ms中,有足夠多的sensor點同時被垂直和水平方向上的光束掃到,這些sensor點相對于基站基準面的角度能夠被計算出來,而被照射到的sensor點在投影平面上的坐標也能夠獲得。同時,靜止時這些點在空間中的坐標是已有的,可以作為參考,這樣就能夠計算出,當(dāng)前被照的點相對于基準點的旋轉(zhuǎn)和平移,進一步的得出這些點的坐標,這其實也是一個PnP問題。
進一步的,再融合IMU上獲得的姿態(tài),就能夠較準確的給出頭盔或者手柄的姿態(tài)和位置。
在上一步中計算出來的頭盔/手柄的位置和姿態(tài)信息,通過RF傳遞到和PC相連的一個接收裝置,該裝置再通過USB接口,把數(shù)據(jù)上傳到PC端的driver或者OpenVR runtime,最后上傳到游戲引擎以及游戲應(yīng)用中。
大朋VR定位方案
相比HTC的定位技術(shù),大朋在激光定位方面做了進一步的創(chuàng)新,在每個基站上面加入了三個馬達,從上到下編號,一號馬達從垂直方向上掃描,2號馬達從水平方向掃描,3號馬達從垂直方向掃描。
每一個馬達掃描的時間間歇是4ms,該馬達在工作的時候,其他馬達都處于關(guān)閉狀態(tài),基本時序如下:
基站上面的馬達1首先發(fā)送同步光信號給頭盔/手柄上的sensor點,sensor點清零計數(shù)器,馬達1接著朝垂直方向掃射;4毫秒之后,第2個馬達朝水平方向上掃射(第二個4毫秒),然后是第3個馬達朝垂直方向上掃射(第3個4毫秒)。
被照射到的sensor點可以比較容易的得到被照射時的時間,以及每一個號馬達開始掃描的時間。馬達的轉(zhuǎn)速是固定的,這樣就可以得到sensor點相對于掃射平面的角度,而該角度編碼后通過RF傳送到PC端,再做進一步的姿態(tài)融合之后,PC端就能容易的拿到6DOF的數(shù)據(jù)。
在指定時間里增加掃描的次數(shù),大大減少所需要的sensor數(shù)量。從實際測試中看,在大朋的最新款的E3P中,最后需要的傳感器數(shù)量大概是Lighthouse的四分之一左右(Lighthouse用了幾十個傳感器),頭盔和手柄所需要的傳感器都是個位數(shù),頭盔手柄都變得更輕便。這不僅大大增加了整個定位系統(tǒng)的穩(wěn)定性,也讓sensor在頭盔或手柄上的布局也更加的簡單。
進一步的,由于每次掃描的時間間隔更短,所以手柄的姿態(tài)等信息能夠以更快的頻率(每4ms一次)傳送到PC端,更及時的更新到VR游戲中。
在玩vr游戲或者應(yīng)用的時候,難免會出現(xiàn)各種各樣的遮擋,為了讓用戶能夠在房間級別的空間中暢玩,必須要讓燈塔在360度各角度方位都能夠照射到頭盔和手柄,大朋vr的解決方案和htc一樣,也是雙基站。雙基站的工作時序和單基站一樣,唯一的區(qū)別是,主基站工作的時候,從基站是關(guān)閉的,反之亦然。
大朋VR激光定位固有的定位穩(wěn)定,需要的sensor點少這些特點,使得該定位方案能夠非常好的應(yīng)用到教育行業(yè)和多人聯(lián)機對戰(zhàn)中。
聯(lián)機多人對戰(zhàn)也是大朋VR定位版擅長的領(lǐng)域。
比如以下的場景中,只需要一到兩個基站可以覆蓋多臺網(wǎng)吧電腦,大大降低成本。
綜上來看,相較于紅外方案,激光定位在大空間多人聯(lián)機的應(yīng)用上具有較明顯的優(yōu)勢。
雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。