周 攀,謝國富,蔡偉健
(中國直升機設計研究所,江西 景德鎮 333001)
隨著計算機科學與技術的迅猛發展,以及軍事需求的強大推動,虛擬現實技術應運而生。在這些虛擬世界中,傳統的時空法則不再起作用,任何事物都可以通過編程進行模擬。虛擬現實技術是一種包含有可交互虛擬對象的虛擬仿真技術,普遍應用于現代軍用仿真中。
直升機飛行模擬器作為虛擬現實技術的一種典型應用,是指直升機飛行員不需要使用真實的飛機或機場就能獲得合格的飛行技能的訓練系統。模擬器可用于訓練飛行員進行緊急情況或危險情況下的特情處置或新機型的飛行駕駛。飛行模擬器的結構復雜,需要對包括航電儀表、飛行動力學系統、導航系統、天氣系統、運動系統、發動機系統及視景系統在內的幾大實時系統進行精確建模和集成。性能良好的飛行模擬器在沉浸感和交互性方面完全可以滿足直升機飛行員對飛行和訓練的要求,在單兵作戰水平訓練方面作用顯著。
當單兵虛擬戰場環境發展到一定水平后,為了提高訓練效果,建立具有一定規模的多兵種聯合作戰綜合演練環境變得越來越重要。國外對這方面的研究已經達到一定的專業水平,在虛擬戰場環境中進行的仿真訓練范圍相當廣泛,小到飛行員的飛行模擬訓練、地面戰斗車輛操作員的模擬訓練,大到戰斗、戰術和戰役的模擬演練[1]。
隨著我軍現代化水平的提高,一批技術含量較高的先進武器系統,包括直升機,陸續裝配到部隊。這些裝備價格昂貴,系統復雜,操作人員面臨操作步驟繁多、難以迅速掌握的問題,操作稍有不善就有可能導致裝備的損壞,因此開發武器操縱訓練系統便十分必要。在掌握了單臺武器設備的使用后,如何在戰場上配合其他武器聯合作戰才是取得戰場勝利的關鍵點。在此背景下,本文進行了了利用高層體系結構技術(HLA)將多臺直升機飛行模擬器加入到大型分布式仿真環境中的分析和實現,為建立一個包含多型直升機在內的綜合作戰演練環境做鋪墊。
1.1.1 HLA仿真研究
在計算機仿真迅速發展的今天,仿真系統的日益復雜和仿真規模的不斷擴大,使得完全從頭開發一個大型仿真系統變得越來越困難。為了實現各仿真應用的綜合集成,需要建立一個新的體系結構以及一系列新的標準,來實現各種類型的仿真應用之間的互操縱性以及仿真應用與其部件的重用。因此,美國國防部的國防建模與仿真辦公室在1995年10月確立的建模與仿真主計劃DSMP[2]中,提出為國防領域的建模與仿真制定一個通用的技術框架,HLA即是該技術框架的核心。
1.1.2 直升機飛行模擬器研究
直升機飛行模擬器是重要的航空武器裝備論證仿真系統,它是能夠復現直升機及空中環境并可以進行操作的模擬裝置。飛行模擬器飛行安全可靠,可以降低訓練或科研費用并縮短訓練或科研周期。作為飛行訓練和科研設備,飛行模擬器已顯示出了巨大的作用。并且受到世界上許多國家的重視。
飛行模擬器通常由模擬座艙、運動系統、視景系統、計算機系統及教員控制臺等五大部分組成。一個典型的飛行模擬器組成如圖1所示。

圖1 典型的飛行模擬器系統組成
對直升機飛行模擬器的研究已經發展到一定水平,能夠實現對多型號直升機的飛行性能、操縱性能、故障性能、航電儀表及某些作戰性能進行仿真模擬,在仿真沉浸感和交互性方面能夠滿足基本要求。隨著科學技術的發展以及飛行員對仿真訓練效果要求的提高,如何利用現有的資源建立一個復雜的綜合仿真環境變得極為迫切。如果實現不同型號的飛行模擬器仿真互聯,將能夠大大提高模擬器的使用性能和訓練效果,對未來建立多兵種聯合作戰綜合演練環境有著極大的幫助。
HLA是一個開放的、支持面向對象的體系結構,可實現應用系統的即插即用,易于新的仿真系統的集成和管理,并能根據不同的需求實現聯邦的快速組合和重新配置,保證了聯邦范圍內的互操作和重用[3]。HLA不規定對象由什么構成以及對象交互的規則,它考慮的重點是如何實現成員之間的互操作性,即如何將已有的聯邦成員集成為聯邦。這些特點能夠滿足對模擬器仿真互聯的要求,在多臺模擬器仿真互聯系統中,可以將多臺模擬器分別作為一個聯邦成員加入到仿真聯邦中[4],利用HLA的互操縱性實現多臺模擬器互聯的仿真需求。
以兩臺IPT模擬器作為聯邦成員加入到仿真聯邦中(見圖2),各個模擬器聯邦成員的系統組成如下:
1)模擬器A:①仿真管理系統;②飛行仿真系統;③航電仿真系統;④視景系統;⑤教員臺系統;⑥操縱負荷系統。
2)模擬器B:①仿真管理系統;②飛行仿真系統;③航電仿真系統;④視景系統;⑤任務仿真系統;⑥教員臺系統;⑦操縱負荷系統。

