周 堯
(空軍第一航空學(xué)院,河南 信陽(yáng) 464000)
基于GL Studio的虛擬儀表開(kāi)發(fā)和關(guān)鍵技術(shù)研究
周 堯
(空軍第一航空學(xué)院,河南 信陽(yáng) 464000)
介紹了GL Studio開(kāi)發(fā)平臺(tái)在虛擬儀表設(shè)計(jì)與開(kāi)發(fā)中的關(guān)鍵技術(shù)。應(yīng)用該平臺(tái)設(shè)計(jì)、開(kāi)發(fā)了某型近導(dǎo)指示虛擬儀表,并且對(duì)該虛擬儀表和普通儀表的指示精度作了進(jìn)一步比較。采用虛擬儀表代替普通儀表可以減少誤差的來(lái)源,提高指示精度。
虛擬儀表;GL Studio;驅(qū)動(dòng)程序
虛擬現(xiàn)實(shí)技術(shù)已經(jīng)被廣泛應(yīng)用到軍事、工業(yè)、航空、生活等各個(gè)方面,它是計(jì)算機(jī)技術(shù)與虛擬儀器技術(shù)相結(jié)合的產(chǎn)物,尤其在軍事訓(xùn)練中有著至關(guān)重要的作用。應(yīng)用虛擬現(xiàn)實(shí)技術(shù)構(gòu)建一套全數(shù)字化的虛擬系統(tǒng),可以減少人力物力的投入,節(jié)約資源和成本,減少不必要的損失,并且能夠得到滿(mǎn)意的效果。針對(duì)大型訓(xùn)練系統(tǒng)操作面板大,需要顯示儀表多,邏輯關(guān)系復(fù)雜等問(wèn)題,無(wú)論是使用Open GL還是3D MAX都不能很好地解決建模難度大、組件復(fù)用性差、難以維護(hù)、并且對(duì)計(jì)算機(jī)硬件要求高等缺點(diǎn)。GL tudio是一款專(zhuān)業(yè)的虛擬儀表仿真平臺(tái),它以上手快、開(kāi)發(fā)界面友好、編程要求低、開(kāi)發(fā)效率更高、結(jié)果逼真、復(fù)用性強(qiáng)等優(yōu)點(diǎn)被廣泛應(yīng)用到工程實(shí)踐中。本文介紹GL Studio開(kāi)發(fā)平臺(tái)在虛擬儀表設(shè)計(jì)與開(kāi)發(fā)中的關(guān)鍵技術(shù)。
GL Studio是DISTI公司推出的一款具有獨(dú)立平臺(tái)的快速原型工具,并且它可以在Windows NT、IRIX和Linux操作系統(tǒng)上運(yùn)行。GL Studio工具包括設(shè)計(jì)器和生成器,使用GL Studio設(shè)計(jì)器不需要編程知識(shí),它以所見(jiàn)即所得的方式來(lái)完成儀表面板的制作,通過(guò)在編輯器代碼欄編寫(xiě)簡(jiǎn)單的源代碼來(lái)控制各部件之間的邏輯關(guān)系。代碼生成器把設(shè)計(jì)對(duì)象以C++源代碼的形式生成,具有廣泛的適用性,并且設(shè)計(jì)結(jié)果可以根據(jù)用戶(hù)需要在工程中被創(chuàng)建成可執(zhí)行文件(EXE)、動(dòng)態(tài)鏈接庫(kù)文件(DLL)和ActiveX控件(它可被單獨(dú)使用,也可被植入到其他設(shè)計(jì)中聯(lián)合應(yīng)用),用于完成嵌入式系統(tǒng)的交互仿真。
首先進(jìn)行前期的準(zhǔn)備工作,通常是對(duì)需要仿真的儀表面板的數(shù)碼照片進(jìn)行預(yù)處理,即調(diào)整照片的曝光程度和對(duì)比度等;然后,根據(jù)儀表中各部件的功用,把需要有動(dòng)作響應(yīng)的部件用Photoshop等圖片處理軟件切割下來(lái),再進(jìn)行一定的圖片修復(fù),最終生成GL Studio需要的紋理圖片。GL Studio的開(kāi)發(fā)流程如圖1所示。
圖1 GL Studio的開(kāi)發(fā)流程圖
2.1 紋理生成的關(guān)鍵點(diǎn)
紋理生成的關(guān)鍵點(diǎn)如下:
(1) 生成的紋理圖片格式一定要合適,雖然GL Studio支持多種格式的紋理,如JPEG、TIFF、BMP、PNG等,但是,應(yīng)用PNG格式會(huì)比較有利于后面的處理,因?yàn)镚L Studio在處理貼圖的時(shí)候會(huì)自動(dòng)把紋理的像素調(diào)整為2的n次冪,而PNG格式的圖片正好是以2的n次冪形式存儲(chǔ)的,這樣就可以縮短系統(tǒng)處理時(shí)間,減少繁瑣的調(diào)整。
(2) 要對(duì)儀表實(shí)體的外觀表現(xiàn)有一定的把握,根據(jù)儀表的控制部件和顯示部件的運(yùn)動(dòng)方式對(duì)圖片進(jìn)行合理的分割和布局,再根據(jù)后期儀表邏輯的代碼實(shí)現(xiàn)對(duì)各部件恰當(dāng)?shù)拿?,使得邏輯控制代碼具有較強(qiáng)的可讀性,降低后期開(kāi)發(fā)與維護(hù)的難度。
2.2 邏輯控制與行為事件
儀表的紋理圖片按照GL Studio的要求在編輯器中調(diào)整好大小和位置后,就要對(duì)需要響應(yīng)的控制部件設(shè)置控制邏輯和行為事件。在編輯器的代碼欄設(shè)置變量屬性和初值,根據(jù)GL Studio中提供的庫(kù)函數(shù)設(shè)置動(dòng)作代碼和事件回調(diào)函數(shù)。如指針的旋轉(zhuǎn)需調(diào)用Display Object->DynamicRotate()函數(shù),而且必須在代碼欄頂部的頭文件中包含聲明語(yǔ)句:#include
現(xiàn)以圖2中的幾種事件響應(yīng)模型為例說(shuō)明邏輯控制與行為事件。圖2中,從狀態(tài)1到狀態(tài)2的變化必然有對(duì)應(yīng)的事件響應(yīng)關(guān)系來(lái)控制與之對(duì)應(yīng)的部件的動(dòng)作,其中的開(kāi)關(guān)從狀態(tài)1到狀態(tài)2的變化是鼠標(biāo)事件的響應(yīng),它可能對(duì)應(yīng)一個(gè)設(shè)備的開(kāi)啟和關(guān)閉,也可能對(duì)應(yīng)電路的接通與斷開(kāi),這取決于它的回調(diào)函數(shù)所控制的對(duì)象。當(dāng)鼠標(biāo)左鍵按下,開(kāi)關(guān)和警示燈的狀態(tài)都發(fā)生改變,開(kāi)關(guān)對(duì)象的回調(diào)響應(yīng)函數(shù)如下:
ON_MOUSE_DOWN(MOUSE_LBUTTON)
{
if (self-> State ( ) = =1) // self指開(kāi)關(guān)對(duì)象
{
Indicator->State(1); // Indicator指開(kāi)關(guān)下面的警示燈對(duì)象
self -> State(2);
}
else
{
self->State(1);
Indicator->State(0);
}
return 1;
}
return 0 ;
圖2 幾種事件響應(yīng)模型
2.3 驅(qū)動(dòng)原理
由于實(shí)際控制面板上的儀表是機(jī)械儀表,其指針是在伺服電動(dòng)機(jī)和測(cè)速發(fā)電機(jī)的共同作用下轉(zhuǎn)動(dòng)的。假設(shè)儀表內(nèi)部的正余弦接收機(jī)接收來(lái)自慣導(dǎo)的即時(shí)航向正余弦輸入信號(hào),該信號(hào)分別送給正余弦信號(hào)接收機(jī)TpB1和用于檢測(cè)當(dāng)前航向的正余弦信號(hào)接收機(jī)TpB2。TpB1正余弦接收機(jī)轉(zhuǎn)子產(chǎn)生與當(dāng)前航向成正比的失調(diào)信號(hào),該信號(hào)經(jīng)過(guò)放大后進(jìn)入電動(dòng)機(jī)的控制繞組,電機(jī)開(kāi)始工作,經(jīng)減速器帶動(dòng)2個(gè)正余弦信號(hào)接收機(jī)TpB1、TpB2的轉(zhuǎn)子轉(zhuǎn)動(dòng),直到能量釋放完畢停止。
虛擬面板上所有的動(dòng)作都是通過(guò)數(shù)字信號(hào)來(lái)驅(qū)動(dòng)的,例如指針的轉(zhuǎn)動(dòng)是通過(guò)GL Studio的函數(shù)實(shí)現(xiàn)的,而函數(shù)的參數(shù)則是通過(guò)數(shù)字量和角度之間的對(duì)應(yīng)關(guān)系編寫(xiě)程序解算得到的,其中數(shù)字量是通過(guò)計(jì)算機(jī)運(yùn)算處理直接得到的結(jié)果。
2.4 GL Studio驅(qū)動(dòng)程序
GL Studio的庫(kù)函數(shù)提供了一系列的驅(qū)動(dòng)方法,以滿(mǎn)足用戶(hù)所期望的事件響應(yīng)動(dòng)作。在變量初始化以后,對(duì)函數(shù)進(jìn)行聲明和定義,并且編寫(xiě)驅(qū)動(dòng)程序,用于測(cè)試對(duì)象的動(dòng)作響應(yīng)是否正確?,F(xiàn)以某型近導(dǎo)指示器為例說(shuō)明系統(tǒng)的測(cè)試驅(qū)動(dòng)程序。在測(cè)試函數(shù)TestValues ( )中寫(xiě)入對(duì)象的測(cè)試方法:
SetAngle_HJ_Giv (angle_hj_giv); //設(shè)置給定航向角
SetRange (TestVal_2); //設(shè)置到航路點(diǎn)的距離
SetBiaoGan (TestVal_1); //設(shè)置標(biāo)桿動(dòng)作
SetAngle_HX_Giv (angle_hx_giv); //設(shè)置給定航向
……
……
……
SetAngle_HX_Current (angle_hx_current) ; //設(shè)置當(dāng)前航向
SetAngle_HX_DT (angle_hx_dt); //設(shè)置電臺(tái)航向
其中,左邊旋鈕的事件回調(diào)函數(shù)部分代碼如下:
ON_MOUSE_DOWN(MOUSE_LBUTTON)
……
……//坐標(biāo)的變換
if ((ev->eventType==EVENT_MOUSE) &&
((ev->eventSubtype==MOUSE_DRAG) ||(ev->eventSubtype==MOUSE_DOWN)))
// 如果是鼠標(biāo)事件并且鼠標(biāo)按下或者拖拽
就會(huì)有以下動(dòng)作
{
static float angle_hxPerDeg = 18.0f / 180.0f;
float deltaAngle = self-> RelativeAngle (mev->lx,mev->ly) - self->RelativeAngle(_knobDownPos.x,_knobDownPos.y) ;
if (deltaAngle < -180.0f )
deltaAngle += 360.0f ;
else if (deltaAngle > 180.0f )
deltaAngle -= 360.0f ;
float delta_angle_hx = deltaAngle * angle_hxPerDeg;
angle_hx_giv += delta_angle_hx;
Lknob->DynamicRotateRelative (deltaAngle , Z_AXIS); // 旋鈕繞Z軸旋轉(zhuǎn)角度deltaAngle
……
}
return 0 ;
由于GL Studio和Windows的坐標(biāo)原點(diǎn)不在同一點(diǎn),GL Studio的原點(diǎn)在左下角,而Windows的原點(diǎn)在左上角,因此首先要進(jìn)行坐標(biāo)的變換,從而保證后續(xù)動(dòng)作的正確性。
在Class Methods下的Calculate代碼欄中寫(xiě)入以下代碼:TestValues(time),用來(lái)調(diào)用測(cè)試函數(shù)。仿真結(jié)果如圖3所示,測(cè)試結(jié)果表明虛擬仿真儀表能夠比較精確地指示傳輸給它的信號(hào)量。
當(dāng)完成了虛擬儀表的測(cè)試工作以后,就需要把虛擬儀表和真實(shí)儀表的性能進(jìn)行實(shí)驗(yàn)對(duì)比。
2.5 測(cè)試與對(duì)比
在導(dǎo)航系統(tǒng)中,導(dǎo)航數(shù)據(jù)的獲取需要以下步驟:接收機(jī)天線接收無(wú)線電信號(hào),信號(hào)再經(jīng)過(guò)譯碼電路進(jìn)行變頻、檢波、譯碼得到并行單極性碼,這樣的碼字不能被導(dǎo)航計(jì)算機(jī)直接使用,而要經(jīng)過(guò)代碼轉(zhuǎn)換裝置變成串行雙極性碼才能被使用。總之,計(jì)算機(jī)只能處理數(shù)字信號(hào),但機(jī)械儀表是通過(guò)正余弦電壓模擬信號(hào)來(lái)驅(qū)動(dòng)的,所以經(jīng)過(guò)一系列代碼轉(zhuǎn)換之后還要再轉(zhuǎn)換成正余弦信號(hào)才能驅(qū)動(dòng)儀表指針轉(zhuǎn)動(dòng)指示。
而虛擬儀表就是在計(jì)算機(jī)軟件平臺(tái)上開(kāi)發(fā)出來(lái)的,所以它可以直接處理數(shù)字信號(hào),這樣就在原理上減少了一定的轉(zhuǎn)換誤差。我們把基于GL Studio開(kāi)發(fā)的某型近距導(dǎo)航指示器應(yīng)用到實(shí)際導(dǎo)航系統(tǒng)中與原有機(jī)械指示器作了測(cè)試和對(duì)比。由于某型近距導(dǎo)航指示器指示的信息量很大,這里以當(dāng)前航向信號(hào)為例,對(duì)比指示結(jié)果,如表1所示。當(dāng)前航向測(cè)試值分別為210°和280°時(shí)的指示情況對(duì)比如圖4所示(儀表中最上面的白色指針在內(nèi)刻度盤(pán)上的讀數(shù)乘以10就是當(dāng)前航向角度)。
圖3 某型近距導(dǎo)航指示器仿真結(jié)果
表1 當(dāng)前航向測(cè)試對(duì)比 (°)
2.6 結(jié)果分析
從圖4中可以看出實(shí)際儀表和仿真儀表的指示結(jié)果都會(huì)和給定數(shù)據(jù)存在一定的誤差,由于它們的讀數(shù)要放大10倍,則它的誤差也就會(huì)被放大10倍。經(jīng)過(guò)對(duì)比,實(shí)際儀表要比虛擬儀表的指示誤差大大約1°。雖然它們都有誤差,但誤差大小不同,誤差來(lái)源也不同。實(shí)際儀表由于設(shè)計(jì)和工藝條件的限制,數(shù)據(jù)顯示不會(huì)像
理想中那么精確,總會(huì)存在一定誤差,主要是來(lái)自在數(shù)模轉(zhuǎn)換過(guò)程中由于轉(zhuǎn)換精度不能達(dá)到理想值而造成的轉(zhuǎn)換誤差和使用時(shí)間的增長(zhǎng)、老化、磨損造成的機(jī)械誤差。雖然進(jìn)行了原邊補(bǔ)償和副邊補(bǔ)償,但還是不能得到無(wú)誤差顯示。
圖4 輸出結(jié)果截圖對(duì)比
虛擬儀表是基于計(jì)算機(jī)軟件技術(shù)平臺(tái)開(kāi)發(fā)的儀表,并且一般會(huì)應(yīng)用到計(jì)算機(jī)數(shù)字系統(tǒng)中,用來(lái)完成虛擬指示功能。它可以作為計(jì)算機(jī)系統(tǒng)終端直接把經(jīng)過(guò)處理的數(shù)據(jù)無(wú)誤差顯示,不需要經(jīng)過(guò)數(shù)?;蛘吣?shù)轉(zhuǎn)換,從而減少了轉(zhuǎn)換誤差。因此,虛擬儀表可以代替實(shí)際儀表完成它的功能,甚至能夠達(dá)到更好的效果。
目前,虛擬儀表技術(shù)已經(jīng)逐漸應(yīng)用到各個(gè)行業(yè)的生產(chǎn)生活中,它以投資少、見(jiàn)效快的優(yōu)點(diǎn)被工程設(shè)計(jì)人員所接受。使用專(zhuān)業(yè)的儀表仿真平臺(tái)GL Studio能夠使開(kāi)發(fā)人員快速掌握系統(tǒng)開(kāi)發(fā)流程和關(guān)鍵技術(shù),高效地開(kāi)發(fā)出指示精確、耐用、移植性強(qiáng)的虛擬仿真系統(tǒng)。因此,基于GL Studio的虛擬儀表開(kāi)發(fā)技術(shù)具有一定的實(shí)用性和先進(jìn)性。
[1] 于輝,趙經(jīng)成.GL Studio虛擬儀表技術(shù)應(yīng)用與系統(tǒng)開(kāi)發(fā)[M].北京:國(guó)防工業(yè)出版社,2010.
[2] 黃新淵.虛擬現(xiàn)實(shí)技術(shù)及應(yīng)用[M].北京:科學(xué)出版社,1999.
[3] 張文,朱元昌,樊世友,等.GL Studio及其在雷達(dá)面板仿真中的應(yīng)用[J].測(cè)控技術(shù),2002(12):50-52.
[4] 趙勃.數(shù)字/旋變轉(zhuǎn)換器接口電路及控制軟件設(shè)計(jì)[J].彈箭與制導(dǎo)學(xué)報(bào),2004(11):284-286.
[5] 袁梅,白剛,陳炅.虛擬多功能顯示系統(tǒng)設(shè)計(jì)[J].系統(tǒng)仿真學(xué)報(bào),2006,18(6):1578-1581.
Design and Simulation of Virtual Instruments Based on GL Studio
ZHOU Yao
(The First Aviation University of Air Force, Xinyang 464000, China)
The key technology of virtual instrument design and simulation based on GL Studio is introduced in this paper, and a Short-Rang-Navigation instrument is developed. The instruction accuracy of virtual instrument is compared with that of ordinary instrument. The virtual instrument instead of ordinary instrument can reduce error sources, improve instruction precision.
virtual instruments; GL studio; driver
1672- 6413(2015)06- 0075- 03
2015- 08- 17;
2015- 09- 20
周堯(1985-),男,陜西戶(hù)縣人,講師,碩士,主要從事飛行控制系統(tǒng)研究。
TP391.9∶TP216
A