国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

油田虛擬培訓(xùn)系統(tǒng)的多用戶交互技術(shù)研究

2019-01-23 09:48劉賢梅李朝順
微型電腦應(yīng)用 2019年1期
關(guān)鍵詞:多用戶客戶端聊天

劉賢梅, 李朝順

(東北石油大學(xué) 計(jì)算機(jī)與信息技術(shù)學(xué)院, 大慶 163000)

0 引言

虛擬現(xiàn)實(shí)技術(shù)的不斷發(fā)展與廣泛應(yīng)用,大大改善了傳統(tǒng)油田員工的培訓(xùn)方式[1]。通過虛擬現(xiàn)實(shí)技術(shù)建立計(jì)算機(jī)虛擬的、可操作的培訓(xùn)系統(tǒng),使油田員工能夠在虛擬的環(huán)境下學(xué)習(xí)如何對設(shè)備進(jìn)行操作以及如何應(yīng)對突發(fā)事件,使安全操作的培訓(xùn)更加方便、逼真并易于接受。但就目前油田方面針對虛擬仿真培訓(xùn)的應(yīng)用,僅停留在能夠?qū)崿F(xiàn)完成具有臨場感的三維可視化場景,提供固定情節(jié)模式下角色與其他模型進(jìn)行簡單交互的培訓(xùn)。對于油田作業(yè)培訓(xùn)過程中所要求的多崗位、多工種的高協(xié)作性,現(xiàn)有的虛擬仿真培訓(xùn)系統(tǒng)因無法實(shí)現(xiàn)全方位、多角色的協(xié)同學(xué)習(xí)而缺陷明顯。

針對上述問題,本文利用Unity 3D開發(fā)平臺,使用C#語言,采用客戶端/服務(wù)器模式,將多用戶交互技術(shù)應(yīng)用到油田仿真培訓(xùn)系統(tǒng)中,從而提高了油田作業(yè)培訓(xùn)的效率、效果,降低培訓(xùn)成本和安全隱患,對油田單位具有巨大的潛在的經(jīng)濟(jì)價(jià)值,對油田新型培訓(xùn)模式的發(fā)展有著重要意義[2]。

1 虛擬場景中多用戶交互培訓(xùn)需求

在仿真培訓(xùn)場景中,通過創(chuàng)建作業(yè)人員的替身(avatar)來使培訓(xùn)用戶具有臨場感受,每一個(gè)進(jìn)入場景中的用戶都具有唯一的替身來標(biāo)識。當(dāng)多個(gè)用戶處于同一場景中時(shí),用戶替身的位置和方向表明了該用戶在場景中的視點(diǎn)。因此,仿真場景中的多用戶交互培訓(xùn)應(yīng)滿足如下需求:

(1) 能逼真地模擬油田作業(yè)場景。盡可能逼真的模擬作業(yè)的現(xiàn)場環(huán)境,包括培訓(xùn)場景的大小、布局和各種作業(yè)設(shè)備的三維構(gòu)造等。

(2) 能感知其他用戶的存在和行為。每個(gè)加入到仿真培訓(xùn)場景的用戶,都能觀察到其他用戶的替身。通過觀察其他用戶的替身行為,獲知其他用戶的當(dāng)前行為。

(3) 能與其他用戶進(jìn)行交互和交流。通過控制用戶替身和其他用戶進(jìn)行交互操作,并且利用輸入設(shè)備發(fā)送文字信息實(shí)現(xiàn)培訓(xùn)人員之間的相互交流。

2 系統(tǒng)總體設(shè)計(jì)

2.1 系統(tǒng)框架結(jié)構(gòu)設(shè)計(jì)

對上述需求進(jìn)分析,通過分層結(jié)構(gòu)思想提出的系統(tǒng)框架結(jié)構(gòu)如圖1所示。

系統(tǒng)采用C/S(Client/Server)架構(gòu),分為客戶端和服務(wù)器端兩部分。

客戶端主要顯示仿真培訓(xùn)場景和用戶的替身角色,用戶通過輸入設(shè)備對替身進(jìn)行控制操作,利用聊天面板編輯發(fā)送文字信息和其他用戶進(jìn)行在線交流。交互層對每一個(gè)用戶創(chuàng)建替身,實(shí)現(xiàn)仿真培訓(xùn)場景的場景一致性維護(hù)和多用戶交互操作的并發(fā)控制以及在線交流等功能。數(shù)據(jù)層存儲模型數(shù)據(jù)、試題數(shù)據(jù)等信息。分層結(jié)構(gòu)使系統(tǒng)具有良好的擴(kuò)展性、靈活性和可維護(hù)性[3]。

