VR第一視角遠程牽引控制機械臂項目概述:
項目方案:VR+動捕+機械臂。
項目完成情況:
把CC3220開發(fā)板的TCP Server弄出來了,可以遠程控制機械臂了,最終還是沒有時間搭建HTTP Server,攝像頭共享就只能作罷了。
不采用傳統(tǒng)的輸入設(shè)備(如:鍵盤、鼠標(biāo)、手柄等)來做控制,也不是簡單的讓機械臂和操作者的手臂同步。具體實現(xiàn)步驟如下。
1. 制作一個機械臂
某寶上直接買了一個幾十塊現(xiàn)成的,雖然很糙,但是足夠用了。
2. 安裝機械臂的第一視角
配合兩個舵機實現(xiàn)上下左右的轉(zhuǎn)動。
這里本來應(yīng)該是用JPEG攝像頭連到CC3220開發(fā)板來做遠程的, 開發(fā)板上搭建HTTP Server最終還是沒搞定。
測試的時候用了一臺手機代替開發(fā)板(手機上倒是做了完整的測試界面,包括控制、攝像頭畫面、信息窗口)。
3. 機械臂的遠程控制及第一視角的遠程共享
這里先說說之前的測試方案:
機械臂和控制第一視角的舵機都用Arduino驅(qū)動,把Arduino和手機用OTG線連接。手機上搭建一個HTTP服務(wù)器,負責(zé)接收遠程指令和手機攝像頭畫面(作為機械臂的第一視角)的遠程共享。機械臂的控制指令通過手機USB發(fā)送給Arduino。
結(jié)合CC3220的方案:
攝像頭畫面共享沒實現(xiàn),沒有搞定開發(fā)板上的HTTP Server。在官方Demo里的“network_terminal”的基礎(chǔ)上修改的TCP Server,從Socket里面獲得控制指令,轉(zhuǎn)換成PWM信號控制機械臂的舵機。這次只控制機械臂的舵機,沒有遠程攝像頭舵機的控制。
4. 在3D開發(fā)環(huán)境下的開發(fā)
首先重構(gòu)一個虛擬的機械臂,只要保證重要的機械結(jié)構(gòu)一致就可以了,其它的細節(jié)不需要(參考下圖)。
然后為用戶構(gòu)建一個虛擬的半透明屏幕,綁定在視角前方,用來顯示機械臂第一視角的畫面。(U
nity下面獲取遠程畫面不是很方變,這里沒有做視頻流,而是通過刷新的方式一幀一幀獲取攝像頭畫面,用base64Binary格式壓縮到HTTP服務(wù)器的響應(yīng)中)
導(dǎo)入一個單手臂的模型,并握有配套的手柄模型。
因為要用到VR,這里選擇了Unity3D。遠程通信要實現(xiàn):
- 讓操作者用頭部轉(zhuǎn)動去控制機械臂第一視角的轉(zhuǎn)動
- 分析虛擬機械臂的運動從而計算出相應(yīng)的控制指令來實現(xiàn)現(xiàn)實的機械臂和虛擬機械臂的同步。
結(jié)合CC3220的方案:
上面展示的是測試時候的方案,手機VR的SDK用的是Cardboard。結(jié)合CC3220開發(fā)板的時候,更換了Google Daydream的SDK,手柄也直接替換成了Daydream的手柄。沒有搞定遠程視頻共享,所以刪掉了虛擬的半透明屏幕,重新制作了虛擬工作環(huán)境:包括多視角觀察窗口(左測和上方兩個視角)、傳感器監(jiān)控(數(shù)據(jù)、模型)、舵機轉(zhuǎn)角計算結(jié)果的監(jiān)控、虛擬鍵盤(用于設(shè)置TCP Server的IP地址和端口)。Daydream下面不能像Cardboard一樣設(shè)計屏幕輸入界面,所以才設(shè)計了一個虛擬鍵盤。
5. 引入動捕設(shè)備
用三顆MPU6050實現(xiàn)手臂動捕,這樣在虛擬環(huán)境下就有了完全同步的虛擬手臂了。測試的時候用了一個自制的手柄不帶任何運動傳感器。
結(jié)合CC3220開發(fā)板做測試的時候,采用Daydream,可以用Daydream的遙控器代替自己做的手柄。雖然Daydream的遙控器是九軸的,但校準(zhǔn)方面還是純主觀性的,說白了跟六軸的效果是一樣。在Daydream下面藍牙插件做的有點問題,不夠順暢。如果不壓縮數(shù)據(jù),會出現(xiàn)明顯的延時和卡頓,目前還是依靠犧牲傳感器計算結(jié)果的精度來解決。感興趣可以看看后面的一個演示視頻,遙控器可以不用死死捏在手上,可以變換握姿。操作上也更加豐富了。另外,Daydream的遙控器有觸摸板,配合觸摸板下的按鍵,可以實現(xiàn)多種操作的組合。
6. 控制流程
測試方案:
(動捕設(shè)備) (運動分析得到控制指令)
操作者的手臂 ------> 同步的虛擬手臂 ------> 牽引虛擬的機械臂 ------> 遠程讓機械臂同步
(頭部轉(zhuǎn)動分析得到控制指令)
操作者的頭部 ---------------------------------> 遠程讓機械臂同步
(遠程圖傳)
虛擬環(huán)境下的虛擬屏幕<-------------機械臂第一視角
CC3220方案:
(敲擊輸入)
虛擬鍵盤 -----------------> 設(shè)置TCP Server的IP和端口
(動捕設(shè)備) (運動分析得到控制指令)
操作者的手臂 ------> 同步的虛擬手臂 ------> 牽引虛擬的機械臂 ------> 遠程讓機械臂同步
項目開發(fā)環(huán)境:
硬件清單:
測試方案:
- 機械臂 x 1(四個舵機)
- 舵機 x 2(用于轉(zhuǎn)動手機)
- Arduino x 1
- 安卓手機 x 2
- 動捕設(shè)備 x 1(IMU:MPU6050 x 3, MCU:MSP430F5259, BLE:CC2540)
- 手柄 x 1
CC3220的方案:
- 機械臂 x 1(四個舵機)
- CC3220 x 1
- 安卓手機 x 1(7.0以上系統(tǒng),Daydream Ready)
- 動捕設(shè)備 x 1(IMU:MPU6050 x 3, MCU:MSP430F5259, BLE:CC2540)
- Daydream手柄 x 1
3D開發(fā)環(huán)境:
測試方案:
- Unity3D 5.4.2 + Cardboard SDK
CC3220的方案:
- Unity3D 5.6.3 + Google VR SDK
CC3220開發(fā)環(huán)境:
- CCS7.4 + simplelink_cc32xx_sdk_1_60_00_04
項目圖片:
測試方案:
機械臂
安裝了手機
手機測試軟件界面
動捕設(shè)備+控制手柄
動捕佩戴好后拍照
Unity3D開發(fā)環(huán)境界面截圖
VR畫面截圖
CC3220的方案:
機械臂:
動捕設(shè)備+Daydream手柄
動捕佩戴好后拍照
Unity3D開發(fā)環(huán)境界面截圖
VR界面截圖:
項目視頻:
用手機代替開發(fā)板測試的視頻:
動捕加Daydream演示視頻:
CC3220測試視頻: