應(yīng) 進,潘浩曼,代冀陽,陸 歡
(南昌航空大學(xué) 信息工程學(xué)院,江西 南昌 330063)
對直升機飛行性能的研究和飛行品質(zhì)的評估涉及多門交叉學(xué)科的高、精、尖技術(shù),是國防建設(shè)迫切需要的研究內(nèi)容,而利用飛行仿真平臺進行研究和評估則是一種經(jīng)濟、有效的途徑。目前,飛行仿真平臺[1]在軍事和民用領(lǐng)域都有廣泛的應(yīng)用,它可以安全地重現(xiàn)多種飛機失效狀態(tài),有利于研究人員分析和解決相關(guān)難題。但現(xiàn)有的仿真一般只能提供數(shù)值形態(tài)的計算數(shù)據(jù),不夠直觀,對控制系統(tǒng)中非常見形態(tài)的缺陷很難發(fā)現(xiàn)。針對這些問題,建立更加直觀的三維視景仿真平臺成為直升機飛行仿真的一種發(fā)展趨勢。
筆者在滿足飛控設(shè)計仿真需求的基礎(chǔ)上,開發(fā)了一種Matlab/Simulink環(huán)境下基于FlightGear飛行模擬器軟件的直升機三維視景仿真平臺[2],主要用于直升機各項結(jié)構(gòu)參數(shù)的選取以及飛行性能的設(shè)計、測試和優(yōu)化,通過仿真計算來減少設(shè)計定型時間以及實驗中的風險,全面、直觀地展現(xiàn)直升機控制的總體結(jié)構(gòu)、飛行姿態(tài)信息的變化及各種控制算法的控制效果,為科研人員提供一個科學(xué)、有效的綜合分析工具。
本仿真平臺針對直升機視景仿真的特點[3],自定義通信協(xié)議,使用Matlab/Simulink仿真工具,通過串口UART模塊將直升機飛行姿態(tài)數(shù)據(jù)在Decode_Box模塊內(nèi)部接收并解碼;然后通過數(shù)據(jù)映射公式對數(shù)據(jù)進行處理;在此基礎(chǔ)上,利用Simulink軟件提供的FlightGear飛行模擬器外部數(shù)據(jù)輸入/輸出API[4]接口,即UDP_FlightGear模塊,將飛行姿態(tài)仿真數(shù)據(jù)通過UDP網(wǎng)絡(luò)協(xié)議予以實時傳輸;最終,驅(qū)動FlightGear可視化引擎,實現(xiàn)直升機飛行仿真姿態(tài)數(shù)據(jù)的三維實時可視化顯示[5]?;谏鲜鏊枷霕?gòu)建的仿真平臺總體架構(gòu)如圖1所示。
圖1 視景仿真平臺總體架構(gòu)框圖
針對直升機仿真姿態(tài)數(shù)據(jù)量值多、精度高、更新速度快等固有特點,筆者為本平臺設(shè)計并建立了一套行之有效的通信協(xié)議,在Simulink中采用串入并出的方式實現(xiàn)了仿真數(shù)據(jù)的成功導(dǎo)入。
直升機飛行仿真姿態(tài)數(shù)據(jù)包括:偏航角(Yaw)ψ、俯仰角(Pitch)θ和滾轉(zhuǎn)角(Roll)φ[6]。考慮到仿真的精度要求,每個數(shù)據(jù)采用16位2進制數(shù)據(jù)表示,將Yaw、Pitch、Roll的值分別以高8位Yaw_H、Pitch_H、Roll_H和低8位Yaw_L、Pitch_L、Roll_L的形式存儲。在此基礎(chǔ)上,通過添加數(shù)據(jù)幀頭、幀尾,將數(shù)據(jù)進行有序的編碼,形成自定義通信協(xié)議,系統(tǒng)通過檢測幀頭識別碼定位有效數(shù)據(jù),完成數(shù)據(jù)的傳輸。協(xié)議的幀格式如表1所示。
表1 自定義通信協(xié)議編碼結(jié)構(gòu)
系統(tǒng)采用自定義通信協(xié)議,以串行幀格式數(shù)據(jù)的形式導(dǎo)入數(shù)據(jù)。由于系統(tǒng)對于串行數(shù)據(jù)采集[7]的切入點是隨機出現(xiàn)的,往往不在第0位CC上,所以如果采用一次性讀取0—10共計11個數(shù)據(jù),并將前4位與幀頭識別碼進行比對的解碼方式,會造成解碼效率低下、有效數(shù)據(jù)嚴重丟失、系統(tǒng)實時性變差等不良后果。鑒于此,本平臺采用通過“滑動窗口”高效尋找?guī)^并定位有效數(shù)據(jù)的數(shù)據(jù)幀解碼方法,取得了良好的實際應(yīng)用效果。
該方法可以形象地理解為用一個4孔的窗口“框”在數(shù)據(jù)幀上,通過窗口相對串行數(shù)據(jù)的向右滑動篩選并定位特定的數(shù)據(jù)幀頭識別碼。系統(tǒng)用R0、R1、R2、R3這4個變量保存待檢測串行數(shù)據(jù),并全部初始化為00。假設(shè)系統(tǒng)采樣點不恰好在幀頭,而是位于幀頭前一位,即隨機值0xFF,程序先判斷邏輯表達式:
If(((R0!=0xCC)&&(R1!=0x33)&&(R2!=
0x06)&&(R3!=0xA1)))
在R0=0xCC、R1=0x33、R2=0x06、R3=0xA1不能同時成立的情況下,程序?qū)⑿陆邮盏降臄?shù)據(jù)保存在R3中,并將R3、R2、R1中原來的數(shù)據(jù)保存位置向R0移動一位,而R0中原有數(shù)據(jù)丟棄,由此得到:
R0 = 0x00;
R1 = 0x00;
R2 = 0x00;
R3 = 0xFF;
第二次接收到數(shù)據(jù)后按照上述程序處理方法得到:
R0 = 0x00;
R1 = 0x00;
R2 = 0xFF;
R3 = 0xCC;
……
第四次解碼處理后:
R0 = 0xCC;
R1 = 0x33;
R2 = 0x06;
R3 = 0xA1;
至此,通過“窗口”滑動的方法篩選出幀頭識別碼,高效定位有效數(shù)據(jù)位置。
“滑動窗口”串行幀格式解碼程序部分代碼如下:
……
if( (R0 != 0xCC)&&(R1 != 0x33)&&
(R2 != 0x06)&&(R3 != 0xA1) )
{
R0 = R1;
R1 = R2;
R2 = R3;
R3 = RX_DATA;
Received = 0;
}
else
Received = 1;
……
飛行仿真解碼得到的姿態(tài)數(shù)據(jù)變化范圍如下:
偏航角ψ:0°~360°;
俯仰角θ:-90°~90°;
滾轉(zhuǎn)角φ:-180°~180°。
但是FlightGear視景軟件輸入驅(qū)動數(shù)據(jù)取值范圍[8]數(shù)值較?。?/p>
偏航角ψ:-3.6~3.6;
俯仰角θ:-1.8~1.8;
滾轉(zhuǎn)角φ:-3.6~3.6。
因此,無法直接使用解碼得到的仿真數(shù)據(jù),而需要進行量值的轉(zhuǎn)換,其幅值映射公式如下:
Yaw_FG=(((Yaw_H<<8+Yaw_L)/10)*0.2-3.6)
Pitch_FG=((Pitch_H<<8+Pitch_L)/10)*0.2
Roll_FG=((Row_H<<+Roll_L)/10)*0.2
其中Yaw_FG、Pitch_FG、Roll_FG分別代表FlightGear軟件輸入偏航角、俯仰角、滾轉(zhuǎn)角數(shù)據(jù)。Yaw_H和Yaw_L為依據(jù)上述自定義通信協(xié)議,經(jīng)解碼后得到仿真數(shù)據(jù)偏航角的高8位和低8位[9]。依據(jù)映射公式,將高8位數(shù)據(jù)左移8位后和低8位數(shù)據(jù)做求和運算,得到偏航角數(shù)據(jù),幅值0.0~360.0,精度0.1°。經(jīng)過偏航角數(shù)據(jù)還原,先將數(shù)值縮小10倍,幅值限制在0~36.0,再將得到的值縮小到原來的1/5倍,此時幅值范圍為0.00~7.20,最終通過做差運算減3.6,將偏航角的變化范圍映射到-3.60~3.60之間。同理,通過類似運算轉(zhuǎn)換,將俯仰角變化范圍映射到-1.80~1.80,滾轉(zhuǎn)角變化范圍映射到-3.60~3.60,滿足FlightGear軟件數(shù)據(jù)輸入要求。
FlightGear作為一款優(yōu)秀的開源飛行模擬器[10],為用戶預(yù)留了多種輸入輸出接口,方便用戶對其功能進行擴展。FlightGear的輸入信息為直升機六自由度信息,根據(jù)設(shè)計方案,使用FlightGear飛行模擬器接收外部數(shù)據(jù)驅(qū)動視景模塊,顯示直升機飛行姿態(tài)。作為UDP網(wǎng)絡(luò)通信的一端,需要對FlightGear的網(wǎng)絡(luò)端口進行設(shè)置。
FlightGear飛行模擬器自身具備了完善的網(wǎng)絡(luò)通信能力,只需要在設(shè)置面板上對網(wǎng)絡(luò)通信的參數(shù)進行設(shè)置,即可完成飛行仿真系統(tǒng)的UDP網(wǎng)絡(luò)通信[11]。首先進入FlightGear飛行模擬器的設(shè)置界面,選擇Advanced Options選項,進入選項卡。
在選項卡中選擇Input/Output選項,再選擇native-fdm協(xié)議[12]、UDP通信模式,設(shè)定該協(xié)議為輸出,選擇主機名為仿真軟件設(shè)定的靜態(tài)IP,更新率為20 Hz,指定端口為5000;選擇native-ctrls協(xié)議、UDP通信模式,設(shè)定該協(xié)議為輸入,其余設(shè)置與前面相同。然后點擊“OK”即可完成FlightGear飛行模擬器的網(wǎng)絡(luò)通信設(shè)置。
在解決模塊間通信、姿態(tài)數(shù)據(jù)解碼和姿態(tài)數(shù)據(jù)量值適配的基礎(chǔ)上,以BO105直升機[13]為例,對其動力學(xué)模型相應(yīng)的飛行控制器的控制效果進行驗證,并最終通過FlightGear飛行模擬器三維視景輔以傳統(tǒng)的波形輸出予以展現(xiàn)。系統(tǒng)Simulink工程如圖2所示。
圖2 視景仿真系統(tǒng)Simulink工程
圖3、圖4、圖5分別是視景仿真平臺運行中直升機3D模型在外部飛行姿態(tài)數(shù)據(jù)驅(qū)動下從不同視角的顯示效果。
圖3 直升機3D模型仰視圖
圖4 直升機3D模型側(cè)視圖
圖5 直升機3D模型后視圖
在進行直升機三維顯示的同時,飛行器的姿態(tài)信息還以波形的形式予以輔助呈現(xiàn)。圖6顯示了仿真平臺運行過程中直升機的Yaw、Pitch、Roll飛行姿態(tài)信息。
圖6 直升機俯仰角θ、偏航角Ψ、滾轉(zhuǎn)角φ
在整個仿真過程中,直升機飛行姿態(tài)清晰直觀,再輔以波形顯示,使飛行控制器對飛行器動力學(xué)模型的控制效果得到了很好的展現(xiàn),達到了預(yù)期設(shè)計目標。
本文在Matlab/Simulink環(huán)境下綜合運用多種工具軟件,設(shè)計并實現(xiàn)了一個功能完善的Matlab環(huán)境下基于FlightGear視景的直升機飛控仿真研究平臺。通過BO105直升機的飛行仿真實例表明,本飛控仿真平臺能夠很好地展現(xiàn)飛行仿真中飛行器姿態(tài)信息等相關(guān)數(shù)據(jù),且使用方便、易于維護。此平臺具有很好的擴展性,經(jīng)過修改還可用于車輛、導(dǎo)彈、船舶等視景仿真,有著廣闊的應(yīng)用前景,目前此仿真平臺運行狀態(tài)良好。
[1] 段鏢,嚴峰,賴水清.基于FlightGear的無人直升機飛行控制系統(tǒng)仿真環(huán)境建設(shè)[J].直升機技術(shù),2010,16(4):58-63.
[2] 薛定宇,陳陽泉.基于Matlab/Simulink的系統(tǒng)仿真技術(shù)與應(yīng)用[M].北京:清華大學(xué)出版社,2011.
[3] 于琰平.基于FlightGear的四旋翼無人機三維可視仿真系統(tǒng)研究[D].天津:天津大學(xué),2010.
[4] 蔚海軍.基于FlightGear的直升機飛行模擬系統(tǒng)研究[D].大連:大連理工大學(xué),2008.
[5] 黃華.基于FlightGear模擬器的實時可視化飛行仿真系統(tǒng)[J].系統(tǒng)仿真學(xué)報,2007,19(19):4421-4423.
[6] 劉澤坤,昂海松,羅東明.基于DirectX的無人機實時飛行仿真系統(tǒng)開發(fā)[J].系統(tǒng)仿真學(xué)報,2006,18(4):918-920.
[7] 唐勇.基于FlightGear的A-SMG場面活動三維仿真[J].計算機應(yīng)用,2012,32(11):3228-3231.
[8] 白奕,周克強.基于FlightGear的艦炮武器系統(tǒng)研究[J].計算機仿真,2012,29(12):38-41.
[9] 丁亦農(nóng).Simulink與信號處理[M].北京:北京航空航天大學(xué)出版社,2010.
[10] 張德峰.Matlab/Simulink建模與仿真[M].北京:電子工業(yè)出版社,2009.
[11] Andrei Pavlov.CMOS SRAM Circuit Design and Parame tric Test in Nano-Scaled Teehnologies[M].New York:Springer,2008.
[12] 何濤.基于軟硬件協(xié)同技術(shù)的FPGA測試平臺設(shè)計及測試實現(xiàn)[D].成都:電子科技大學(xué),2009.
[13] Baker R J,Li H W,Boyee D E.CMOS電路設(shè)計、布局與仿真[M].北京:機械工業(yè)出版社,2006.