• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      虛擬仿真中單機多人協(xié)同技術(shù)的實現(xiàn)與應(yīng)用

      2022-07-08 07:20:42曹朋飛邸彥強馮少沖崔浩浩陳志佳
      電子技術(shù)與軟件工程 2022年2期
      關(guān)鍵詞:模擬訓(xùn)練列表鼠標

      曹朋飛 邸彥強 馮少沖 崔浩浩 陳志佳

      (陸軍工程大學(xué)石家莊校區(qū) 河北省石家莊市 050000)

      1 引言

      虛擬仿真是指真實人員操縱仿真系統(tǒng),通過電機控制、決策、通信等技巧實現(xiàn)人在回路的虛擬仿真系統(tǒng),其中三維模擬訓(xùn)練系統(tǒng)是虛擬仿真中的一種重要仿真形式。在武器裝備訓(xùn)練領(lǐng)域,裝備的操作往往需要多名操作手協(xié)同工作來完成特定任務(wù),因此在設(shè)計裝備的三維模擬訓(xùn)練系統(tǒng)時需要考慮多人協(xié)同作業(yè)的功能需求,以提高訓(xùn)練效果。目前多人協(xié)同的三維模擬訓(xùn)練系統(tǒng)均采用網(wǎng)絡(luò)互聯(lián)的方式實現(xiàn)協(xié)同功能,如采用基于C/S架構(gòu)的Socket通信或者采用基于分布式的架構(gòu)通過網(wǎng)絡(luò)中間件進行通信。該方式對于多種裝備的大型模擬訓(xùn)練系統(tǒng)效果較好,但是在平臺級的單裝三維模擬訓(xùn)練系統(tǒng)中,采用網(wǎng)絡(luò)互聯(lián)方式實現(xiàn)多人協(xié)同效果較差,主要原因有兩點:一是需要解決多個節(jié)點間的系統(tǒng)狀態(tài)同步問題;二是該單裝模擬訓(xùn)練系統(tǒng)在與其他仿真系統(tǒng)進行聯(lián)動訓(xùn)練時,由于自身拓撲結(jié)構(gòu)復(fù)雜,不易集成。因此,針對平臺級單裝三維模擬訓(xùn)練系統(tǒng)提出一種新的多人協(xié)同作業(yè)技術(shù),即單機多人協(xié)同技術(shù)(Single-machine Multi-user Collaboration Technology,SMCT)。

      SMCT在一臺計算機中連接多個顯示設(shè)備和多套輸入設(shè)備,通過對多套輸入設(shè)備的數(shù)據(jù)處理與驅(qū)動實現(xiàn)多個操作手協(xié)同作業(yè)功能,避免了多用戶網(wǎng)絡(luò)互聯(lián)問題,有效簡化了系統(tǒng)結(jié)構(gòu)。同時,使用一臺計算機即可實現(xiàn)模擬訓(xùn)練的多人協(xié)同功能,有效減少了成本。此外,在與其他仿真系統(tǒng)進行互聯(lián)時,采用單機形式的三維模擬訓(xùn)練系統(tǒng)與采用多機聯(lián)網(wǎng)形式的模擬訓(xùn)練系統(tǒng)相比,更易于集成。

      2 單機多人協(xié)同技術(shù)

      2.1 單機多輸入設(shè)備協(xié)同技術(shù)原理

      在三維模擬訓(xùn)練系統(tǒng)中,為單臺計算機連接多個顯示設(shè)備和多套輸入設(shè)備,如鼠標、鍵盤、觸控屏等,SMCT為每個用戶分配一個顯示設(shè)備和一套輸入設(shè)備,同時為每個用戶生成一套虛擬的輸入設(shè)備圖標,如虛擬鼠標指針等,其示意圖如圖 1所示。目前計算機中單個顯卡可以支持多路視頻輸出,通過特定設(shè)備可以進一步增加顯示設(shè)備的數(shù)量,能夠滿足平臺級裝備模擬訓(xùn)練系統(tǒng)的需求。對于由多套輸入設(shè)備產(chǎn)生的計算機USB接口不足等問題,可采用USB-HUB等設(shè)備對計算機USB接口數(shù)量進行擴展。

      圖1:SMCT示意圖

      SMCT通過操作系統(tǒng)提供的RawInput相關(guān)接口采集各用戶輸入設(shè)備的原始輸入信息,然后對采集的輸入數(shù)據(jù)進行解析與封裝,形成可供三維模擬訓(xùn)練系統(tǒng)識別的數(shù)據(jù)結(jié)構(gòu),采用多線程異步處理算法處理封裝后的數(shù)據(jù)結(jié)構(gòu),根據(jù)各用戶的輸入信息生成三維模擬訓(xùn)練系統(tǒng)中的操作事件,最后通過委托機制將該操作事件分發(fā)給系統(tǒng)中所需要驅(qū)動的三維模型,以完成相應(yīng)的訓(xùn)練操作,其結(jié)構(gòu)框架如圖 2所示。

      圖2:SMCT結(jié)構(gòu)框架

      SMCT框架可分為數(shù)據(jù)層和應(yīng)用層,數(shù)據(jù)層通過操作系統(tǒng)提供的應(yīng)用程序接口(Application Programming Interface,API)采集各輸入設(shè)備的輸入數(shù)據(jù)、設(shè)備身份標識等信息,通過對輸入設(shè)備數(shù)據(jù)的解析處理形成三維模擬訓(xùn)練系統(tǒng)中的輸入事件供應(yīng)用層使用。應(yīng)用層根據(jù)采集的輸入設(shè)備信息將各輸入設(shè)備虛擬化,為每個用戶生成相應(yīng)的虛擬輸入設(shè)備圖標。通過用戶標定模塊將虛擬輸入設(shè)備分配給各用戶,通過使用數(shù)據(jù)層產(chǎn)生的輸入事件對相應(yīng)的三維模型進行操作。

      2.2 多輸入設(shè)備數(shù)據(jù)采集、解析與驅(qū)動

      SMCT通過操作系統(tǒng)提供的API采集輸入設(shè)備信息,其具體步驟如下所述。

      2.2.1 獲取輸入設(shè)備信息

      通過操作系統(tǒng)提供的API獲取計算機中接入的所有輸入設(shè)備的信息并記錄在列表中,其中包含設(shè)備類型、設(shè)備名稱以及設(shè)備句柄等信息。

      2.2.2 注冊輸入設(shè)備

      對需要采集的輸入設(shè)備類型進行注冊,注冊后操作系統(tǒng)會產(chǎn)生這些輸入設(shè)備的原始輸入信息,其中常用輸入設(shè)備類型編碼參數(shù)如表 1所示。

      表 1:輸入設(shè)備類型參數(shù)

      2.2.3 輸入設(shè)備數(shù)據(jù)采集

      采用Hook方法截獲操作系統(tǒng)中的WM_INPUT消息,使用RAWINPUT數(shù)據(jù)結(jié)構(gòu)存儲輸入設(shè)備數(shù)據(jù)信息,根據(jù)輸入數(shù)據(jù)中的設(shè)備類型分別針對各種設(shè)備數(shù)據(jù)進行處理。在采集到輸入設(shè)備的數(shù)據(jù)之后可根據(jù)具體的三維模擬訓(xùn)練系統(tǒng)需求對數(shù)據(jù)進行解析封裝,最終形成設(shè)備事件驅(qū)動上層應(yīng)用,其示意圖如圖 3所示。

      圖3:數(shù)據(jù)采集、解析、驅(qū)動原理示意圖

      以鼠標設(shè)備為例,鼠標設(shè)備輸入數(shù)據(jù)信息中包含鼠標指針在屏幕中的坐標信息、鼠標的按鍵狀態(tài)信息,如鼠標左鍵按下和抬起狀態(tài)、鼠標中鍵按下和抬起狀態(tài)以及鼠標右鍵按下和抬起狀態(tài)。根據(jù)鼠標按鍵狀態(tài)的變化可生成鼠標動作事件,如鼠標單擊事件、鼠標雙擊事件以及鼠標拖動事件等。

      2.3 多輸入設(shè)備的協(xié)同

      SMCT采用多線程異步處理算法結(jié)合委托機制共同完成多設(shè)備的協(xié)同。在SMCT中,每種類型的輸入設(shè)備維護一個設(shè)備數(shù)據(jù)列表,該數(shù)據(jù)列表以設(shè)備句柄作為其列表索引,在設(shè)備初始化時即可確定該列表的結(jié)構(gòu)與長度。多線程異步處理算法通過對設(shè)備數(shù)據(jù)列表的異步讀寫初步完成了設(shè)備輸入與響應(yīng)的分離,使得多設(shè)備可同時操作。該算法包含輸入設(shè)備數(shù)據(jù)采集線程和數(shù)據(jù)處理線程,其中輸入設(shè)備數(shù)據(jù)采集線程監(jiān)控所有已注冊設(shè)備的輸入消息,當有輸入消息時對輸入數(shù)據(jù)進行采集,針對不同類型的設(shè)備數(shù)據(jù),將其存入對應(yīng)設(shè)備的設(shè)備數(shù)據(jù)列表中,同時根據(jù)數(shù)據(jù)中的設(shè)備句柄更新設(shè)備列表中對應(yīng)的設(shè)備數(shù)據(jù)。數(shù)據(jù)處理線程定時訪問設(shè)備數(shù)據(jù)列表,對列表中各設(shè)備數(shù)據(jù)進行解析處理生成設(shè)備輸入事件,其原理流程圖如圖 4所示。

      圖4:多線程異步處理算法原理流程圖

      SMCT通過委托機制將生成的設(shè)備輸入事件分發(fā)給三維模擬訓(xùn)練系統(tǒng)中的三維模型,系統(tǒng)中三維模型根據(jù)具體的輸入事件做出相應(yīng)的動作響應(yīng)完成訓(xùn)練任務(wù),其具體步驟如下所示:

      (1)針對設(shè)備類型,定義該設(shè)備的輸入事件;

      (2)在三維模擬訓(xùn)練系統(tǒng)中的各模型對其需要的設(shè)備輸入事件進行注冊,同時綁定事件處理函數(shù);

      (3)當產(chǎn)生設(shè)備輸入事件時,將該事件通過委托機制分發(fā)給三維模擬訓(xùn)練系統(tǒng)中的各個模型部件;

      (4)系統(tǒng)中各模型部件收到事件時,觸發(fā)相應(yīng)的事件處理函數(shù),對系統(tǒng)中的三維模型進行響應(yīng)操作,如移動、旋轉(zhuǎn)等。

      通過上述操作實現(xiàn)了多設(shè)備協(xié)同驅(qū)動三維模擬訓(xùn)練系統(tǒng)中的作業(yè)任務(wù)。

      3 SMCT中的設(shè)備虛擬化與用戶標定

      在應(yīng)用層SMCT主要完成輸入設(shè)備的虛擬化和用戶標定功能,為多人協(xié)同作業(yè)提供支撐。

      3.1 設(shè)備虛擬化

      設(shè)備虛擬化是指在三維模擬訓(xùn)練系統(tǒng)中為接入系統(tǒng)的多套輸入設(shè)備構(gòu)建相應(yīng)的虛擬設(shè)備,如為每個鼠標設(shè)備構(gòu)建一個鼠標指針圖標,為每個鍵盤設(shè)備構(gòu)建一個光標等,然后通過標定功能將該虛擬設(shè)備與用戶進行綁定。設(shè)備虛擬化的具體實現(xiàn)如下所述:

      (1)在三維模擬訓(xùn)練系統(tǒng)初始化時,獲取接入操作系統(tǒng)的所有輸入設(shè)備信息;

      (2)根據(jù)設(shè)備類型過濾出三維模擬訓(xùn)練系統(tǒng)需要的設(shè)備并存入設(shè)備列表;

      (3)對設(shè)備列表進行遍歷,根據(jù)設(shè)備類型與數(shù)量在三維模擬訓(xùn)練系統(tǒng)中繪制相應(yīng)的虛擬設(shè)備圖標;

      (4)三維模擬訓(xùn)練系統(tǒng)實時接收輸入設(shè)備信息,更新對應(yīng)的虛擬設(shè)備圖標位置和狀態(tài)。

      3.2 用戶工作區(qū)分割與標定

      SMCT在硬件結(jié)構(gòu)上采用一機多屏的形式,即一臺計算機連接多臺顯示設(shè)備,每臺顯示設(shè)備作為一個用戶的工作區(qū)。在操作系統(tǒng)中多臺顯示設(shè)備采用擴展模式進行排列,在三維模擬訓(xùn)練系統(tǒng)中SMCT根據(jù)顯示設(shè)備的屏幕分辨率通過設(shè)置仿真引擎中的攝像機數(shù)量與顯示比例將三維模擬訓(xùn)練系統(tǒng)工作區(qū)均勻分割。對于每個用戶工作區(qū)的邊界坐標可根據(jù)工作區(qū)排列方式進行計算,如圖 5所示,在仿真引擎中設(shè)整個系統(tǒng)的工作區(qū)坐標由(x,y,w,h)表示,其中x和y表示工作區(qū)左下角相對屏幕坐標的位置,w和h表示工作區(qū)占系統(tǒng)顯示的寬和高的比例,則整個系統(tǒng)的坐標可表示為(0,0,1,1),如圖中工作區(qū)1坐標表示為(0.5,0.5,0.5,0.5)。

      圖5:用戶工作區(qū)分割示意圖

      設(shè)三維模擬訓(xùn)練系統(tǒng)中工作區(qū)以X×Y方式進行排列,即橫排為X個工作區(qū),縱排有Y個工作區(qū),其中第i個工作區(qū)(i從0開始)的邊界(Vx,Vy,Vw,Vh)計算公式如式 1所示。

      其中Vx,Vy,Vw,Vh組成工作區(qū)的矩形邊界,Vx為工作區(qū)左下角x坐標,Vy為工作區(qū)左下角y坐標,Vw為工作區(qū)寬度占比,Vh為工作區(qū)高度占比。

      在使用三維模擬訓(xùn)練系統(tǒng)之前需要通過用戶標定模塊為每個用戶分配工作區(qū),該過程為用戶標定過程。用戶標定建立了三維模擬訓(xùn)練系統(tǒng)中工作區(qū)與虛擬輸入設(shè)備以及用戶之間的映射關(guān)系,其中使用不同的顏色對多套虛擬設(shè)備進行區(qū)分。標定原理如圖 6所示,SMCT為每個工作區(qū)分配一個ID,通過標定過程將輸入設(shè)備句柄與工作區(qū)ID進行綁定,采用配置文件對其映射關(guān)系進行記錄,在三維模擬訓(xùn)練系統(tǒng)運行過程中,根據(jù)設(shè)備與工作區(qū)的映射關(guān)系,各用戶分別在其選擇的工作區(qū)進行協(xié)同作業(yè)。

      圖6:用戶標定原理

      以一機兩屏為例,標定過程如圖 7所示,SMCT將三維模擬訓(xùn)練系統(tǒng)分割為兩個工作區(qū),接入兩套輸入設(shè)備,支持兩個用戶協(xié)同工作。依據(jù)工作區(qū)排列順序依次顯示系統(tǒng)標定界面,其余工作區(qū)為黑屏狀態(tài),用戶選擇一套輸入設(shè)備激活標定按鈕,將該設(shè)備分配給當前工作區(qū),完成用戶與工作區(qū)的綁定。

      圖7:用戶標定過程示意圖

      4 SMCT在基于Unity 3D的三維模擬訓(xùn)練系統(tǒng)中的應(yīng)用

      Unity3D是丹麥Unity Technology公司開發(fā)的跨平臺綜合型游戲開發(fā)引擎,它以優(yōu)質(zhì)的3D渲染效果和支持跨平臺的特點在虛擬仿真領(lǐng)域得到廣泛應(yīng)用。目前,該引擎已經(jīng)是虛擬仿真領(lǐng)域中三維模擬訓(xùn)練系統(tǒng)的主要開發(fā)引擎之一。SMCT在基于Unity3D引擎的三維模擬訓(xùn)練系統(tǒng)中將操作系統(tǒng)外接輸入設(shè)備的信號轉(zhuǎn)換為Unity3D引擎中的操作事件,驅(qū)動場景中對應(yīng)的虛擬輸入設(shè)備產(chǎn)生動作。Unity3D引擎在其場景中虛擬設(shè)備所處的當前位置發(fā)射一條射線,該射線在場景中進行碰撞檢測,第一次碰撞檢測到的模型為該虛擬設(shè)備拾取的對象模型。當多個用戶進行協(xié)同訓(xùn)練時,每個用戶所對應(yīng)的虛擬輸入設(shè)備所產(chǎn)生的不同動作會映射到該虛擬設(shè)備所拾取到的不同的對象模型上,使場景中的多個模型同時產(chǎn)生相應(yīng)的操作,達到多用戶協(xié)同訓(xùn)練的目的。

      目前該技術(shù)已成功應(yīng)用于多套三維模擬訓(xùn)練系統(tǒng)中,達到了很好的效果。如圖 8所示,在某裝備模擬訓(xùn)練系統(tǒng)中基于SMCT實現(xiàn)了對裝備的多人協(xié)同操作訓(xùn)練,該系統(tǒng)運行于一臺計算機中,采用三個顯示器以擴展模式進行連接,在計算機中接入三套鼠標設(shè)備,通過標定過程分別為每個用戶綁定一個顯示器區(qū)域和一個虛擬鼠標指針。該系統(tǒng)中三位用戶分別使用綠色、黃色和紅色的虛擬鼠標通過點擊、拖動等動作同時對同一輛裝備進行訓(xùn)練操作,協(xié)同完成裝備模擬訓(xùn)練的過程。

      圖8:某裝備模擬訓(xùn)練系統(tǒng)多人協(xié)同訓(xùn)練效果圖

      5 結(jié)論

      本文依據(jù)裝備三維模擬訓(xùn)練中的實際需求,設(shè)計了一種多人協(xié)同技術(shù)框架,對其中功能模塊的設(shè)計與實現(xiàn)進行了論述,實現(xiàn)了在平臺級裝備三維模擬訓(xùn)練中多人協(xié)同作業(yè)的目的。該技術(shù)采用單機多顯示設(shè)備結(jié)合多輸入設(shè)備的硬件架構(gòu),實現(xiàn)了外接硬件輸入數(shù)據(jù)的采集、解析、封裝與驅(qū)動,采用多線程異步處理算法結(jié)合委托機制實現(xiàn)了多設(shè)備的協(xié)同,同時設(shè)計了一種用戶工作區(qū)的分割與標定方法,支撐了該技術(shù)的應(yīng)用。該技術(shù)規(guī)避了多節(jié)點網(wǎng)絡(luò)之間的復(fù)雜關(guān)系,簡化了系統(tǒng)結(jié)構(gòu),降低了成本。并且,易于與其他異構(gòu)系統(tǒng)進行分布式互聯(lián)集成。該技術(shù)適用于少量用戶的多人協(xié)同作業(yè),對于大規(guī)模的系統(tǒng)可通過該技術(shù)與網(wǎng)絡(luò)相結(jié)合的方法進行實現(xiàn)。

      猜你喜歡
      模擬訓(xùn)練列表鼠標
      巧用列表來推理
      學(xué)習(xí)運用列表法
      Progress in Neural NLP: Modeling, Learning, and Reasoning
      Engineering(2020年3期)2020-09-14 03:42:00
      擴列吧
      模擬訓(xùn)練(二)
      模擬訓(xùn)練(十一)
      模擬訓(xùn)練(十)
      模擬訓(xùn)練(八)
      不含3-圈的1-平面圖的列表邊染色與列表全染色
      45歲的鼠標
      无极县| 乡宁县| 阿鲁科尔沁旗| 博客| 盘山县| 周口市| 普定县| 黄山市| 伊吾县| 株洲县| 临江市| 龙胜| 昆山市| 东至县| 环江| 扶余县| 雷州市| 东安县| 新竹市| 侯马市| 京山县| 金华市| 兴山县| 望奎县| 金山区| 新蔡县| 寻乌县| 福清市| 新巴尔虎右旗| 涞源县| 巫山县| 涟水县| 南江县| 通州市| 商南县| 吉隆县| 腾冲县| 赤水市| 宣城市| 建瓯市| 疏附县|