錢偉
本文介紹了無人機三維顯示需求,介紹了Flightgear軟件的功能和使用特點,建立了無人機數(shù)字仿真模型,并基于仿真模型和Flightgear軟件,采用udp網(wǎng)絡(luò)通訊協(xié)議建立了二者之間的連接,將無人機仿真數(shù)據(jù)實時傳輸?shù)紽lightgear軟件,驅(qū)動Flightgear中無人機模型、場景模型等的實時運行,完成無人機的三維實時顯示工作。
無人機在試飛之前需要對各個系統(tǒng)部件進行大量的測試和仿真,以檢測系統(tǒng)的控制部分的極性、邏輯、量值等等,但是有時實驗室測試并不直觀,容易使人忽略重要的細節(jié)。例如,某型無人機在地面測試時一切正常,但在起飛后全自主飛行過程中,發(fā)生了一加自主飛行功能就向北飛的現(xiàn)象。發(fā)生這一現(xiàn)象的原因是程序員在設(shè)計航路時,將無人機所用磁航向傳感器的單位弄錯,弧度當成了角度。最終雖然依靠人工手動將其控制返航,依然表明了傳統(tǒng)的測試存在盲區(qū)。如果能加入仿真的實時顯示功能,將無人機沿著航路模擬飛行的經(jīng)緯度高度、速度、姿態(tài)角、實時舵面值等,以以無人機三維運動的形式直觀地反映出來,可使系統(tǒng)測試人員直接看到無人機能否完成航路、是否存在問題。Flightgear軟件是一款開源飛行軟件,內(nèi)部集成了多款飛機模型數(shù)據(jù),具有良好的人機界面,容易進行二次開發(fā),并可接收外部傳送過來的飛行動力學(xué)數(shù)據(jù)進行飛行,是無人機全數(shù)字仿真和地面測試階段三維顯示的較好選擇。
無人機三維顯示需求
目前我們的無人機無論是進行實驗室仿真或外場飛行試驗,一般都能拿到較為準確、實時性也較強的遙測數(shù)據(jù),這些數(shù)據(jù)包括無人機系統(tǒng)飛行的各種信息,如GPS經(jīng)緯度、高度等定位信息;無人機俯仰角、滾轉(zhuǎn)角等姿態(tài)角信息;三軸加速度信息、舵面控制量及反饋量信息等等。按照以往經(jīng)驗,有了這些信息,如需對無人機的飛行性能進行分析,可以對各路信息分別匯總,繪出曲線,即能較直觀地看出參數(shù)的數(shù)值走向和有無異常等。有時也需要視頻信息,以記錄那些測試數(shù)據(jù)測試不到的細節(jié),則要另外增加價格昂貴的高清長焦攝像機,但攝像機也存在無法拍到或拍攝不清晰的問題,且有時從成百上千幀視頻圖像中也難以找到有用線索。
Flightgear軟件介紹
自從David于1997年發(fā)布了Flightgear軟件第一個跨平臺版本之后,從最初比較粗糙的空氣動力學(xué)模型開始,逐漸增加了更多的特性如環(huán)境特性、跑道特性、場景特效、屏幕顯示、儀表臺、導(dǎo)航塔臺系統(tǒng)和網(wǎng)絡(luò)互聯(lián)以及串口互聯(lián)等,也支持多機編隊飛行和多人空中對戰(zhàn)模式,更突出的是,此軟件為開源軟件,用戶可以自行定義通訊協(xié)議、飛機模型、顯示模式等,可以添加自己繪制的飛機模型進行飛行,動力學(xué)模型可采用系統(tǒng)自帶也可自己編寫,并通過matlab-simulink軟件或者其他仿真軟件與Flightgear進行實時交互,驅(qū)動飛機模型的飛行。該軟件具有跨平臺、多場景、開放性等特點,擴展性特別強,且對計算機和顯卡的要求不高,一般計算機的集成顯卡即可滿足要求。Flightgear軟件部分特點如下:
飛行動力學(xué)模型
Flightgear在3個主要的飛行動力學(xué)模型之間選擇,可以添加新的動力學(xué)模型,甚至接入外部“專有的”飛行動力學(xué)模型:
JSBSim:JSBSim是一個開源飛行動力學(xué)模型(FDM)軟件庫,用于對飛行器的飛行動力學(xué)進行建模,用C + +編寫。JSBSim可以在獨立模式下批處理運行,飛機模型以XML文件配置,其中包括飛機的質(zhì)量平衡、空氣動力學(xué)、飛行控制屬性、大氣模型等。
YASim:YASim模型使用飛機的幾何形狀來生成基礎(chǔ)飛行特性,可快速構(gòu)建飛機行為,無需所有傳統(tǒng)的氣動試驗數(shù)據(jù),是一種粗略的近似,在得到接近現(xiàn)實的結(jié)果之前,需要進行很多調(diào)整。如果飛機有可靠的飛行數(shù)據(jù),例如風(fēng)洞數(shù)據(jù),或者希望最終生成逼真的模擬,那么JSBSim是更好的方法。但是如果缺乏這樣的數(shù)據(jù),又知道飛機的幾何形狀,并且能夠像真正的飛行員那樣訪問相同的飛行特性和極限,那么YASim提供了一種解決方案,這對于大多數(shù)仿真需求來說已經(jīng)足夠了。
UIUC:這個飛行動態(tài)模型是基于 LaRCsim,最初是美國國家宇航局寫的。通過使用飛行器配置文件來擴充代碼。.UIUC使用查表法來檢索飛機部件的氣動力和力矩系數(shù),然后用這些系數(shù)來計算力和力矩作用在飛機上的總和。
全面而精確的地景風(fēng)景數(shù)據(jù)庫
數(shù)據(jù)庫包含超過20,000個真實地景的世界機場。具有和現(xiàn)實相同的跑道、跑道標志、位置和進近燈光。也適用于較大的機場滑行道(在適當?shù)臅r候甚至包括綠色中線燈)和傾斜跑道。定向機場照明能成功地改變強度及操作者相對方向變化。
準確和全面的天空模型
Flightgear軟件可以實現(xiàn)精確的時間跟蹤,并基于當前時間正確的放置太陽、月亮相對于當前地球坐標的位置。例如當前時間和地點是黎明的成都,那么太陽、月亮、星星和行星等在天空中都遵循正確的相對位置。這個建??紤]季節(jié)性影響,使用24小時制,甚至在北極圈以北,也放置太陽與月球的正確位置,給人以身臨其境的感覺。
靈活和開放的飛機建模系統(tǒng)
Flightgear具有模擬各種飛行器的能力??梢阅M飛行1903年萊特飛行器、“撲翼”飛行器、飛艇、波音747和空客A320飛機,以及各種軍用飛機等,F(xiàn)lightgear具有模擬幾乎一切飛機的能力。Flightgear的飛行環(huán)境也很完備,飛機設(shè)計師可以打造逼真、具有完美動態(tài)效果、完全互動的3D駕駛艙。Flightgear還可以準確模擬許多儀器和系統(tǒng)故障,例如Gps故障、大氣傳感器故障等。如果設(shè)置故障,則飛機會根據(jù)故障進行相應(yīng)的動作。
低廉的硬件要求
Flightgear著眼現(xiàn)實仿真等方面的研究,但是軟件本身對電腦硬件的需求并不強。如果你的電腦配置非常好,你會的到更加好的視覺效果,但是如果你的電腦配置一般,雖然視覺效果不會特別好,但是你同樣可以得到一個非常流暢的飛行感受。
內(nèi)部特征
Flightgear允許用戶和飛機設(shè)計師通過內(nèi)部和外部訪問機制獲取大量的內(nèi)部狀態(tài)變量。這些狀態(tài)變量被組織成一個方便的層次“屬性”樹。使用屬性樹可以監(jiān)視Flightgear內(nèi)部任何狀態(tài)變量。可以從外部腳本遠程控制Flightgear的運行??梢詢H通過編輯一個少數(shù)人可讀的配置文件來創(chuàng)建模型動畫、音效、動畫工具和網(wǎng)絡(luò)協(xié)議等任何能想到的情況。這是一個功能強大的系統(tǒng),使Flightgear更加靈活、可配置、適應(yīng)性更強。
通訊
通用輸入/輸出選項允許用戶自己定義輸入輸出協(xié)議文件,選擇采用串口或網(wǎng)絡(luò)客戶端。如果所有實例正在運行在同一幀率,可以得到非常好的互相之間的緊密同步顯示??梢允褂肍lightGear在局域網(wǎng)進行多機聯(lián)網(wǎng)通訊,練習(xí)編隊飛行或?qū)?zhàn)仿真等。
無人機全數(shù)字仿真環(huán)境與Udp通訊
無人機全數(shù)字仿真
依據(jù)無人機風(fēng)洞數(shù)據(jù)建立了無人機的數(shù)學(xué)模型,基于4階龍格庫塔方法對建立的無人機12階微分方程進行解算,基于vsc++2010建立仿真和控制界面,基于Udp實現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)傳輸,實現(xiàn)無人機仿真模型與Flightgear軟件的數(shù)據(jù)發(fā)送。無人機仿真原理如圖1所示,曲線顯示界面如圖2所示,三維顯示界面如圖3所示。
Udp通訊傳輸
Udp通訊屬于tcp/ip通訊協(xié)議的一種,支持大數(shù)據(jù)量的傳輸,比較適合對實時性要求不高強、對數(shù)據(jù)準確性要求不高但數(shù)據(jù)量很大的場合。我們的全數(shù)字仿真系統(tǒng)所用的三維顯示對實時性要求并不特別強,但是數(shù)據(jù)量較大,因此采用Udp協(xié)議進行通訊傳輸。通信模塊分為客戶端和服務(wù)器端,客戶端和服務(wù)器端可以部署于同一臺機器,也可以部署到不同的機器上。在網(wǎng)絡(luò)中進行通信至少需要一對套接字,其中之一運行于客戶端,稱之為Clientsocket;另一個運行于服務(wù)器端,稱之為Serversocket。由于本機只向Flightgear傳送數(shù)據(jù),不接收其發(fā)回的數(shù)據(jù),因此僅編寫客戶端程序即可。
Udp客戶端程序在vc++2010中的設(shè)計流程為:
(1) 調(diào)用socket()方法創(chuàng)建一個數(shù)據(jù)報套接字(SOCK_DGRAM);
(2) 獲取無人機的飛行數(shù)據(jù),按照數(shù)據(jù)結(jié)構(gòu)進行編組;
(3) 數(shù)據(jù)發(fā)送至服務(wù)器;
(4) 停止仿真時關(guān)閉數(shù)據(jù)報。
基于仿真系統(tǒng)的udp傳輸
軟件部分發(fā)送代碼如下:
Socket初始化:
voidctrlDlg::ToFlightgear()
{ //SOCKET初始化
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
return; }
if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE(wsaData.wVersion ) != 1 ) {
WSACleanup( );
return; }
SOCKET sockClient=socket (AF_INET,SOCK_DGRAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=inet_addr("192.168.1.255");//
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons (5500);
數(shù)據(jù)編組:
FGNetDatafgbuf;
fgbuf.version=FG_NET_FDM_VERSION; // increment when data values change
fgbuf.padding=0; // padding
// Positions
fgbuf.longitude=show_y[num_showxy-1]/57.3; // geodetic (radians)
fgbuf.latitude=show_x[num_showxy-1]/57.3; // geodetic (radians)
fgbuf.altitude=-h; // above sea level (meters)
//fgbuf.altitude=300.0; // above sea level (meters)
fgbuf.agl=-h; // above ground level (meters)
fgbuf.phi=(float)phi; // roll (radians)
fgbuf.theta=(float)theta; // pitch (radians)
fgbuf.psi=(float)psi; // yaw or true heading (radians)
...}
數(shù)據(jù)發(fā)送:
sendto(sockClient,(char*)(&fgbuf),length,0,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
關(guān)閉socket:
closesocket(sockClient);
WSACleanup();
數(shù)據(jù)回放的三維顯示
從上面的介紹可以看出,F(xiàn)lightgear軟件可以通過Udp進行數(shù)據(jù)驅(qū)動。對于仿真時保存的數(shù)據(jù)或?qū)嶋H飛行過程生成的遙測數(shù)據(jù),只要按照相關(guān)的通訊協(xié)議和相應(yīng)的時間間隔傳輸?shù)紽lightgear,同樣可以驅(qū)動Flightgear軟件中飛機的三維顯示,這里不再詳細介紹。
Flightgear軟件的通訊接口設(shè)置
Flightgear軟件設(shè)置
通訊接口采用Udp協(xié)議,在Flightgear軟件上的設(shè)置如圖4所示。
其中,flightmodel界面的動力學(xué)模型設(shè)置為external,意為采用外部傳過來的模型,而不采用軟件自帶的動力學(xué)模型;
傳輸協(xié)議界面,首先點擊new,新建傳輸協(xié)議,然后依次將Protocol設(shè)置為nativefdm,Medium設(shè)置為socket,Direction設(shè)置為in,Hz取5,端口選擇5500,選擇UDP模式。按上述步驟設(shè)置完成后,F(xiàn)lightgear軟件就準備就緒。點擊run按鈕進入運行界面,等待外部信息的傳入。
接口協(xié)議
Udp協(xié)議需要按照一定的數(shù)據(jù)格式進行傳輸,共28個變量,408個字節(jié)長度。典型的傳輸變量見表1。這些變量能夠滿足三維顯示的需求。如需對飛機座艙進行數(shù)據(jù)顯示,還可以將東向、北向、天向速度、加速度以及三軸角速度等進行傳輸。由于我們的仿真為無人機仿真,不需要座艙顯示,因此速度信息并未傳輸。為了直觀,加入了舵面的顯示,當無人機進行左右轉(zhuǎn)彎或者爬升以及下滑時,可以清晰地看到舵面的動作。
結(jié)論
以往的影像數(shù)據(jù)多來自于攝像機,雖然攝像機足夠高清,但當飛機飛行速度增加時,無法顯示滿足要求的高清影像,當需要觀看動態(tài)實況時,由于缺少相應(yīng)手段,只能對遙測數(shù)據(jù)逐個分析,不便于形成整體概念。相比以往外場飛行或飛行后缺少相應(yīng)的三維影像的情況,仿真和回放數(shù)據(jù)能提供接近真實狀態(tài)的實時影像。因此,從某種程度上來說,本文提供了一種額外的視景手段,通過三維實時軟件,可以直觀地看到飛機運行時的狀態(tài)。