挑戰最便宜全身追蹤!Driver4VR+Kinect實戰

全身追蹤,顧名思義就是在使用VR時可以追蹤到全身的動作,而非只有頭部和手柄。

一般的實現方式是購買HTC的全身追蹤感測器,一套下來超過兩千塊,可以說是很貴了。而且這一套只有搭配HTC Vive系列的VR才是最適合的,其他的VR玩家可能需要hack一下。

為了省錢以及好玩,歐洲某有閑程序員團體製作了Driver4VR,可以使用Kinect或Nolo來進行全身追蹤。其中Kinect 360的方案最為便宜,我也使用了一下,踩了一些坑。我並沒有找到相關中文教程,而且折騰的過程本身也是頗有趣的,因此在此記錄一下。

Driver4VR有多種追蹤方式,某些方式甚至不用使用VR設備,我這裡只記錄我已經嘗試過的。以下前提都是有Driver4VR這款SteamVR驅動本身:

Driver4VR官網?

www.driver4vr.com

追蹤方式包括鏈接VR設備、使用Kinect自帶的骨骼追蹤、使用光球追蹤(類似於PSVR的光球追蹤)等,可以多種追蹤互相搭配。我自己的VR設備是使用了Oculus Rift CV1,所以以下實驗都是在此基礎上加入對腰、腳的追蹤。

以下部分在Youtube上有官方視頻教程,在Driver4VR下載頁面有前往這些教程的鏈接。英語過關的朋友可以直接看官方視頻教程:

Download?

www.driver4vr.com圖標


Driver4VR+Kinect 360 + Skeleton Tracking

成本:Driver4VR->19.9歐元, 二手Kinect 360->15新加坡元,Kinect 360 USB 轉接線->18新加坡元。共計摺合人民幣約161.5+165.5 = 327人民幣。

效果:Kinect 360延遲較高,約為70ms,在VRChat中踢人時明顯感覺腿部是在慢動作。Kinect 360無法識別坐姿,所以在用Kinect 360骨骼追蹤時,坐在椅子上就會丟失定位。且Kinect的識別演算法有限,有時會把周圍物體也識別為人。Kinect 360的識別要求人離Kinect的距離較遠(我實測2米以上效果才比較正常),對於房間小的用戶來說使用Kinect for Windows(識別距離要求較近)更好。但是不管怎麼說,不用在身上綁任何感測器,就可以在VRChat里踹人了,還是可以有的。

綜合評價:價格最低,效果也最差,但是還算可以用。

實現步驟:

第一步: 安裝Kinect所需的驅動以及Kinect Developer Toolkit。安裝完之後可以打開Kinect Tookit Browser(在Tookit安裝的文件夾里可以找到),試一試Skeleton Basics Application,看看能否追蹤骨骼成功。

* Kinect 360 –microsoft.com/en-us/dow

* Kinect One –microsoft.com/en-us/dow

第二步:安裝Driver4VR。(免費版每周只有30分鐘試用時間,Gold版(19.9歐元)不限制試用)安裝之後打開Driver4VR就會一併開啟SteamVR,打開SteamVR也會開啟Driver4VR,但是在你點擊Driver4VR窗口中的「Start Driver4VR」按鈕之前,SteamVR不會識別為你使用了全身追蹤,這樣不想使用Driver4VR時不點擊「Start Driver4VR」就可以了。

第三步:校準(Calibration)

在Driver4VR的Tracking欄中,找到Body Tracking(身體追蹤),選擇「Kinect:Skeleton」(Kinect:骨骼追蹤),這樣你的身體追蹤方式就被設定為Kinect骨骼追蹤了。

然後點擊「Start Driver4VR」按鈕,在Body Tracking右邊的「Calibrate」(校準)和「Calibrate NEW」(新的校準方式)按鈕就都可以點擊了。

兩種校準方式都要去戴著VR頭盔。

「Calibrate」是對應舊的校準方式:

在彈出的Calibrate窗口中點擊「Calibrate」,校準就開始了,這時你應該戴上頭盔。

舊的校準一共五次採樣,前三個是分別在Kinect前三個位置保持站姿,並頭朝Kinect方向。後兩個是在Kinect前保持彎腰半蹲,並頭朝Kinect方向。每次採樣都需要Kinect能識別你的骨骼,且你的VR頭顯有被追蹤到,採樣成功時會聽到鼓掌聲,採樣失敗會聽到噓聲。

「Calibrate NEW」是新的校準方式:

在彈出的Calibrate窗口,點擊Calibrate,校準就開始了。這時你應該戴上頭盔,保持站姿,直視Kinect的方向,手和手上的VR手柄放在身體兩側,且手稍微展開一點。

新的採樣方式只需要兩次,第二次只需要往前或往後移動即可。

校準之後,你在SteamVR的空間里應該可以看到腰部、腳部的虛擬感測器:

然後就可以使用了,打開VRChat,enjoy。