圖2 系統整體結構圖
兩臺模擬器均由仿真管理系統、操縱負荷系統、飛行仿真系統、航電系統等組成。HLA不關注各臺模擬器自己的架構,只關注模擬器整體如何作為一個聯邦成員加入到聯邦應用中。軟件采用C++語言編寫,主要包括FDD文件的創建、聯邦的創建與加入、對象類的公布與訂購、對象類屬性的更新與反射等步驟[5]。圖3給出模擬器聯邦成員創建流程圖。
2.2.1 初始化成員數據
圖3中,初始化成員數據主要是創建聯邦數據文件,包括仿真對象模型SOM和聯邦對象模型FOM兩部分。

圖3 模擬器聯邦成員創建流程圖
其中,SOM描述了聯邦成員可以對外公布或需要訂購的對象類、對象類屬性、交互類、交互參數的特性,這些特性反映了聯邦成員在參與聯邦執行時所具有的能力;FOM描述聯邦成員之間的信息交換。聯邦數據文件一半采用XML文件格式,便于數據的解釋與維護。在文件中,用
系統中兩臺模擬器均需識別對方直升機的實時位置、姿態等信息,因此我們在FOM中添加了position對象類,該對象類有6個屬性xPos、yPos、zPos、phi(俯仰角)、theta(橫滾角)、psi(航向角),分別標識各個模擬器相對于基準坐標系的當前位置和飛行姿態信息。
2.2.2 聯邦的創建與加入
在本研究中,我們建立了模擬器A和模擬器B兩個成員。成員之間要通過RTI進行交互,必須首先創建并加入聯邦。在創建聯邦之前,成員首先要連接到RTI,并將Federate Ambassador的地址傳遞給RTI,以便RTI向成員發送回調;然后由第一個成員來創建聯邦并加入,其他成員依次加入聯邦。創建聯邦時需向RTI提供FOM文件。模擬器聯邦成員創建并加入聯邦的關鍵代碼如下文所示。
FederateAmbassador gFederateAmbassador;
RTIAmbassador* rti;
//連接RTI,其中strIp和strPort分別為RTI的IP地址和端口號
try
{
rti = new RTI::RTIAmbassador(&gFedarateAmbassador,strIp,strPort);
}
//創建聯邦
try
{
rti->createFederationExecution(strFederationName,strFDD);
}
//加入聯邦
try
{
rti->joinFederationExecution(strFederateName,strFederationName);
}
2.2.3 對象類的公布與訂購
模擬器A成員要獲取模擬器B成員(簡稱飛機)的位置信息,則模擬器A成員必須訂購我們前面創建的FOM中的position對象類屬性,同時由飛機公布該對象類屬性,并向RTI注冊position對象類實例。成員在公布/訂購對象類屬性時需要先獲取對象類和屬性句柄,飛機公布并注冊對象類屬性的關鍵代碼如下所示。
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");
}
//創建公布對象類屬性句柄集
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 對象類屬性的更新與反射
飛機位置發生變化時,模擬器A成員要監視飛機位置的變化,則需要由飛機成員更新其注冊的plane對象實例屬性,模擬器A成員通過RTI發送的反射對象屬性回調函數,來更新其顯示的飛機位置。飛機成員更新對象屬性的關鍵代碼如下所示。
//飛機成員更新plane對象屬性的代碼
AttributeHandleValueMap theValue;
UserSuppliedTag tag;
//設置屬性值,其中xPos、yPos和zPos為飛機新的位置,phi、theta和psi為飛機新的姿態
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為飛機當前的方向
setValue(tag,&orientR,sizeof(bool));
//更新plane對象實例屬性
try
{
rti->updateAttributeValues(g_hInstance,theValue,tag);
}
在仿真結束后,調用rtiAmb.resignFederationExecution()退出聯邦執行,并調用rtiAmb.destroyFederationExecution()撤銷聯邦執行。至此,完成聯邦成員的創建、加入并退出全過程。
系統采用已研的AC310型綜合程序訓練器和AC311型綜合程序訓練器加入聯邦,并實現2臺模擬器互聯。成員加入示意圖如圖4所示,效果圖如圖5所示。

圖4 模擬器聯邦成員加入示意圖

圖5 模擬器聯邦成員加入效果圖
對每個聯邦成員而言,加入聯邦執行的操作步驟和操作內容都是相似的,所不同的只是它們所公布和訂購的數據信息。因此,我們可以開發一個通用的HLA成員框架來完成這些工作,目的是將這些基本過程封裝起來,以減小編寫成員代碼的工作量,提高聯邦開發效率,也為進一步開發大型的綜合仿真環境帶來了可能。
由于模擬器數量有限,可以將計算機生產兵力CGF模型作為聯邦成員加入到整個聯邦執行中,利用后者出色的戰場環境模擬和計算機兵力生產技術,使大范圍內復雜作戰環境的仿真成為可能。相信隨著仿真技術的發展和模型的不斷完善,直升機模擬器將在飛行訓練和作戰訓練中發揮重要的作用,直升機等其他高精端武器也一定會在未來戰場中發揮更關鍵的作用。
本文所描述的基于HLA的飛行模擬器仿真互聯技術具有很大的發展前景,簡單的聯邦成員加入聯邦執行程序已經在某型軍機效能評估項目中得到了驗證。
我國要想躋身于世界強國之列,就必須要有強大的、現代化的國防力量和軍事威脅手段,這就要求將軍事訓練和戰斗演習作為日常的訓練科目。虛擬戰場以其在軍事訓練演習上特有的科學性、經濟性、對抗性、直觀性、交互性、實時性等諸多優點,為軍隊提供了在新時期實現戰略、戰役、戰術想定演練的有效途徑。這也是我國仿真專業未來的發展需求和方向。