周 攀,謝國富,蔡偉健
(中國直升機設(shè)計研究所,江西 景德鎮(zhèn) 333001)
隨著計算機科學(xué)與技術(shù)的迅猛發(fā)展,以及軍事需求的強大推動,虛擬現(xiàn)實技術(shù)應(yīng)運而生。在這些虛擬世界中,傳統(tǒng)的時空法則不再起作用,任何事物都可以通過編程進(jìn)行模擬。虛擬現(xiàn)實技術(shù)是一種包含有可交互虛擬對象的虛擬仿真技術(shù),普遍應(yīng)用于現(xiàn)代軍用仿真中。
直升機飛行模擬器作為虛擬現(xiàn)實技術(shù)的一種典型應(yīng)用,是指直升機飛行員不需要使用真實的飛機或機場就能獲得合格的飛行技能的訓(xùn)練系統(tǒng)。模擬器可用于訓(xùn)練飛行員進(jìn)行緊急情況或危險情況下的特情處置或新機型的飛行駕駛。飛行模擬器的結(jié)構(gòu)復(fù)雜,需要對包括航電儀表、飛行動力學(xué)系統(tǒng)、導(dǎo)航系統(tǒng)、天氣系統(tǒng)、運動系統(tǒng)、發(fā)動機系統(tǒng)及視景系統(tǒng)在內(nèi)的幾大實時系統(tǒng)進(jìn)行精確建模和集成。性能良好的飛行模擬器在沉浸感和交互性方面完全可以滿足直升機飛行員對飛行和訓(xùn)練的要求,在單兵作戰(zhàn)水平訓(xùn)練方面作用顯著。
當(dāng)單兵虛擬戰(zhàn)場環(huán)境發(fā)展到一定水平后,為了提高訓(xùn)練效果,建立具有一定規(guī)模的多兵種聯(lián)合作戰(zhàn)綜合演練環(huán)境變得越來越重要。國外對這方面的研究已經(jīng)達(dá)到一定的專業(yè)水平,在虛擬戰(zhàn)場環(huán)境中進(jìn)行的仿真訓(xùn)練范圍相當(dāng)廣泛,小到飛行員的飛行模擬訓(xùn)練、地面戰(zhàn)斗車輛操作員的模擬訓(xùn)練,大到戰(zhàn)斗、戰(zhàn)術(shù)和戰(zhàn)役的模擬演練[1]。
隨著我軍現(xiàn)代化水平的提高,一批技術(shù)含量較高的先進(jìn)武器系統(tǒng),包括直升機,陸續(xù)裝配到部隊。這些裝備價格昂貴,系統(tǒng)復(fù)雜,操作人員面臨操作步驟繁多、難以迅速掌握的問題,操作稍有不善就有可能導(dǎo)致裝備的損壞,因此開發(fā)武器操縱訓(xùn)練系統(tǒng)便十分必要。在掌握了單臺武器設(shè)備的使用后,如何在戰(zhàn)場上配合其他武器聯(lián)合作戰(zhàn)才是取得戰(zhàn)場勝利的關(guān)鍵點。在此背景下,本文進(jìn)行了了利用高層體系結(jié)構(gòu)技術(shù)(HLA)將多臺直升機飛行模擬器加入到大型分布式仿真環(huán)境中的分析和實現(xiàn),為建立一個包含多型直升機在內(nèi)的綜合作戰(zhàn)演練環(huán)境做鋪墊。
1.1.1 HLA仿真研究
在計算機仿真迅速發(fā)展的今天,仿真系統(tǒng)的日益復(fù)雜和仿真規(guī)模的不斷擴大,使得完全從頭開發(fā)一個大型仿真系統(tǒng)變得越來越困難。為了實現(xiàn)各仿真應(yīng)用的綜合集成,需要建立一個新的體系結(jié)構(gòu)以及一系列新的標(biāo)準(zhǔn),來實現(xiàn)各種類型的仿真應(yīng)用之間的互操縱性以及仿真應(yīng)用與其部件的重用。因此,美國國防部的國防建模與仿真辦公室在1995年10月確立的建模與仿真主計劃DSMP[2]中,提出為國防領(lǐng)域的建模與仿真制定一個通用的技術(shù)框架,HLA即是該技術(shù)框架的核心。
1.1.2 直升機飛行模擬器研究
直升機飛行模擬器是重要的航空武器裝備論證仿真系統(tǒng),它是能夠復(fù)現(xiàn)直升機及空中環(huán)境并可以進(jìn)行操作的模擬裝置。飛行模擬器飛行安全可靠,可以降低訓(xùn)練或科研費用并縮短訓(xùn)練或科研周期。作為飛行訓(xùn)練和科研設(shè)備,飛行模擬器已顯示出了巨大的作用。并且受到世界上許多國家的重視。
飛行模擬器通常由模擬座艙、運動系統(tǒng)、視景系統(tǒng)、計算機系統(tǒng)及教員控制臺等五大部分組成。一個典型的飛行模擬器組成如圖1所示。
圖1 典型的飛行模擬器系統(tǒng)組成
對直升機飛行模擬器的研究已經(jīng)發(fā)展到一定水平,能夠?qū)崿F(xiàn)對多型號直升機的飛行性能、操縱性能、故障性能、航電儀表及某些作戰(zhàn)性能進(jìn)行仿真模擬,在仿真沉浸感和交互性方面能夠滿足基本要求。隨著科學(xué)技術(shù)的發(fā)展以及飛行員對仿真訓(xùn)練效果要求的提高,如何利用現(xiàn)有的資源建立一個復(fù)雜的綜合仿真環(huán)境變得極為迫切。如果實現(xiàn)不同型號的飛行模擬器仿真互聯(lián),將能夠大大提高模擬器的使用性能和訓(xùn)練效果,對未來建立多兵種聯(lián)合作戰(zhàn)綜合演練環(huán)境有著極大的幫助。
HLA是一個開放的、支持面向?qū)ο蟮捏w系結(jié)構(gòu),可實現(xiàn)應(yīng)用系統(tǒng)的即插即用,易于新的仿真系統(tǒng)的集成和管理,并能根據(jù)不同的需求實現(xiàn)聯(lián)邦的快速組合和重新配置,保證了聯(lián)邦范圍內(nèi)的互操作和重用[3]。HLA不規(guī)定對象由什么構(gòu)成以及對象交互的規(guī)則,它考慮的重點是如何實現(xiàn)成員之間的互操作性,即如何將已有的聯(lián)邦成員集成為聯(lián)邦。這些特點能夠滿足對模擬器仿真互聯(lián)的要求,在多臺模擬器仿真互聯(lián)系統(tǒng)中,可以將多臺模擬器分別作為一個聯(lián)邦成員加入到仿真聯(lián)邦中[4],利用HLA的互操縱性實現(xiàn)多臺模擬器互聯(lián)的仿真需求。
以兩臺IPT模擬器作為聯(lián)邦成員加入到仿真聯(lián)邦中(見圖2),各個模擬器聯(lián)邦成員的系統(tǒng)組成如下:
1)模擬器A:①仿真管理系統(tǒng);②飛行仿真系統(tǒng);③航電仿真系統(tǒng);④視景系統(tǒng);⑤教員臺系統(tǒng);⑥操縱負(fù)荷系統(tǒng)。
2)模擬器B:①仿真管理系統(tǒng);②飛行仿真系統(tǒng);③航電仿真系統(tǒng);④視景系統(tǒng);⑤任務(wù)仿真系統(tǒng);⑥教員臺系統(tǒng);⑦操縱負(fù)荷系統(tǒng)。
圖2 系統(tǒng)整體結(jié)構(gòu)圖
兩臺模擬器均由仿真管理系統(tǒng)、操縱負(fù)荷系統(tǒng)、飛行仿真系統(tǒng)、航電系統(tǒng)等組成。HLA不關(guān)注各臺模擬器自己的架構(gòu),只關(guān)注模擬器整體如何作為一個聯(lián)邦成員加入到聯(lián)邦應(yīng)用中。軟件采用C++語言編寫,主要包括FDD文件的創(chuàng)建、聯(lián)邦的創(chuàng)建與加入、對象類的公布與訂購、對象類屬性的更新與反射等步驟[5]。圖3給出模擬器聯(lián)邦成員創(chuàng)建流程圖。
2.2.1 初始化成員數(shù)據(jù)
圖3中,初始化成員數(shù)據(jù)主要是創(chuàng)建聯(lián)邦數(shù)據(jù)文件,包括仿真對象模型SOM和聯(lián)邦對象模型FOM兩部分。
圖3 模擬器聯(lián)邦成員創(chuàng)建流程圖
其中,SOM描述了聯(lián)邦成員可以對外公布或需要訂購的對象類、對象類屬性、交互類、交互參數(shù)的特性,這些特性反映了聯(lián)邦成員在參與聯(lián)邦執(zhí)行時所具有的能力;FOM描述聯(lián)邦成員之間的信息交換。聯(lián)邦數(shù)據(jù)文件一半采用XML文件格式,便于數(shù)據(jù)的解釋與維護(hù)。在文件中,用
系統(tǒng)中兩臺模擬器均需識別對方直升機的實時位置、姿態(tài)等信息,因此我們在FOM中添加了position對象類,該對象類有6個屬性xPos、yPos、zPos、phi(俯仰角)、theta(橫滾角)、psi(航向角),分別標(biāo)識各個模擬器相對于基準(zhǔn)坐標(biāo)系的當(dāng)前位置和飛行姿態(tài)信息。
2.2.2 聯(lián)邦的創(chuàng)建與加入
在本研究中,我們建立了模擬器A和模擬器B兩個成員。成員之間要通過RTI進(jìn)行交互,必須首先創(chuàng)建并加入聯(lián)邦。在創(chuàng)建聯(lián)邦之前,成員首先要連接到RTI,并將Federate Ambassador的地址傳遞給RTI,以便RTI向成員發(fā)送回調(diào);然后由第一個成員來創(chuàng)建聯(lián)邦并加入,其他成員依次加入聯(lián)邦。創(chuàng)建聯(lián)邦時需向RTI提供FOM文件。模擬器聯(lián)邦成員創(chuàng)建并加入聯(lián)邦的關(guān)鍵代碼如下文所示。
FederateAmbassador gFederateAmbassador;
RTIAmbassador* rti;
//連接RTI,其中strIp和strPort分別為RTI的IP地址和端口號
try
{
rti = new RTI::RTIAmbassador(&gFedarateAmbassador,strIp,strPort);
}
//創(chuàng)建聯(lián)邦
try
{
rti->createFederationExecution(strFederationName,strFDD);
}
//加入聯(lián)邦
try
{
rti->joinFederationExecution(strFederateName,strFederationName);
}
2.2.3 對象類的公布與訂購
模擬器A成員要獲取模擬器B成員(簡稱飛機)的位置信息,則模擬器A成員必須訂購我們前面創(chuàng)建的FOM中的position對象類屬性,同時由飛機公布該對象類屬性,并向RTI注冊position對象類實例。成員在公布/訂購對象類屬性時需要先獲取對象類和屬性句柄,飛機公布并注冊對象類屬性的關(guān)鍵代碼如下所示。
ObjectClassHandle hPlaneClass;
ObjectInstanceHandle g_hInstance;
AttributeHandle g_hxPos;
AttributeHandle g_hyPos;
AttributeHandle g_hzPos;
AttributeHandle g_hphi;
AttributeHandle g_htheta;
AttributeHandle g_hpsi;
//獲取plane對象句柄
try
{
hPlaneClass=rti->getObjectClassHandle("plane");
}
//獲取xPos、yPos、zPos、phi、theta、psi對象類屬性句柄
try
{
g_hxPos=rti->getAttributeHandle(hPlaneClass,"xPos");
g_hyPos=rti->getAttributeHandle(hPlaneClass,"yPos");
g_hzPos=rti->getAttributeHandle(hPlaneClass,"zPos");
g_hphi=rti->getAttributeHandle(hPlaneClass,"phi");
g_htheta=rti->getAttributeHandle(hPlaneClass,"theta");
g_hpsi=rti->getAttributeHandle(hPlaneClass,"psi");
}
//創(chuàng)建公布對象類屬性句柄集
AttributeHandleSet theAttributes;
theAttributes.push_back(g_hxPos);
theAttributes.push_back(g_hyPos);
theAttributes.push_back(g_hzPos);
theAttributes.push_back(g_ hphi);
theAttributes.push_back(g_ htheta);
theAttributes.push_back(g_ hpsi);
//公布對象類屬性xPos、yPos、zPos、phi、theta和psi
try
{
rti->publishObjectClassAttributes(hPlaneClass,theAttributes);
}
//注冊plane對象實例
try
{
g_hInstance = rti->registerObjectInstance(hPlaneClass);
}
2.2.4 對象類屬性的更新與反射
飛機位置發(fā)生變化時,模擬器A成員要監(jiān)視飛機位置的變化,則需要由飛機成員更新其注冊的plane對象實例屬性,模擬器A成員通過RTI發(fā)送的反射對象屬性回調(diào)函數(shù),來更新其顯示的飛機位置。飛機成員更新對象屬性的關(guān)鍵代碼如下所示。
//飛機成員更新plane對象屬性的代碼
AttributeHandleValueMap theValue;
UserSuppliedTag tag;
//設(shè)置屬性值,其中xPos、yPos和zPos為飛機新的位置,phi、theta和psi為飛機新的姿態(tài)
setValue(theValue,g_hxPos,&g_hxPos,sizeof(long));
setValue(theValue,g_hyPos,&g_hyPos,sizeof(long));
setValue(theValue,g_hzPos,&g_hzPos,sizeof(long));
setValue(theValue,g_hphi,&g_hphi,sizeof(long));
setValue(theValue,g_htheta,&g_htheta,sizeof(long));
setValue(theValue,g_hpsi,&g_hpsi,sizeof(long));
//將飛機的方向信息保存在tag中,orientR為飛機當(dāng)前的方向
setValue(tag,&orientR,sizeof(bool));
//更新plane對象實例屬性
try
{
rti->updateAttributeValues(g_hInstance,theValue,tag);
}
在仿真結(jié)束后,調(diào)用rtiAmb.resignFederationExecution()退出聯(lián)邦執(zhí)行,并調(diào)用rtiAmb.destroyFederationExecution()撤銷聯(lián)邦執(zhí)行。至此,完成聯(lián)邦成員的創(chuàng)建、加入并退出全過程。
系統(tǒng)采用已研的AC310型綜合程序訓(xùn)練器和AC311型綜合程序訓(xùn)練器加入聯(lián)邦,并實現(xiàn)2臺模擬器互聯(lián)。成員加入示意圖如圖4所示,效果圖如圖5所示。
圖4 模擬器聯(lián)邦成員加入示意圖
圖5 模擬器聯(lián)邦成員加入效果圖
對每個聯(lián)邦成員而言,加入聯(lián)邦執(zhí)行的操作步驟和操作內(nèi)容都是相似的,所不同的只是它們所公布和訂購的數(shù)據(jù)信息。因此,我們可以開發(fā)一個通用的HLA成員框架來完成這些工作,目的是將這些基本過程封裝起來,以減小編寫成員代碼的工作量,提高聯(lián)邦開發(fā)效率,也為進(jìn)一步開發(fā)大型的綜合仿真環(huán)境帶來了可能。
由于模擬器數(shù)量有限,可以將計算機生產(chǎn)兵力CGF模型作為聯(lián)邦成員加入到整個聯(lián)邦執(zhí)行中,利用后者出色的戰(zhàn)場環(huán)境模擬和計算機兵力生產(chǎn)技術(shù),使大范圍內(nèi)復(fù)雜作戰(zhàn)環(huán)境的仿真成為可能。相信隨著仿真技術(shù)的發(fā)展和模型的不斷完善,直升機模擬器將在飛行訓(xùn)練和作戰(zhàn)訓(xùn)練中發(fā)揮重要的作用,直升機等其他高精端武器也一定會在未來戰(zhàn)場中發(fā)揮更關(guān)鍵的作用。
本文所描述的基于HLA的飛行模擬器仿真互聯(lián)技術(shù)具有很大的發(fā)展前景,簡單的聯(lián)邦成員加入聯(lián)邦執(zhí)行程序已經(jīng)在某型軍機效能評估項目中得到了驗證。
我國要想躋身于世界強國之列,就必須要有強大的、現(xiàn)代化的國防力量和軍事威脅手段,這就要求將軍事訓(xùn)練和戰(zhàn)斗演習(xí)作為日常的訓(xùn)練科目。虛擬戰(zhàn)場以其在軍事訓(xùn)練演習(xí)上特有的科學(xué)性、經(jīng)濟性、對抗性、直觀性、交互性、實時性等諸多優(yōu)點,為軍隊提供了在新時期實現(xiàn)戰(zhàn)略、戰(zhàn)役、戰(zhàn)術(shù)想定演練的有效途徑。這也是我國仿真專業(yè)未來的發(fā)展需求和方向。