小型無人直升機具有垂直起降、懸停、巡航以及快速轉變航向等特性,使得它成為一種理想的無人飛行器,并被廣泛地應用于除軍事目的以外的諸如交通執法監控、海洋/環境監測以及航空攝影/測量等許多領域。在進行實際自主飛行試驗時,由于小型無人直升機本身是一個極其復雜的非線性系統,加之實驗環境的變化,因此具有很大的不確定性,稍有不慎,就可能造成飛機的失控甚至墜毀。為了保證實際飛行實驗的安全,縮短開發周期,減少開發資金的投入,同時便于對飛行控制系統進行驗證與調較,設計一套小型無人直升機的實時仿真系統便顯得尤為迫切。詳細介紹了基于Linux的小型無人直升機的實時仿真系統整個搭建過程。 1 小型無人直升機實時仿真系統結構 1.1 無人直升機實時仿真系統構建 在此以Raptor90無人直升機為實驗平臺,如圖1所示。 要構建一套切實可行的小型無人直升機仿真系統,需要對小型無人直升機實際飛行過程進行全面的建模。而其中對小型無人直升機系統的數學模型建模又是重中之重。這里主要利用MIT以及Aalborg大學研究人員提出的兩套無人直升機的建模方法,結合各自的優點,充分考慮無人直升機在不同模態切換之間的模型差異,對無人直升機進行數學建模,并轉換成可以實施的仿真系統模型。仿真系統主要包括直升機數學模型模塊、飛行控制系統模塊、數據融合模塊、控制輸入模塊,人機圖形界面模塊以及數據通信模塊等。其中直升機數學模型模塊主要包括:直升機非線性模型、直升機線性化模型、陣風擾動模型、地形模型、傳感器模型以及伺服驅動器模型。直升機非線性模型主要包括主旋翼、伺服小翼、尾旋翼、空氣動力學模型以及6自由度剛體動力學模型。直升機線性化模塊主要是在直升機非線性模型的基礎上根據控制需要進行適當的簡化,以便用來對線性控制器的性能進行檢驗。陣風擾動模型主要用來對小型無人直升機在實際飛行環境中的陣風進行模擬。地形模型主要考慮直升機在起飛和降落過程中與地面之間的相互作用。這當中涉及到地面與槳葉間的渦流效應,對其建模非常復雜,故這里暫時不考慮。傳感器模型主要包括GPS定位模型、IMu測量模型和聲納測距模型。伺服驅動模型主要模擬將伺服板接收到的輸入信號轉換為伺服電機的轉動并最終轉換成機械動作后直接作用于旋翼的過程。飛行控制系統模塊指利用設計的控制算法對直升機進行自主飛行控制。數據融合模塊主要指利用卡爾曼濾波算法對各個傳感器測量到的數據進行融合計算。控制輸入模塊主要用于直升機自主飛行時對其飛行狀態進行調校。人機圖形界面能生動實時地再現直升機的仿真效果。經過以上分析,可以得到小型無人直升機仿真系統的結構圖如圖2所示。 1.2 圖形界面軟件工具簡介 這里的無人機仿真系統是以Linux操作系統為開發平臺,以FLTK(Fast Light Tool Kit)圖形用戶界面工具箱實現人機界面顯示,并用Mesa/C)penGL實現飛行過程的實時三維動態仿真。 FLTK是一個用++編寫的圖形界面開發工具。FLTK在具有基本的GUI功能之外,還擁有一些特殊的功能,比如跨平臺、內置OpenGL功能、尺寸更小等。FLTK使用Fl—Gl—Window這個類將OpenGL的基本功能囊括其中,開發時只要在Fl—Gl—window的draw()里glbegin/glend即可。無人直升機仿真系統的人機界面需要顯示直升機3D實時飛行狀態,這就需要用到OpenGL這個標準的三維計算機圖形接口。OpenGL由SGI公司開發,可以在不同的平臺如windows 95,windows NT,Unix,Linux,Mac()s,()s/2等之間進行移植。然而C)penGL不是自由軟件,它的版權、商標(OpenGL這個名字)都歸SGI公司所有。在Linux下用Mesa來取代OpenGL。Mesa提供與OpenGL幾乎完全一致的接口,并且Mesa是遵循GPL協議的自由軟件,使得它對新硬件的支持度等方面甚至超過OpenGL。 2 仿真系統程序模塊編寫 仿真系統程序模塊主要包括模塊直升機數學模型-模塊、控制輸入模塊、數據融合模、通信模塊、飛行控制系統模塊以及人機圖形界面模塊。下面主要對直升機數學模型模塊、控制輸入模塊、通信模塊以及人機圖形界面模塊進行代碼編寫。 2.1 直升機數學模型模塊 首先用類封裝各個子模型的主要屬性,主要包括主旋翼子模型、伺服小翼子模型、尾旋翼子模型,陣風擾動子模型以及伺服驅動子模型等;然后再把這些子模型封裝在一個直升機的類Heli中,看成直升機類的類成員變量;再為直升機類增加適當的成員函數,來完成各子模型的實際功能,這樣就構成了直升機整體。之后可以利用此類進行實例的定義及使用。 接下來便可以根據上面的Heli類來代入Rator90直升機的實際參數。 2.2 控制輸入模塊 在此選擇Logitech EXTREME 3D PRO JOYSTIC作為飛行控制輸入遙桿。首先,需要將遙桿的驅動程序掛載進內核。在/etc/rc.10cal文件中添加如下語句: modprobe/lib/modules/2.6.1 1/kernel/drivers/input/joydev.o 即可在每次啟動內核時自動加載搖桿驅動模塊并檢查與其他模塊的屬性相依。 控制器成功掛載進內核之后,利用幾個主要數據讀取函數對遙桿的輸人數據進行讀取: 然后便可通過socket通信模塊,把數據轉發到仿真平臺主程序上,再由主程序處理分配到各個終端。 2.3 通信模塊 該仿真系統主要采用Socket(套接字)網絡接口編程技術來實現各個模塊之間的數據交換,即進程間的通信。Socket主要有2種,使用TCP(傳輸控制協議)協議的流式Socket通信和使用UDP(用戶數據報)協議的數據報Socket通信。TCP協議提供面向連接的、提供端到端檢查與糾錯全雙工字節流傳輸。UDP協議是非連接的,可提供高速的傳輸服務,但不提供可靠的傳輸服務。該仿真程序使用UDP數據報協議,因是在本機內部進行通信,并且一個端口可以同時接收來自幾個端口的信息,無疑提高了效率。對通信雙方進行類封裝,建立基于UDP網絡通信的Server和Client類。主要實現代碼如下: 2.4 人機圖形界面模塊 圖形界面是最能體現仿真效果的部分。這里采用Linux系統下的FLTK和OpenGL/Mesa圖形函數庫進行圖形界面程序開發,主要代碼如下: 3 仿真系統運行結果分析 對仿真系統所有模塊的源文件建立Makefile文件,以便今后程序的修改與調試。用Linux下的gcc編譯器編譯鏈接,生成各個模塊的可執行文件。整個仿真系統運行如下。 圖3為直升機運行功能面板。可以聯合手柄的按鍵,設置各個不同的功能鍵。 圖4為直升機3D運行界面以及狀態面板。當執行懸停控制程序時,仿真程序會根據使預先設定好的參數,先進行垂直起飛,再飛向目標位置,然后在目標位置上進行定點懸停。同時可以從直升機狀態面板上,很直觀地看到直升機飛行姿態的變化。 4 結 語 詳細介紹了小型無人直升機仿真系統的構建。整個仿真系統是在Linux上搭建的。仿真系統運行結果很好地再現了直升機3D飛行過程,垂直起降以及定點懸停等。整個仿真系統大大縮短了研究周期,減少了資金的投入,并為接下來飛行控制系統的設計與驗證提供了良好的基礎。 |