我遇到的問題:

  1. Kinect 360延遲較高。據說Kinect for Xbox One會好很多,但是因為比較貴所以我沒有嘗試。
  2. 校準後定位還是不準確,我試了幾遍才成功。這個就反覆試試就可以了,在Steam VR的空白空間里可以看到自己虛擬的腰和腳的追蹤器,確保它們位置正確。
  3. 腳和身體的方向問題。在Calibration窗口右上角可以選擇判斷腳和腰方向的方式的選項,其中默認from my body pose是用演算法自動判斷,用from HeadSet是根據頭顯朝向的方向設定腳和腰的方向。這裡可以保持默認。
  4. 在VRChat中如何使用全身追蹤,這點可以進入VRChat中一個叫「Tutorial」(教程)的房間學習。
  5. 在VRChat中,綁定之後你的Avatar永遠比實際低一點,所以你的Avatar會彎著腿。這是因為四齋蒸鵝心,在VRChat里使用了大量色氣滿滿的大長腿模型,導致Avatar的腿比真人的腿長,你腳部追蹤球就會綁到Avatar的膝蓋上。這點可以在綁定Avatar之後,在Calibration窗口中右上第二欄「Feet Tracking(Skeleton Mode Only)」中,把Feet的位置調低(改成負數,具體改多少可以自己不斷嘗試),比較費勁。


Driver4VR+Kinect 360+Color Tracking (色彩追蹤,使用2個發光球)

成本:上一實現的成本+發光球體2-3個。發光球體在某寶上可以買到(好像是做燈籠用的球形LED燈,用兩節五號電池驅動),大約十幾塊一個。而官方推薦使用PS Move手柄的光球,它發光均勻、支持多種顏色、亮度高方便追蹤。Driver4VR的作者還手動製作了發光乒乓球,使用9V電池+LED燈+乒乓球實現,亮度比PS Move低。

我的某寶燈籠球還沒到,這裡使用的是吃灰已久的PS Move(兩個)。如果用某寶燈籠球,加上一方案的總成本約360元(不含電池)。

效果:追蹤時有抖動,但在VRChat踢人的時候已經可以以假亂真(誤)。因為我現在只有兩個發光球體,所以Hip(臀部感測器。。)的位置是Driver4VR靠腳和頭盔的位置計算的,有時看起來有點奇怪。尚不能像真的感測器全身追蹤那樣做出高抬腿之類的動作(擋住光球的都不行),但是踏步、坐姿、踹人是可以的。

實現步驟:

第一步和第二步:安裝驅動和Driver4VR本體,同上。

其中Body Tracking 中選擇 Kinect:Colour - 2 controllers+virtual hips (Kinect:兩個控制器加虛擬臀部感測器)的選項。(如果已經有三個發光球體,選擇 Kinect:Colour-3 controllers 的選項,就可以不用虛擬屁股了。。)

第三步:物理魔改Kinect 360!在Kinect 360左邊的攝像頭上覆蓋一層灰色塑料片以降低曝光,使得Kinect的攝像頭接收到的圖像里有顏色的部分就只有發光球體。如下圖:

Driver4VR的作者Greg是把自己的墨鏡懟在了上面。。

實際上只要是半透明灰色的東西就行,我用的是買顯卡的包裝里的放靜電塑料包裝,剪下來折了兩次粘在了上面。

如果是Kinect for Xbox One,這一步可以軟體解決,我沒有設備所以不知道怎麼做。

第四步:Colour Calibration(顏色校準)

在點擊Start Driver4VR之後,Body Tracking欄下方的Colour Calibration就可以點擊了。

這時你的需要你的發光球體在發光(PS Move需要使用PSMoveService,教程放在後面)

且顏色不要太白(最好離白色比較遠且亮度較高),太白的話可能追蹤效果不好,或者球多了就混淆了,但是也能用。

然後如下圖:

在Tracker list里選擇你要校準的球對應的是哪個關節,hip是屁股,left foot和right foot分別是左腳和右腳。這三個的顏色需要不一樣。

然後點擊Calibrate,就會讓你把光球放到右上攝像頭圖像中的框框里(因為上一步的魔改,右上攝像頭圖像看起來是黑的一片,只有光球的顏色能分辨,以便追蹤),識別到之後 「Move light into rectangle」的提示會消失。

然後需要對三個關節都做一遍,每次使用不同顏色的光球,這樣Driver4VR就能把特定顏色的光球對應到特定關節上。

如果光球顏色暗淡,可以在左上角Calibration method選擇Point and detect light colour,然後右上角的識別就會從長方形變成十字準星,把光球對準十字準星即可。

第五步:Calibration(校準,這次是位置校準)

退出顏色追蹤,進入Body Tracking右邊的Calibrate選項,Calibrate窗口會彈出來。和骨骼追蹤的校準類似,這次是給光球的位置進行校準。它的原理是把光球和能提供準確位置的參照物(其實就是VR頭盔)放到一起,使Driver4VR能夠根據光球在攝像頭中的位置和大小來判斷光球在空間中的方位。

如下圖,左邊選擇要校準的球,右邊選擇參照物(這時你應該知道哪個顏色的球對應哪個關節。。)

然後把光球和參照物(這裡是VR頭顯)放在一起,採樣五次,三次是普通高度位置不同,兩次是高度不同。

