永久免费a级在线视频,亚洲v日本,国产精品福利一区二区,午夜免费福利,国产精品网址在线观看,中国一级毛片在线视频,亚洲成人黄

解密Oculus Rift 的VR定位技術(shù)

來(lái)源:網(wǎng)絡(luò)

點(diǎn)擊:1156

A+ A-

所屬頻道:新聞中心

關(guān)鍵詞:Oculus Rift ,VR定位技術(shù),Oculus RiftVR定位技術(shù)

      2016,VR元年,oculus、HTC、索尼等這樣的重量級(jí)廠商紛紛推出或宣布了自己的消費(fèi)級(jí)硬件產(chǎn)品來(lái)?yè)屨枷M(fèi)者市場(chǎng),相信廣大VR愛(ài)好者們中的很多人都已經(jīng)入手了一款虛擬現(xiàn)實(shí)設(shè)備。在這些硬件當(dāng)中,Oculus Rift CV1(以下簡(jiǎn)稱“CV1”)無(wú)疑是最受人矚目的硬件產(chǎn)品之一,畢竟它有2014年拿了Facebook20億美金這樣的大事件撐腰。

      本文作者系G-Wearable軟件工程師。

      眾所周知,Oculus Rift采用的是主動(dòng)式光學(xué)定位技術(shù),那它到底是如何實(shí)現(xiàn)的呢?

      基本實(shí)現(xiàn)流程:

      Oculus Rift設(shè)備上會(huì)隱藏著一些紅外燈(即為標(biāo)記點(diǎn)),這些紅外燈可以向外發(fā)射紅外光,并用紅外攝像機(jī)實(shí)時(shí)拍攝。獲得紅外圖像后,將攝像機(jī)采集到的圖像傳輸?shù)接?jì)算單元中,通過(guò)視覺(jué)算法過(guò)濾掉無(wú)用的信息,從而獲得紅外燈的所在方向,再利用PnP算法,即利用四個(gè)不共面的紅外燈在設(shè)備上的位置信息、四個(gè)點(diǎn)獲得的圖像信息即可最終將設(shè)備納入攝像頭坐標(biāo)系,擬合出設(shè)備的三維模型,并以此來(lái)實(shí)時(shí)監(jiān)控玩家的頭部、手部運(yùn)動(dòng)。

    解密Oculus Rift 的VR定位技術(shù)

      注:具體可看如下圖,注意上面這些紅色的小點(diǎn)點(diǎn)。

      接下來(lái)我將向大家介紹一下我的推理過(guò)程,以及算法的一些細(xì)節(jié)。

      頭顯上的LED燈

      解密Oculus Rift 的定位技術(shù)

    解密Oculus Rift 的VR定位技術(shù)

      前文中我提到我們需要利用四個(gè)不共面的紅外燈在設(shè)備上的位置信息來(lái)進(jìn)行定位,而如果想要知道不同的紅外燈在設(shè)備上的位置信息,就必須能夠區(qū)分不同的紅外燈。

      為什么這么說(shuō)呢,如果不區(qū)分紅外燈,那么當(dāng)DK2(注:特指頭顯)在空間中運(yùn)動(dòng)時(shí),攝像機(jī)捕捉到光點(diǎn)后,要進(jìn)行關(guān)聯(lián)(姿態(tài)最優(yōu)匹配的過(guò)程)的次數(shù) 會(huì)非常大,舉個(gè)列子:

      1) 如果有N預(yù)測(cè)圖像點(diǎn)和M <= N觀察圖像點(diǎn),則有N!/(N-M)!可能的關(guān)聯(lián)

      2) 對(duì)于N = 40和M = 20(對(duì)DK2 LED的數(shù)量),有3.3&times;1029的關(guān)聯(lián),所以就算是計(jì)算機(jī),也無(wú)法快速地得到結(jié)果。

      很顯然,DK2一定是采用了某種先驗(yàn)的方式區(qū)分光點(diǎn)。那么問(wèn)題來(lái)了,DK2到底是如何區(qū)分的呢?

      我曾看到有文章中猜測(cè)說(shuō)DK2是通過(guò)LED燈的亮滅來(lái)區(qū)分的,實(shí)際上卻并非如此。因?yàn)殡m然通過(guò)LED燈的亮滅來(lái)區(qū)分比較簡(jiǎn)單,因?yàn)榱翜缱钊菀讌^(qū)分出來(lái),但是這種方法有個(gè)缺陷,就是無(wú)法區(qū)分是姿態(tài)改變導(dǎo)致的LED燈被遮擋,還是LED燈本身就熄滅了,所以,DK2沒(méi)有使用這個(gè)方法,而是采用LED燈光信息的強(qiáng)弱來(lái)實(shí)現(xiàn)的。我們來(lái)觀察用灰度攝像機(jī)拍攝的圖:

      解密Oculus Rift 的VR定位技術(shù)

      解密Oculus Rift 的VR定位技術(shù)

      對(duì)比上面兩圖,可以發(fā)現(xiàn)亮斑的大小有變化??梢钥闯黾t色部分,在圖2時(shí)光斑更大,藍(lán)色則相反。接下里我們看詳細(xì)的做法。這里必須說(shuō)一下,在推測(cè)具體的做法過(guò)程中,我曾誤以為DK2直接判斷光斑大小,然后根據(jù)多幀圖像的規(guī)律來(lái)判斷LED燈的ID,但實(shí)際上DK2是使用差分法來(lái)判斷光斑大小。我在這里簡(jiǎn)單給大家介紹一下我的推理過(guò)程。

      首先我用自己的攝像機(jī)拍攝了大量照片進(jìn)行觀察后發(fā)現(xiàn)如果把攝像機(jī)用60HZ左右頻率拍攝,圖像每10張就會(huì)開(kāi)始重復(fù)。

      我先給光點(diǎn)編個(gè)號(hào),如下圖:

      解密Oculus Rift 的VR定位技術(shù)

      比如,2號(hào)點(diǎn)的可以用肉眼識(shí)別的強(qiáng)弱順序:弱,弱,強(qiáng),強(qiáng),弱,強(qiáng),弱,弱,弱,強(qiáng)。

      那么是不是這樣呢?如何在DK2中表示這些強(qiáng)弱關(guān)系呢?

      首先,已知SDK的windows的driver會(huì)發(fā)送一個(gè)開(kāi)始信息,讓頭顯開(kāi)始運(yùn)作;

      緊接著,這個(gè)driver就會(huì)不斷接收到下面信息:

      解密Oculus Rift 的VR定位技術(shù)

      X1 X2 X3 X4 是1個(gè)32位數(shù),是圖像分析后得到的空間坐標(biāo)(原理后面給大家解釋),DX則不知道干什么用,但是觀察上面的num,換算出來(lái)是40,index從1開(kāi)始,不斷遞增到40,說(shuō)明DK2在一個(gè)一個(gè)的識(shí)別LED燈,另外,這些信息每17ms左右發(fā)上來(lái)一次,和60HZ的拍攝頻率差不多,基本上可以認(rèn)定是利用每10幀確定一個(gè)LED的方式。

      為了完全確定這一點(diǎn),還必須確定另一個(gè)問(wèn)題:同步。

      如果真的是LED通過(guò)10幀不同的變化來(lái)讓攝像機(jī)確定LED燈的ID,那么必須要同步。

      這要求一個(gè)同步信號(hào)能同時(shí)傳給攝像機(jī)和頭顯,如果能了解同步的時(shí)機(jī),就知道到底是不是60HZ的頻率了。

      可是當(dāng)我看了MT9V034的資料后發(fā)現(xiàn)居然拍攝的頻率是30HZ左右,不過(guò)細(xì)想一下,如果使用差分檢測(cè)發(fā),使用30HZ這個(gè)頻率也能拍攝出光強(qiáng)的變化。也就是說(shuō),DK2根本不是直接判斷光斑是大還是小,而是將當(dāng)前幀的光斑與上一幀同一個(gè)光斑做對(duì)比,如果比之前大,則為大,反之則為小。那么當(dāng)一個(gè)新的幀到達(dá)時(shí),該算法首先提取幀的亮像素斑點(diǎn),如下圖。忽略少于10個(gè)像素或不是圓盤狀的,最后確保所有的斑點(diǎn)來(lái)自前一幀中提取的大圓盤狀斑點(diǎn),然后進(jìn)行對(duì)比。

      解密Oculus Rift 的VR定位技術(shù)

      所以,DK2將當(dāng)前幀的光斑與上一幀同一個(gè)光斑做對(duì)比,然后根據(jù)10幀不同的變化來(lái)讓攝像機(jī)確定LED燈的ID。

      我在進(jìn)一步查看這些點(diǎn)和位置信息的對(duì)應(yīng)關(guān)系后,總結(jié)出DK2判斷強(qiáng)弱變化的依據(jù)是:

      1) 如果當(dāng)前幀的斑點(diǎn)比上一幀斑點(diǎn)大10%,就是0;

      2) 如果當(dāng)前幀的斑點(diǎn)比上一幀斑點(diǎn)小10%,就是1;

      3) 否則忽略。

      這樣的設(shè)計(jì)非常好,防止了LED燈受到隨機(jī)干擾。

      不過(guò)在實(shí)際驗(yàn)證中,發(fā)現(xiàn)如果這樣提取圖像,在頭顯運(yùn)動(dòng)時(shí),還是會(huì)有錯(cuò)誤出現(xiàn)(比如漏拍了幾幀), 那么它是如何判別的呢?這個(gè)花了我不少時(shí)間去想,最后發(fā)現(xiàn)這和漢明距離有關(guān)系。

      所謂漢明距離,簡(jiǎn)單地說(shuō):如果數(shù)字是相同的,它們的漢明距離為0,如果他們?cè)趩我坏谋忍夭煌?,它們的距離為1,如果10比特它們彼此逐位否定,它們的漢明距離是10。我發(fā)現(xiàn),DK2已經(jīng)默認(rèn)每個(gè)拍攝后的圖像(提取40個(gè)LED燈表示的比特位)和前一幀最多的漢明距離是 3,如果大于這個(gè)數(shù)字,則認(rèn)為是錯(cuò)誤幀。

      最后,給出幾個(gè)比較有特點(diǎn)的LED的10幀圖,大家可以看一下:

      解密Oculus Rift 的VR定位技術(shù)

      感知姿態(tài)

      前面談了如何探測(cè)LED燈,我介紹了DK2的攝像機(jī)通過(guò)視頻流捕獲LED燈獨(dú)特的閃爍模式,拼出10位二進(jìn)制數(shù)來(lái)識(shí)別ID。

      現(xiàn)在來(lái)談如何感知姿態(tài),你可能會(huì)很自然地想到,通過(guò)每10幀來(lái)識(shí)別LED,然后利用已知LED的位置來(lái)判斷姿態(tài)。說(shuō)實(shí)話,這個(gè)方法也可以,但是這就表示要間隔10個(gè)幀才能識(shí)別一次姿態(tài),萬(wàn)一動(dòng)作快一點(diǎn),就出現(xiàn)麻煩了。

      當(dāng)然,要估計(jì)一個(gè)三維模型的姿態(tài),需要足夠的LED的信息,如果拍攝到的LED點(diǎn)不夠,就必須使用DK2中的IMU來(lái)進(jìn)行姿態(tài)的感知。另外,IMU本身也會(huì)累計(jì)誤差。

      DK2的算法其實(shí)是這樣的:

      1) 初始狀態(tài),先讀取靜止?fàn)顟B(tài)的頭顯,10幀的時(shí)間,識(shí)別每個(gè)LED的ID號(hào);

      2) 不斷地拍攝,利用前面幀的信息,推測(cè)出現(xiàn)在的LED燈的位置;

      3) 如果出現(xiàn)錯(cuò)誤,就重新通過(guò)10幀的時(shí)間識(shí)別LED;

      4) 如果有足夠的LED燈信息,就使用識(shí)別算法;

      5) 如果沒(méi)有足夠的LED燈的信息,就使用IMU識(shí)別姿態(tài);

      解密Oculus Rift 的VR定位技術(shù)

      解密Oculus Rift 的VR定位技術(shù)

      解密Oculus Rift 的VR定位技術(shù)

      三維姿態(tài)估計(jì)或已知物體相對(duì)于2D照相機(jī)的角度,求出該物體在相機(jī)坐標(biāo)系的坐標(biāo)值,稱為PNP問(wèn)題。在Oculus Rift中,感知頭顯的姿態(tài)是利用PnP算法,融合IMU實(shí)現(xiàn)的。Oculus Rift沒(méi)有單純的采用IMU進(jìn)行姿態(tài)解算是因?yàn)镮MU本身會(huì)產(chǎn)生漂移,無(wú)法在長(zhǎng)時(shí)間內(nèi)跟蹤對(duì)象的絕對(duì)位置,因此必須外接3D參照系,PnP正可以提供這樣一個(gè)參照系。說(shuō)白了,就是要利用PnP來(lái)糾正IMU,最后融合成一組比較合理的姿態(tài)信息。

      那么,什么是PnP算法?

      3D姿態(tài)估計(jì)是一個(gè)多維非線性優(yōu)化問(wèn)題,攝像機(jī)拍攝圖像中的一組2D點(diǎn),例如提取的LED斑點(diǎn)的集合,可以嘗試重建相對(duì)于相機(jī)的坐標(biāo)模型的未知位置(X,Y,Z)和方向(偏航,俯仰,滾動(dòng))。

      解密Oculus Rift 的VR定位技術(shù)

      說(shuō)詳細(xì)一點(diǎn),在相機(jī)內(nèi)參數(shù)巳知的情況,由特征點(diǎn)與其像點(diǎn)的對(duì)應(yīng)關(guān)系求解目標(biāo)相對(duì)于相機(jī)的位姿,就是經(jīng)典的PnP 問(wèn)題,這些算法大致可分為迭代算法和非迭代算法兩類。

      非迭代算法采用代數(shù)方法直接求出相對(duì)位姿,針對(duì)P3P 、P4P等問(wèn)題推導(dǎo)出多種解析算法,該類算法具有運(yùn)算量小、計(jì)算速度快等優(yōu)點(diǎn),但受誤差影響大且精度不高。Lepetit 提出的一種計(jì)算量為O(n)的PnP問(wèn)題非迭代算法,只需要4個(gè)點(diǎn)的信息就可以求解目標(biāo)相對(duì)于相機(jī)的姿態(tài)信息, Oculus Rift正是利用這種算法實(shí)現(xiàn)的。

      最后再向大家總結(jié)說(shuō)明一下感知姿態(tài)的基本步驟:

      1、發(fā)出同步信號(hào),等待LED燈亮起后,提取收到的8位灰度視頻幀明亮的斑點(diǎn)。

      2、創(chuàng)造一種斑點(diǎn)顏色為亮綠色的8位RGB輸出視頻幀(用于調(diào)試/可視化的目的)。

      3、匹配大致圓盤形的斑點(diǎn),并與來(lái)自先前幀中的斑點(diǎn)進(jìn)行比較,比較它們的尺寸差異到差分位解碼器中,累積其10位ID和LED關(guān)聯(lián)。排序所有提取或投射二維LED的位置到一個(gè)kd樹(shù),用在下一幀中快速匹配。

      4、如果有四個(gè)或更多的識(shí)別斑點(diǎn)且沒(méi)有當(dāng)前姿勢(shì)估計(jì),運(yùn)行從頭計(jì)算姿態(tài)估計(jì)方法。

      5、如果有四個(gè)或多個(gè)識(shí)別的斑點(diǎn),且已經(jīng)識(shí)別了先前幀的姿態(tài),采用迭代姿態(tài)估計(jì)方法。

      6、用姿態(tài)信息糾正IMU的漂移,并融合IMU的姿態(tài)信息。

      以上介紹了Oculus Rift的實(shí)現(xiàn)過(guò)程。

      Oculus Rift的主動(dòng)式紅外光學(xué)+IMU定位系統(tǒng)精度較高,抗遮擋性強(qiáng)。

      由于其所用的攝像機(jī)具備很高的拍攝速率,并且該類系統(tǒng)總是能夠得到標(biāo)記點(diǎn)在當(dāng)前空間的絕對(duì)位置坐標(biāo),所以不存在累積誤差。但是由于攝像頭視角有限,因此該產(chǎn)品的可用范圍有限,會(huì)在很大程度上限制使用者的適用范圍,因而無(wú)法使用Oculus Rift來(lái)玩需要走動(dòng)等大范圍活動(dòng)的虛擬現(xiàn)實(shí)游戲。也因此,雖然Oculus Rift可以支持多個(gè)目標(biāo)物同時(shí)定位,但是目標(biāo)物不可過(guò)多,一般不超過(guò)兩個(gè)。

    (審核編輯: 滄海一土)

    聲明:除特別說(shuō)明之外,新聞內(nèi)容及圖片均來(lái)自網(wǎng)絡(luò)及各大主流媒體。版權(quán)歸原作者所有。如認(rèn)為內(nèi)容侵權(quán),請(qǐng)聯(lián)系我們刪除。