茌眾博
摘要:意在設計感知網(wǎng)聯(lián)單車分布式虛擬環(huán)境系統(tǒng),讓用戶在虛擬環(huán)境中進行騎行健身,解決當下室內(nèi)健身單車枯燥無聊的問題。
關鍵詞:分布式虛擬環(huán)境;物聯(lián)網(wǎng);健身單車
中圖分類號:TP3 文獻標識碼:A ?文章編號:1003-9082(2020)07-000-01
一、系統(tǒng)整體設計
1. 項目整體技術架構
下位機是由健身單車主體、兩塊Arduino開發(fā)板及多種傳感器構成,下位機系統(tǒng)控制部分由兩塊Arduino開發(fā)板構成,一塊用于將傳感器所獲取的數(shù)據(jù)通過串口通信傳輸至上位機,處理速度信息、角度信息等這些由用戶本身產(chǎn)生信息,另一塊用于讀取并解析上位機系統(tǒng)指令,虛擬環(huán)境中風速、單車上下坡所帶來不同阻力感等信息會通過此單片機反饋至用戶。下位機系統(tǒng)還包含了大量傳感器與控制模塊,傳感器采集用戶騎行數(shù)據(jù),例如騎行速度、車把方向、剎車信號等,控制模塊用于將虛擬環(huán)境中環(huán)境信息,例如風速、阻力、振動等作用于騎行用戶。
上位機部分,利用Unity3D引擎搭建虛擬環(huán)境,虛擬環(huán)境中建立基本人物模型與環(huán)境交互內(nèi)容,與單片機通過串口通信傳遞用戶騎行信息、人機交互信息等,保證系統(tǒng)信息實時傳遞。為實現(xiàn)分布式虛擬環(huán)境,又架設了服務器及數(shù)據(jù)庫,設計了一套基于服務器—客戶端框架的網(wǎng)絡傳輸模式,并存儲用戶騎行信息,實現(xiàn)局域網(wǎng)下兩輛單車可以在同一虛擬環(huán)境下進行交互。
2. 單車部分設計方案
單車結構主要考慮傳感器、執(zhí)行器安裝以及用戶騎車體驗。在車把前部加裝鐵板平面,用來安裝風扇和用戶打卡系統(tǒng),且方便放置VR頭盔,風扇模擬風力,用戶打卡系統(tǒng)實現(xiàn)用戶刷卡上機操作。在車把下方安裝角度傳感器,在車把上配備電子剎把。在左側車把處增加搖桿,用戶可通過左手拇指對虛擬環(huán)境中界面進行操作。在右側車把處選用自復位按鍵,分別在虛擬環(huán)境中起到復位、加速和鳴笛效果,用戶右手拇指即可輕松操作。在車把內(nèi)部加入振動馬達模擬顛簸與碰撞,車把套中嵌入心率傳感器以獲取用戶心率。單車的下方用角鐵固定電動推桿,通過鐵絲牽引健身單車飛輪剎車片,采用磁控力,通過控制磁鐵與飛輪之間距離產(chǎn)生不同阻尼力,實現(xiàn)不同阻力效果。在單車飛輪上固定一磁鐵片,于單車的飛輪中心處安裝霍爾傳感器讀取騎行速度。
3. 虛擬環(huán)境部分設計方案
在賽道中增加上下坡、指示標、加速減時道具、傳送門、檢查點、蹦床、行人等內(nèi)容。當用戶觸碰減速道具時,虛擬環(huán)境中的計時器會對時間進行縮減;觸碰加速道具時,用戶通過點擊加速按鍵可加速;傳送門可以使賽道多樣化,通過在傳送門之間穿梭尋找捷徑;檢查點的設置讓用戶獲知自己行進路程;設置蹦床為增加用戶多樣性體驗;設置行人目的是為了增加賽道難度,撞到行人會增加比賽時間。
此外增加用戶交互界面,提升用戶體驗。并且設計了一套基于服務器—客戶端框架網(wǎng)絡傳輸模式,使兩輛單車在局域網(wǎng)環(huán)境下實現(xiàn)分布式虛擬環(huán)境。
二、系統(tǒng)整體實現(xiàn)
1.軟硬件交互部分
通過C# 中SerialPort 類實現(xiàn)與Arduino的數(shù)據(jù)交流,建立子線程執(zhí)行數(shù)據(jù)接收與處理。兩個子線程一個接收來自硬件的數(shù)據(jù),一個向硬件發(fā)送數(shù)據(jù)。Arduino采集信息數(shù)據(jù)以字符串(x,y)形式傳入串口緩沖區(qū),使用正則表達式讀取線程,匹配過濾非法數(shù)據(jù)。數(shù)據(jù)有不同標志位標記數(shù)據(jù)類型,例如方向、轉速等,其中x坐標代表具體數(shù)值,y坐標代表數(shù)據(jù)含義。
2. 硬件部分
包括速度信號、角度信號、剎車信號、按鍵信號、搖桿信號、打卡信號和心率信號等。
3.軟件部分
(1)虛擬環(huán)境內(nèi)容
運用Unity3D引擎,從硬件采集數(shù)據(jù),設計單車模擬行駛系統(tǒng),建立單車的運動狀態(tài)及空間坐標邏輯關系,構建虛擬環(huán)境中的單車模型。單車模擬行駛系統(tǒng)計算單車在加速、拐彎、剎車等不同情況下的行駛情況,單車輪子與車體物理運算分開,輪子和車體都為單車物體的子物體。車體部分搭載了自動調(diào)整重心算法以保持平衡。輪子部分運用減震器的物理算法,能夠在車輪進行滾動的同時模擬輪子垂直抖動。輪子與地面的摩擦力是單車的動力來源。單車進行拐彎動作時,算法會回饋給單車車體一個角動量,減少車身抖動,平衡車體以及減少用戶VR眩暈感。將VR相機與單車車體綁定,實現(xiàn)用戶第一人稱視角體驗。同時運用復位點插件,用戶在虛擬環(huán)境中撞墻的話便可以使得用戶回到賽道中正確位置,配合實體單車的復位按鍵實現(xiàn)復位功能。
利用Unity3D引擎內(nèi)置的UGUI系統(tǒng),可以“可視化地”開發(fā)交互界面。建立一個通用界面管理器,通過它來控制界面顯示和關閉。在界面管理器中,定義顯示界面與關閉界面兩個基本方法,同時界面管理器中還包含著一個列表,索引所有已經(jīng)打開的界面,從而避免界面重復打開。還編寫了一個界面基類,每一個界面都是繼承自面板基類。在基類中包含了初始化、開啟、關閉這三個固定方法,面板基類的初始化方法中,程序會根據(jù)所給路徑動態(tài)加載界面資源并控制面板的上下層關系。
(2)網(wǎng)絡傳輸部分
當客戶端發(fā)起連接時,基于套接字數(shù)據(jù)包將會通過指定端口,被發(fā)給搭建好的多線程異步服務器,部署于服務端的數(shù)據(jù)庫記錄了用戶登錄信息,可用于用戶信息比對及更新??蛻舳伺c服務器之間通過附帶時間戳的心跳協(xié)議,確保之間的相互連接。每隔一定時間,客戶端向服務器發(fā)送心跳協(xié)議以測試連通性,服務器收到后恢復心跳,并通過時間戳更新上次響應時間,長時間未響應的用戶會被斷開連接。
用戶騎行信息會被實時傳輸給服務器,并由服務器分發(fā)給所有用戶。服務器通過六軸坐標及速率、角動量雙重傳輸及預測位置更新算法,可以在網(wǎng)絡不佳情況下減少可能出現(xiàn)的位置同步錯誤,并顯著降低延遲,同時對傳輸來信息進行防作弊檢測,增加競技公平性。在多人健身競技中,計算每位玩家所用時間、所獲積分,并將其傳輸給服務器,從而實現(xiàn)排行榜功能,在每次騎行結束后展示給用戶。服務端數(shù)據(jù)庫可保存用戶每次騎行數(shù)據(jù),以便于用戶之間相互挑戰(zhàn)及檢驗用戶健身效果。
客戶端與服務器傳輸核心方法是將各類信息對象通過JSON序列化編碼傳輸,服務器會通過其協(xié)議名稱及所包含的參數(shù)自動進行下一步處理。服務端數(shù)據(jù)存儲使用MySQL數(shù)據(jù)庫,并將SQL語句定義并封裝在服務端C#程序單獨的類中。
參考文獻
[1]潘志庚,cad.zju.edu.cn,姜曉紅等.分布式虛擬環(huán)境綜述[J].軟件學報,2000
(04):461-467.