注意上圖右上紅外線圖像中,Greg是把PSMove的球這樣放到頭顯的中間,然後端著球和頭顯移動位置和高度以進行校準的。

每個球都要分別校準位置,然後在SteamVR的白色空間里應該看到虛擬追蹤器在正確的位置上。

光球追蹤不能識別關節方向,這裡推薦選擇from HeadSet,其他兩個方向太奇怪了。。

Done,接下來可以打開VRChat踢人了。

已知問題:

  1. 定位會時不時抖動一下。不嚴重,但是沒有辦法解決。
  2. 不能做擋住光球的動作,例如跪拜、躺屍、撅起屁股等(沒錯這都是VRChat里全身大佬會做的動作)

EX:連接PSMove到Driver4VR(需要藍牙)

  1. 在主界面Body Tracking下面的Device Manager右下角的Device configuration選擇PS Move
  2. PS Move欄下面Settings選擇ON-Yes,I want to use PS Move,會有個窗彈出來讓你去下載PSMoveService,這個彈窗附帶了鏈接。然後安裝PSMoveSevice即可。
  3. 安裝完PSMoveService,點擊Settings下面的Restart,會有一行綠色小字「Status:Service_start_success」在Restart上面出現。
  4. 點擊Pairing,進入PSMoveService,按提示連接即可,需要用線把PSMove連到電腦上,然後配對時從電腦上拔下來,它會提示你按PSMove手柄上的PS按鈕,使紅燈亮,如果滅了就重新按,直到紅燈常亮。
  5. 然後在PSMoveService的窗口裡繼續Calibration,如果是PS3版的就有校準磁感應的選項,如果是新版的就沒有。無論哪個版本都有校準重力方向的選項,打開之後把PS Move立在桌子上不動就行了。(舊版PS3的PSMove手柄可以用磁感應來校正方向,而新版閹割了這個感測器,導致PSMove的方向定位一直在漂移,這個問題直接導致了後來我無法使用PSMove來定位關節方向。)
  6. 這時PSMove應該就會隨著Start Driver4VR而亮起來了(然後可以當光球用了),可以用於光球識別。
  7. Driver4VR支持用PSMove確定腳的方向,在Driver4VR->Device Manager窗口的右上方,Devices下面點擊Update List of Devices(更新設備列表),就會顯示兩個PSMove。然後點擊左邊Controller裡面的關節位置(例如TrackerLeftFoot左腳),再點擊右邊的PSMove手柄,然後再點擊「Assign」(賦予),就能讓這個PSMove負責這個關節的方向。長按PSMove手柄上的start按鈕能把它的方向校正為當前頭顯指示的方向。這裡如果用PS3版本的PSMove你可能能獲得接近HTC感測器水平的感應,但如果是PS4版本的PSMove(比如我的),它的方向會一直在自己慢慢漂移,於是你會看到你的腳在自己慢慢旋轉。。這點無法解決,只能每隔一會就重新按start重置方向,很費事。

2018年10月9日更新:

Driver4VR Color Tracking + Kinect 360 + 3個PS3版本的PSMove Controller

三個二手古董PS3版Move手柄,加上之前的二手Kinect360和Driver4VR軟體費用,成本共RMB 500左右,效果已經和HTC的全身追蹤非常接近,難點是要收到兩到三個二手的PS3版本的PSMove,這玩意當年出貨量就不多,十年過去,存量很少了。

具體操作和上面Color Tracking完全一樣,唯一區別是光球換成了PS3版本的PSMove。

PS3版本的PSMove是沒有閹割掉磁力計的老版本,磁力計可以通過定位南北方向來防止上面說過的PSMove陀螺儀漂移,不用老按start按鍵重置,效果和HTC Tracker已經真假難辨了!

(新版本的PSMove閹割掉了磁力計,使用廢舊電池,價格還變貴了。。索尼大法孬。)

用兩個PSMove來分別追蹤雙腳,一個某寶10塊錢光球追蹤腰部位置,效果也是類似的,其實Hip關節的方向並不是十分重要,所以只要收到兩個PS3版的PSMove就可以了。

和HTC的全身追蹤相比,缺點有三:

  1. 因為只有一個Kinect,所以如果擋住了光球,定位就會抖動。換句話說360度轉圈是不行的,趴到地上也是不行的,擋住光球就不行。(踢人是完美的)
  2. 如果附近有強磁場,會干擾磁力計,導致PSMove追蹤的關節方向錯誤。(不過一般不至於有這麼強的磁場,實際使用時附近有音箱也沒什麼影響。)
  3. 腰部Hip關節如果用PSMove追蹤方向,在VRChat里傾斜這個身體,關節的方向會變得奇怪,原因不明。就好像前後傾斜身體,在VRChat里看起來卻是往斜著的方向傾斜的。可能跟PSMove綁在腰上的方法有關。因為這個關節的方向不是很重要,關了Hip的方向追蹤,或者使用便宜光球替代,效果也沒什麼變化。

優點:

全套加起來,比HTC一個感測器還便宜!這套方法是我目前在使用的。


推薦閱讀:

TAG:虛擬現實(VR) | OculusVR | Kinect |