圖1 培訓(xùn)系統(tǒng)框架結(jié)構(gòu)

2.2 多用戶交互工作原理

仿真培訓(xùn)系統(tǒng)中,替身和場景的狀態(tài)一致性控制與用戶在線交流分別由不同的程序完成??蛻舳撕头?wù)器端之間采用TCP進(jìn)行替身和場景的狀態(tài)數(shù)據(jù)傳遞。客戶端負(fù)責(zé)發(fā)送本地用戶替身和場景變化的數(shù)據(jù)給服務(wù)端,同時(shí)從服務(wù)器端接收其他用戶和場景的最新狀態(tài)數(shù)據(jù)并進(jìn)行實(shí)時(shí)更新,從而達(dá)到多用戶狀態(tài)的一致性控制。用戶之間的在線交流也采用TCP進(jìn)行數(shù)據(jù)的發(fā)送和接收,從而能夠保證交流信息的實(shí)時(shí)性。系統(tǒng)中多用戶交互的工作原理如圖2所示。

圖2 交互工作原理

3 關(guān)鍵技術(shù)研究

3.1 用戶替身的創(chuàng)建及交互控制

替身作為用戶在仿真培訓(xùn)場景中的主要操作對象,能夠使用戶切身感受到接近實(shí)際現(xiàn)場的作業(yè)環(huán)境。系統(tǒng)為每一個(gè)進(jìn)入培訓(xùn)場景中的用戶自動(dòng)創(chuàng)建替身,每個(gè)替身均通過ID進(jìn)行唯一性標(biāo)識。如圖3所示。

(1) ID=1角色(2) ID=2角色

圖3 用戶替身

用戶的替身被創(chuàng)建好之后,可以通過輸入設(shè)備控制替身在仿真培訓(xùn)場景中漫游。通過鍵盤按鍵W、S、A、D控制替身的前、后、左、右移動(dòng)[4]。移動(dòng)過程中,通過Animator Controller播放人物運(yùn)動(dòng)動(dòng)畫。獲取按鍵輸入使用Input.GetKey(KeyCode.W)方法,控制替身移動(dòng)則采用transform.Translate(new Vector3(distance,0,0)),設(shè)置不同的Vector參數(shù)來控制不同的移動(dòng)方向。對于替身視角變化,腳本中使用Input.GetAxis("Mouse X")和Input.GetAxis("Mouse Y")來獲取鼠標(biāo)在屏幕水平和豎直方向的位移,使替身視角隨鼠標(biāo)移動(dòng)而變化。

在操控替身進(jìn)行漫游時(shí),用戶想要操作場景中的某一設(shè)備則通過鼠標(biāo)點(diǎn)擊設(shè)備進(jìn)行選中,獲得設(shè)備的操作權(quán)限后進(jìn)行相應(yīng)的操作。通過 Ray ray =Camera.main.ScreenPointToRay(Input.mousePosition)方法,使主相機(jī)根據(jù)鼠標(biāo)點(diǎn)擊位置發(fā)出射線,對射線觸碰到的模型進(jìn)行選取判斷。

3.2 多用戶操作沖突解決模型

培訓(xùn)系統(tǒng)中的所有用戶均會被分配不同的操作任務(wù),包括獨(dú)立操作和多用戶協(xié)同操作的任務(wù)。針對在培訓(xùn)過程中,多個(gè)用戶對同一設(shè)備進(jìn)行獨(dú)立操作而發(fā)生沖突的問題,提出一種沖突解決模型。通過聲明一個(gè)int型的數(shù)組flag[]來保存場景中設(shè)備部件的操作權(quán)限是否已被用戶獲取。假設(shè)一個(gè)部件編號為x,當(dāng)flag[x]=1,表示該部件正在被某個(gè)用戶操作,其他用戶均不能對其選中和操作,并通過彈窗消息進(jìn)行提示;當(dāng)flag[x]=0時(shí),則表示用戶可以獲取該部件的操作權(quán)限,選中該部件獲得權(quán)限后進(jìn)行相應(yīng)操作。flag數(shù)組由服務(wù)器同步到所有的客戶端,使所有的用戶均能實(shí)時(shí)獲取到場景中可操作部件的權(quán)限信息。

3.3 協(xié)同操作的實(shí)現(xiàn)

培訓(xùn)過程中針對某些設(shè)備的協(xié)同操作任務(wù),需要多個(gè)用戶協(xié)同完成。參與操作的用戶通過輸入設(shè)備輸入操作信息(Package),操作信息包括對設(shè)備位置移動(dòng),角度變化??蛻舳藢⒉僮餍畔⑼ㄟ^SendStatus方法發(fā)送到服務(wù)器,由服務(wù)器ProcessPackage方法進(jìn)行處理。如果服務(wù)器判斷多個(gè)用戶的操作信息一致(如:操作設(shè)備向上移動(dòng)),則向客戶端發(fā)送可執(zhí)行指令,由客戶端執(zhí)行對應(yīng)操作。當(dāng)操作信息不一致時(shí)(如:用戶1操作設(shè)備向上移動(dòng),用戶2操作設(shè)備向右移動(dòng)),則操作不會執(zhí)行。多用戶協(xié)同操作設(shè)備使其向上移動(dòng)一段距離,如圖4所示。

圖4 協(xié)同操作設(shè)備

3.4 多人在線聊天

在進(jìn)行油田作業(yè)仿真培訓(xùn)過程中,為便于在仿真開始后用戶進(jìn)行操作任務(wù)分配和操作過程中多用戶之間的交流溝通和協(xié)作,構(gòu)建一個(gè)在線交流功能模塊。

在服務(wù)器端的類中,定義一個(gè)ArrayList來保存聊天用戶 IP,用戶連接服務(wù)器成功后將當(dāng)前在線的用戶 IP 地址添加到隊(duì)列中,然后不斷的從客戶端接收消息,對信息進(jìn)行UTF-8編碼后向 IP 隊(duì)列中的用戶廣播消息,編碼能夠確保漢字信息能夠被傳遞。服務(wù)器類的描述方法如下:

class ChatClient

{

public ArrayList ALLClients = new ArrayList( ); //客戶列表

public string _client IP; //客戶端 IP

public ChatClient( );// 把當(dāng)前用戶實(shí)例加入用戶列表當(dāng)中

public void ReceiveMessage( );//接受客戶端消息

public void SendMessage( );// 向客戶端發(fā)送消息

public void Broadcast( );// 向客戶端廣播消息

}

在客戶端中,通過 GUI 的連接按鈕發(fā)送聊天請求,并設(shè)置聊天名稱,在輸入框中輸入聊天消息,客戶端獲取消息后對消息進(jìn)行編碼后發(fā)送給服務(wù)器端,同時(shí)將服務(wù)器廣播的消息解碼后顯示在 GUI 的聊天信息界面中。用戶聊天界面如圖5所示。

4 總結(jié)

本文通過對虛擬環(huán)境下多用戶交互關(guān)鍵技術(shù)研究,并將研究成果應(yīng)用于油田作業(yè)仿真培訓(xùn)系統(tǒng)。該系統(tǒng)通過建立多人網(wǎng)絡(luò)虛擬環(huán)境,實(shí)現(xiàn)了多人在線實(shí)時(shí)交互功能,彌補(bǔ)了多數(shù)培訓(xùn)系統(tǒng)只能進(jìn)行獨(dú)立崗位學(xué)習(xí)的缺點(diǎn),優(yōu)化了虛擬仿真培訓(xùn)的開發(fā)模式,提升了虛擬培訓(xùn)效果。為了避免網(wǎng)絡(luò)延遲、系統(tǒng)運(yùn)行卡頓、模型相交重疊等情況,還需要在數(shù)據(jù)傳遞、系統(tǒng)優(yōu)化、碰撞檢測等方面進(jìn)一步研究。

圖5 聊天界面

猜你喜歡
多用戶客戶端聊天
你的手機(jī)安裝了多少個(gè)客戶端
“人民網(wǎng)+客戶端”推出數(shù)據(jù)新聞
——穩(wěn)就業(yè)、惠民生,“數(shù)”讀十年成績單
河北省南水北調(diào)中線受水區(qū)水資源統(tǒng)一調(diào)配方案研究
一種基于LBS的多用戶位置共享方法MULS
我就是不想跟你聊天了
敞開門聊天
VBA實(shí)現(xiàn)SE的多用戶記錄
媒體客戶端的發(fā)展策略與推廣模式
新華社推出新版客戶端 打造移動(dòng)互聯(lián)新聞旗艦
聊天不倒王
湖南省| 共和县| 静乐县| 平顶山市| 石台县| 汽车| 唐河县| 鄂尔多斯市| 徐水县| 玉林市| 大港区| 凤冈县| 蒲城县| 玉龙| 阿合奇县| 朝阳市| 梁山县| 定南县| 来安县| 平度市| 永康市| 文化| 济源市| 孟连| 荔浦县| 深州市| 合江县| 齐河县| 新竹市| 西华县| 石柱| 钟山县| 麻江县| 海兴县| 鸡东县| 扶绥县| 镇原县| 乌什县| 杂多县| 泽库县| 都江堰市|