朱日楠,王 彪,楊姍姍,李宏成,王 健
(南京航空航天大學自動化學院,南京 211106)
近年來,飛行可視化開發(fā)大致可分為兩大方式:①利用三維渲染引擎進行飛行可視化仿真[1-2],如OpenGL、Direct3D、Vega 等;②利用飛行模擬軟件進行飛行可視化仿真[3-4],如FlightGear 等。前者需編寫大量底層代碼實現(xiàn)三維建模與渲染,開發(fā)環(huán)節(jié)眾多且繁瑣。后者僅通過自身無法實現(xiàn)個性化場景開發(fā)以及擁有復雜邏輯結(jié)構(gòu)的UI開發(fā)。
Unity3D是一款近年來逐步被應(yīng)用于可視化仿真開發(fā)的游戲開發(fā)引擎。對于飛行可視化仿真而言,它擁有諸多上述方式無法比擬的優(yōu)勢。利用自身組件,如地形模塊、天空盒子、碰撞檢測器、射線探測器、攝像機等,可逼真復現(xiàn)不同場景中機場起降、艦機著艦、地形跟隨、視覺導引等眾多飛控領(lǐng)域的研究。Unity3D可將飛控仿真的各個環(huán)節(jié)集成于自身之中,因此本文采用Unity3D進行飛行控制可視化開發(fā)。
飛行器物理模型解算是飛行控制仿真中的一大重要環(huán)節(jié)。目前,利用Unity3D 進行飛控仿真主要有3種方式進行模型解算。①Unity3D 中調(diào)用自編程序進行模型解算[5-6]。該方式需自行編寫數(shù)值積分程序,開發(fā)難度大,且計算結(jié)果的準確性無法與成熟的數(shù)值計算軟件比擬。②利用Matlab 進行物理模型解算[7],將計算后的位姿信息發(fā)送給Unity3D,使Unity3D中的飛機造型進行相應(yīng)的位姿變化。該方式可精確計算物理模型,但仍有一大缺陷。由于Unity3D 動畫幀更新速率受計算機實時負載影響而不斷變化,Unity3D 定步長接收到的位姿信息無法在相同時間間隔內(nèi)展示在動畫中,使畫面中的飛機造型出現(xiàn)卡頓、震顫等現(xiàn)象,對于高速飛行器,該現(xiàn)象尤為明顯。③利用Unity3D自帶的物理引擎進行數(shù)值積分運算。使用該方式開發(fā)時,開發(fā)者只需在Unity3D中對物體施加力與力矩,即可使物體表現(xiàn)出與現(xiàn)實世界相似的物理行為。據(jù)此,對Unity3D飛行器造型添加動力學模型即可使其按照相關(guān)力學特性進行飛行運動,無須添加運動學模型。該方式將物理模型與仿真場景、飛行器造型均集成在Unity3D內(nèi)部,開發(fā)便捷、仿真結(jié)果可靠。本文采用第3 種方式進行本系統(tǒng)的開發(fā)。
考慮到飛行器六自由度運動的特點以及教學條件,為了能較好演示飛行器飛行時三軸位移與三軸姿態(tài)角變化情況,并且避免實驗設(shè)備占用過多室內(nèi)空間,本文選用Acrome桌面式六自由度運動平臺展示飛機位姿,使之與視景動畫中的飛機位姿隨動。
考慮到本科學生工程運用能力與教學安全問題,本文不采用實物仿真方式進行開發(fā)。從數(shù)值仿真角度進行飛行控制可視化開發(fā)是本文的重點。此外,本文結(jié)合航模機、運動模擬臺、操縱桿等硬件構(gòu)成半物理仿真系統(tǒng),通過實物演示飛機飛行時的姿態(tài)變化以及執(zhí)行機構(gòu)作動情況,以增強學生對相關(guān)知識的直觀理解。
航模機用于演示仿真過程中飛機的舵面與螺旋槳作動狀態(tài)。由于本系統(tǒng)面向本科教學,故優(yōu)先選擇常規(guī)氣動布局的單垂尾固定翼航模機作為演示對象。本文的飛行控制仿真系統(tǒng)結(jié)構(gòu)如圖1 所示。
圖1 飛行控制仿真系統(tǒng)結(jié)構(gòu)框圖
本文選擇文獻[8]中的固定翼飛行器數(shù)學模型作為本仿真系統(tǒng)所用的飛機模型,該模型在常規(guī)坐標系(NED)下建立。根據(jù)前文Unity3D 物理引擎的特點,該環(huán)節(jié)只需在Unity3D中完成飛行器運動過程中力與力矩的計算并添加至對應(yīng)機體軸上即可。Unity3D 物理模型解算受開發(fā)者設(shè)置的物理參數(shù)影響,其中飛行器角速率解算時受飛機慣性張量矩陣J影響,
式中:J-1為飛行器慣性張量矩陣的逆矩陣;p、q、r與分別為機體角速率與機體軸向氣動力矩;Jx、Jy、Jz分別為慣性張量矩陣對角線元素(繞著機體軸旋轉(zhuǎn)的轉(zhuǎn)動慣量);Jxz為慣性張量矩陣非對角線元素(飛行器慣性積)之一。
轉(zhuǎn)動慣量大小可在Unity3D 中設(shè)置[9],但對于慣性積,Unity3D未提供設(shè)置選項,因此模型解算時無法引入慣性積的影響,這將使Unity3D 模型與原模型產(chǎn)生差異,故為了消除該影響,需對力矩計算公式進行修正,使修正后的公式包含慣性積環(huán)節(jié)。力矩修正公式如下:
由于力的計算公式不涉及慣性積,故無需修正。將力與修正后的力矩施加在機體軸上即可使Unity3D飛機造型進行飛行運動。
力與力矩公式中需要的狀態(tài)參數(shù)可由Unity3D提供的相關(guān)函數(shù)獲取。值得注意的是,該方式獲取的部分參數(shù),如姿態(tài)角、角速率、空速等,默認為慣性系下的狀態(tài)量,使用時需使用InverseTransformDirection()函數(shù)將其轉(zhuǎn)換為機體系狀態(tài)量;此外,Unity3D 是在左手坐標系(East-Up-North)下開發(fā)的,進行動力學模型計算時,需將狀態(tài)量由左手坐標系轉(zhuǎn)換為NED 坐標系,以保證飛機模型與原模型的一致性。
以機體角速率為例,圖2 展示了在相同控制量輸入下,Unity3D 模型與Matlab 已有模型的運動規(guī)律比較。不難看出,兩個模型的飛行狀態(tài)曲線幾乎完全吻合,表明Unity3D模型與Matlab 模型運動規(guī)律的一致性,也從側(cè)面說明了Unity3D 物理引擎用于飛行控制仿真的可行性與可靠性。
圖2 Unity3D模型與Matlab模型運動規(guī)律比較
1.2.1 數(shù)據(jù)通信方式選擇
由于本文所開發(fā)系統(tǒng)的物理模型與控制器分別位于Unity3D與Simulink,要使兩者進行聯(lián)合仿真,需對兩者間的數(shù)據(jù)通信環(huán)節(jié)進行設(shè)計。本文對飛控仿真中常見的UDP通信與串口通信[10-12]進行了分析測試,提出兩個評價指標對其進行優(yōu)劣評判:
(1)通信時延。Simulink 接收到一個數(shù)據(jù)時的系統(tǒng)毫秒級時刻與Unity3D發(fā)送該數(shù)據(jù)時的系統(tǒng)毫秒級時刻之差為該通信方式、該時間步長下的“通信時延”。
(2)通信重疊。當Simulink 還未接收上一個數(shù)據(jù),而Unity3D已發(fā)送下一個數(shù)據(jù)時,時間線上存在前后兩個通信事件的交集,稱之為“通信重疊”。出現(xiàn)通信重疊的次數(shù)與通信總次數(shù)之比稱為通信重疊率。
本文對兩種方式不同通信步長下的通信結(jié)果進行了測試。以通信步長為30 ms 為例,圖3 展示了UDP通信與串口通信的通信時延情況。表1 為不同通信步長下兩種方式通信重疊情況比較。
表1 不同通信步長下兩種通信方式通信重疊情況比較
圖3 通信步長為30 ms時兩種通信方式通信時延比較
通過以上通信時延、通信重疊檢測可以得到如下結(jié)論:①兩種通信均存在一定的通信時延。UDP 通信延時時長分布區(qū)間大,延時不確定性高;②UDP 方式的通信重疊率遠高于串口方式,通信可靠性較低。通過以上分析,發(fā)現(xiàn)UDP 通信適用于對可靠性、實時性要求不高的場合。本飛控仿真實驗平臺要求對飛機模型進行實時準確仿真,對通信的實時性與可靠性要求較高,因此串口通信更加適用于本文的飛控仿真實驗平臺。
1.2.2 聯(lián)合仿真時間參數(shù)設(shè)置
Unity3D 物理引擎進行數(shù)值積分運算時受Unity3D固定時間步長(Fixed Timestep,Unity3D 時間管理參數(shù)之一)影響,數(shù)據(jù)通信步長的確定也與該參數(shù)有關(guān),因此確定固定時間步長是聯(lián)合仿真開發(fā)過程中的一大關(guān)鍵。
為了確保飛行仿真準確性,一般取系統(tǒng)采樣頻率為飛機模型最快頻率的10 倍以上[13],由飛機線性化模型得到最快自然頻率為15.8 rad/s,故系統(tǒng)采樣頻率應(yīng)當大于158 rad/s,即采樣周期小于6.33 ms。由此取Unity3D 固定時間步長為5 ms,即Unity3D 以此步長進行狀態(tài)參數(shù)獲取與模型解算。
通過設(shè)置判斷條件,使物理模型每更新一定次數(shù)后執(zhí)行一次數(shù)據(jù)通信腳本,這樣即可設(shè)置數(shù)據(jù)通信步長。本系統(tǒng)采用50 Hz通信頻率,設(shè)置通信步長為20 ms,即每更新4 次物理模型進行一次數(shù)據(jù)通信。
學生可在Simulink中自行利用相關(guān)模塊實現(xiàn)控制算法結(jié)構(gòu)圖的搭建。由于本科學生對控制算法了解較少、理解不深,且考慮到本飛控仿真系統(tǒng)應(yīng)當與本科“自動控制原理”課程相結(jié)合,故本飛控仿真系統(tǒng)利用經(jīng)典PID算法,在Simulink中開發(fā)了俯仰角控制、高度控制、速度控制、橫側(cè)向控制、水平航跡控制算法樣例[14-15],對Unity3D 中的飛機模型進行縱向與橫側(cè)向控制。
考慮到該飛控仿真系統(tǒng)應(yīng)當為不同層次的學生提供不同難度的飛控仿真實驗,故為了降低控制律設(shè)計實驗難度,本文利用Unity3D C#自編腳本將PID 算法樣例程序?qū)懭險nity3D,即本文還開發(fā)了模型、控制器均在Unity3D中的飛控仿真。這樣可確保飛控算法不被學生改變,學生實驗時只需在仿真軟件提供的控制律結(jié)構(gòu)圖(見圖4)中進行PID參數(shù)調(diào)整即可。
圖4 高度控制律PID參數(shù)調(diào)整實驗界面
C#自編腳本采用歐拉法進行數(shù)值積分運算??紤]到篇幅限制,圖5 僅展示控制器分別在Simulink 與Unity3D這兩種環(huán)境下的滾轉(zhuǎn)角曲線。經(jīng)計算分析,與Simulink控制器相比,Unity3D自編腳本控制器誤差小于1%,兩種環(huán)境中設(shè)計的控制律幾乎一致,所開發(fā)的飛控仿真系統(tǒng)可不依賴Simulink進行經(jīng)典PID控制算法仿真驗證。
圖5 Simulink、Unity3D滾轉(zhuǎn)角控制器比較
本文利用羅技X52Pro 操縱桿實現(xiàn)指令給定。通過轉(zhuǎn)動不同搖桿,可分別生成滾轉(zhuǎn)、偏航、俯仰、油門等四通道指令。其可根據(jù)不同的實驗條件,直接控制飛機執(zhí)行機構(gòu)或給出狀態(tài)參考指令。
六自由度運動平臺通過Arduino 串口通信接口接收Unity3D的位姿數(shù)據(jù),并通過Simulink External模式對期望姿態(tài)信號進行解算,得到6 個PWM 信號并發(fā)送給Arduino PWM引腳,通過該引腳將該信號提供給驅(qū)動器,驅(qū)動6 個電動機,使6 個線性執(zhí)行器運動,實現(xiàn)該平臺對飛機位姿演示。
航模機飛控板通過無線數(shù)傳模塊接收執(zhí)行機構(gòu)信息,利用高級定時器產(chǎn)生不同頻率PWM 信號,分別驅(qū)動舵機與電調(diào)。PWM 信號占空比分別由接收的舵偏角及油門開度信號確定,實現(xiàn)對航模機舵偏角與螺旋槳電機的控制。
本文開發(fā)的飛行控制仿真系統(tǒng)實物如圖6 所示。
圖6 飛行控制仿真系統(tǒng)實物
為了遵循本科教學由簡入深、循序漸進的原則,該系統(tǒng)設(shè)置了多角度、多層次的實驗以落實教學內(nèi)容,達到教學目標,包括:①飛機配平實驗;②俯仰角控制律設(shè)計實驗;③高度控制律設(shè)計實驗;④速度控制律設(shè)計實驗;⑤滾轉(zhuǎn)角控制律設(shè)計實驗;⑥水平航跡控制律設(shè)計實驗。其中,控制律設(shè)計類實驗分別包括PID 參數(shù)調(diào)整實驗與控制律自主設(shè)計實驗。圖7 與8 分別為該系統(tǒng)實驗初始界面與仿真界面。
圖7 實驗系統(tǒng)初始界面
圖8 系統(tǒng)仿真實驗界面
學生實驗時需按以下步驟操作:
(1)打開實驗軟件,在“仿真設(shè)置”中設(shè)置硬件連接端口、設(shè)置仿真時長。
(2)在初始界面中選擇實驗項目與難度。
(3)若選擇“飛機配平實驗”,點擊界面中“配平線性化”按鈕,運行Matlab文件獲取執(zhí)行機構(gòu)配平值,點擊“仿真驗證”按鈕,跳轉(zhuǎn)至仿真界面后輸入該值即可進行配平驗證。
(4)若選擇“PID 參數(shù)調(diào)整實驗”,點擊“仿真驗證”按鈕,在仿真界面中顯示的控制律結(jié)構(gòu)圖內(nèi)點擊相應(yīng)模塊進行參數(shù)修改,即可進行經(jīng)典PID 控制律驗證。
(5)若選擇“控制律自主設(shè)計”,點擊“控制律實現(xiàn)”按鈕,即可打開Simulink 控制律設(shè)計文件,在其中完成控制律設(shè)計后,點擊“仿真驗證”按鈕即可進行Unity3D與Simulink聯(lián)合仿真。
仿真開始后,Unity3D 物理引擎對飛機的運動狀態(tài)進行數(shù)值解算,并將飛機運動過程中的三維位姿變化展示在仿真界面中,六自由度運動平臺與航模機執(zhí)行機構(gòu)也與視景動畫中的飛機保持隨動。圖9 為高度控制律設(shè)計實驗得到的飛行高度狀態(tài)曲線。
圖9 仿真系統(tǒng)飛行高度狀態(tài)曲線
本文對比總結(jié)了Unity3D 用于飛控仿真的優(yōu)勢,提出Unity3D 飛行器物理模型準確建立的方式,測試分析Unity3D 與Simulink 聯(lián)合仿真數(shù)據(jù)通信方式,針對飛控仿真與Unity3D時間管理特點確定聯(lián)合仿真時間參數(shù),整個系統(tǒng)的開發(fā)過程對于Unity3D 飛控仿真開發(fā)而言具有較好的參考意義。
本文開發(fā)的飛行控制仿真系統(tǒng)有助于提高本科學生工程應(yīng)用能力、強化本科學生對飛行控制的理解。本文還利用Unity3D 天空盒子、地形設(shè)計模塊對視景仿真進行了美化渲染,開發(fā)了曲線繪制、文件讀取、數(shù)據(jù)保存、用戶設(shè)置保存、航跡顯示、飛行視角切換等良好的人機交互功能,系統(tǒng)交互性好、可操作性強,具有較強的應(yīng)用價值。