伍 越 裴海龍 陳 亮
摘 要:小型無人直升機(jī)是一個(gè)極具挑戰(zhàn)性的多學(xué)科交叉前沿性研究課題。這里重點(diǎn)介紹基于Linux的小型直升機(jī)仿真系統(tǒng)的構(gòu)建過程及其相關(guān)軟件實(shí)現(xiàn)。首先對(duì)小型直升仿真系統(tǒng)的整體架構(gòu)進(jìn)行詳細(xì)的說明。然后基于Linux平臺(tái)對(duì)仿真系統(tǒng)的幾個(gè)主要程序模塊代碼進(jìn)行編寫,利用FLTK圖形界面庫和Mesa/OpenGL實(shí)現(xiàn)了小型直升機(jī)實(shí)時(shí)3D飛行狀態(tài)顯示和狀態(tài)控制面板,可視化仿真及實(shí)時(shí)運(yùn)動(dòng)特性再現(xiàn)的過程。仿真系統(tǒng)的運(yùn)行結(jié)果表明,仿真系統(tǒng)具有獨(dú)特的優(yōu)勢和很好的開發(fā)前景。在今后對(duì)小型無人直升機(jī)的自主飛行研究當(dāng)中,可以起到很好的輔助作用。整個(gè)仿真系統(tǒng)以模塊化實(shí)現(xiàn),具有良好的移植性,便于今后對(duì)系統(tǒng)進(jìn)行功能補(bǔ)充。
關(guān)鍵詞:小型無人直升機(jī);仿真系統(tǒng);OpenGL/Mesa;人機(jī)圖形界面
中圖分類號(hào):TP391.9 文獻(xiàn)標(biāo)識(shí)碼:B 文章編號(hào):1004-373X(2009)04-089-04
Real-time Simulation System Construction Based on Linux
for a Small-scale Unmanned Helicopter
WU Yue,PEI Hailong,CHEN Liang
(College of Automation Science and Engineering,South China University of Technology,Guangzhou,510641,China)
Abstract:Small-scale unmanned helicopter is a challenging and advancing research project related to multi-disciplines.A real-time simulation system based on Linux and its software implementation for small-scale unmanned helicopter is introduced.Firstly,the overall architecture of simulation system is illuminated.Then the main module of the simulation system is briefly coded based on Linux.Using the FLTK graphical interface library and Mesa/OpenGL to achieve 3D fight,attitude control panel,visualization and the reproduction process of a real-time motion characteristics for the small-scale helicopter.The results of the simulation system indicate that the simulation system has unique advantages and favorable exploitation prospect.So this system can be applied in the future research of the autonomous flying of the small-scale helicopter.The simulation system is realized by module,has good transplantation and it is a supplement for system.
Keywords:unmanned small-scale helicopter;simulation system;OpenGL/Mesa;graphical interface
0 引 言
小型無人直升機(jī)具有垂直起降、懸停、巡航以及快速轉(zhuǎn)變航向等特性,使得它成為一種理想的無人飛行器,并被廣泛地應(yīng)用于除軍事目的以外的諸如交通執(zhí)法監(jiān)控、海洋/環(huán)境監(jiān)測以及航空攝影/測量等許多領(lǐng)域。在進(jìn)行實(shí)際自主飛行試驗(yàn)時(shí),由于小型無人直升機(jī)本身是一個(gè)極其復(fù)雜的非線性系統(tǒng),加之實(shí)驗(yàn)環(huán)境的變化,因此具有很大的不確定性,稍有不慎,就可能造成飛機(jī)的失控甚至墜毀。為了保證實(shí)際飛行實(shí)驗(yàn)的安全,縮短開發(fā)周期,減少開發(fā)資金的投入,同時(shí)便于對(duì)飛行控制系統(tǒng)進(jìn)行驗(yàn)證與調(diào)較,設(shè)計(jì)一套小型無人直升機(jī)的實(shí)時(shí)仿真系統(tǒng)便顯得尤為迫切。詳細(xì)介紹了基于Linux的小型無人直升機(jī)的實(shí)時(shí)仿真系統(tǒng)整個(gè)搭建過程。
1 小型無人直升機(jī)實(shí)時(shí)仿真系統(tǒng)結(jié)構(gòu)
1.1 無人直升機(jī)實(shí)時(shí)仿真系統(tǒng)構(gòu)建
在此以Raptor90無人直升機(jī)為實(shí)驗(yàn)平臺(tái),如圖1所示。
要構(gòu)建一套切實(shí)可行的小型無人直升機(jī)仿真系統(tǒng),需要對(duì)小型無人直升機(jī)實(shí)際飛行過程進(jìn)行全面的建模。而其中對(duì)小型無人直升機(jī)系統(tǒng)的數(shù)學(xué)模型建模又是重中之重[1]。這里主要利用MIT以及Aalborg大學(xué)研究人員提出的兩套無人直升機(jī)的建模方法[2-4],結(jié)合各自的優(yōu)點(diǎn),充分考慮無人直升機(jī)在不同模態(tài)切換之間的模型差異,對(duì)無人直升機(jī)進(jìn)行數(shù)學(xué)建模,并轉(zhuǎn)換成可以實(shí)施的仿真系統(tǒng)模型。仿真系統(tǒng)主要包括直升機(jī)數(shù)學(xué)模型模塊、飛行控制系統(tǒng)模塊、數(shù)據(jù)融合模塊、控制輸入模塊,人機(jī)圖形界面模塊以及數(shù)據(jù)通信模塊等[5]。其中直升機(jī)數(shù)學(xué)模型模塊主要包括:直升機(jī)非線性模型、直升機(jī)線性化模型、陣風(fēng)擾動(dòng)模型、地形模型、傳感器模型以及伺服驅(qū)動(dòng)器模型。直升機(jī)非線性模型主要包括主旋翼、伺服小翼、尾旋翼、空氣動(dòng)力學(xué)模型以及6自由度剛體動(dòng)力學(xué)模型。直升機(jī)線性化模塊主要是在直升機(jī)非線性模型的基礎(chǔ)上根據(jù)控制需要進(jìn)行適當(dāng)?shù)暮喕员阌脕韺?duì)線性控制器的性能進(jìn)行檢驗(yàn)。陣風(fēng)擾動(dòng)模型主要用來對(duì)小型無人直升機(jī)在實(shí)際飛行環(huán)境中的陣風(fēng)進(jìn)行模擬。地形模型主要考慮直升機(jī)在起飛和降落過程中與地面之間的相互作用。這當(dāng)中涉及到地面與槳葉間的渦流效應(yīng),對(duì)其建模非常復(fù)雜,故這里暫時(shí)不考慮。傳感器模型主要包括GPS定位模型、IMU測量模型和聲納測距模型。伺服驅(qū)動(dòng)模型主要模擬將伺服板接收到的輸入信號(hào)轉(zhuǎn)換為伺服電機(jī)的轉(zhuǎn)動(dòng)并最終轉(zhuǎn)換成機(jī)械動(dòng)作后直接作用于旋翼的過程。飛行控制系統(tǒng)模塊指利用設(shè)計(jì)的控制算法對(duì)直升機(jī)進(jìn)行自主飛行控制。數(shù)據(jù)融合模塊主要指利用卡爾曼濾波算法對(duì)各個(gè)傳感器測量到的數(shù)據(jù)進(jìn)行融合計(jì)算??刂戚斎肽K主要用于直升機(jī)自主飛行時(shí)對(duì)其飛行狀態(tài)進(jìn)行調(diào)校。人機(jī)圖形界面能生動(dòng)實(shí)時(shí)地再現(xiàn)直升機(jī)的仿真效果。經(jīng)過以上分析,可以得到小型無人直升機(jī)仿真系統(tǒng)的結(jié)構(gòu)圖如圖2所示。
1.2 圖形界面軟件工具簡介
這里的無人機(jī)仿真系統(tǒng)是以Linux操作系統(tǒng)為開發(fā)平臺(tái),以FLTK(Fast Light Tool Kit)圖形用戶界面工具箱實(shí)現(xiàn)人機(jī)界面顯示,并用Mesa/OpenGL實(shí)現(xiàn)飛行過程的實(shí)時(shí)三維動(dòng)態(tài)仿真。
FLTK是一個(gè)用C++編寫的圖形界面開發(fā)工具。FLTK在具有基本的GUI功能之外,還擁有一些特殊的功能,比如跨平臺(tái)、內(nèi)置 OpenGL功能、尺寸更小等[6]。FLTK 使用Fl_Gl_Window這個(gè)類將OpenGL的基本功能囊括其中,開發(fā)時(shí)只要在Fl_Gl_Window的draw()里glbegin/glend即可。
無人直升機(jī)仿真系統(tǒng)的人機(jī)界面需要顯示直升機(jī)3D實(shí)時(shí)飛行狀態(tài),這就需要用到OpenGL這個(gè)標(biāo)準(zhǔn)的三維計(jì)算機(jī)圖形接口。OpenGL由SGI公司開發(fā),可以在不同的平臺(tái)如Windows 95,Windows NT,Unix,Linux,MacOS,OS/2等之間進(jìn)行移植[7,8]。然而OpenGL不是自由軟件,它的版權(quán)、商標(biāo)(OpenGL這個(gè)名字)都?xì)wSGI公司所有。在Linux下用Mesa來取代OpenGL。 Mesa提供與OpenGL幾乎完全一致的接口,并且Mesa是遵循GPL協(xié)議的自由軟件,使得它對(duì)新硬件的支持度等方面甚至超過OpenGL。
2 仿真系統(tǒng)程序模塊編寫
仿真系統(tǒng)程序模塊主要包括模塊直升機(jī)數(shù)學(xué)模型模塊、控制輸入模塊、數(shù)據(jù)融合模、通信模塊、飛行控制系統(tǒng)模塊以及人機(jī)圖形界面模塊。下面主要對(duì)直升機(jī)數(shù)學(xué)模型模塊、控制輸入模塊、通信模塊以及人機(jī)圖形界面模塊進(jìn)行代碼編寫。
2.1 直升機(jī)數(shù)學(xué)模型模塊
首先用類封裝各個(gè)子模型的主要屬性,主要包括主旋翼子模型、伺服小翼子模型、尾旋翼子模型,陣風(fēng)擾動(dòng)子模型以及伺服驅(qū)動(dòng)子模型等;然后再把這些子模型封裝在一個(gè)直升機(jī)的類Heli中,看成直升機(jī)類的類成員變量;再為直升機(jī)類增加適當(dāng)?shù)某蓡T函數(shù),來完成各子模型的實(shí)際功能,這樣就構(gòu)成了直升機(jī)整體。之后可以利用此類進(jìn)行實(shí)例的定義及使用。
class Heli//定義直升機(jī)類
{
mainrotor_defm;//主旋翼子模型類
flybar_def fb;//伺服小翼子模型類
tailrotor_deft;//尾槳子模型類
wind_modelw; //陣風(fēng)擾動(dòng)子模型類
sensors_model s;//傳感器子模型類
//為直升機(jī)增加成員函數(shù),完成各子模型類的實(shí)際功能
void setup_main_rotor();//建立直升機(jī)主旋翼
void setup_tail_rotor();//建立直升機(jī)尾旋翼
void setup_flybar();//建立直升機(jī)翼伺服小翼
void setup_wind();//建立陣風(fēng)擾動(dòng)模型
void setup_servos();//建立伺服驅(qū)動(dòng)模型
static Heliraptor_90;//建立RAPTOR 90直升機(jī)實(shí)例
接下來便可以根據(jù)上面的Heli類來代入Rator90直升機(jī)的實(shí)際參數(shù)。
2.2 控制輸入模塊
在此選擇Logitech EXTREME 3D PRO JOYSTIC作為飛行控制輸入遙桿。首先,需要將遙桿的驅(qū)動(dòng)程序掛載進(jìn)內(nèi)核。在/etc/rc.local文件中添加如下語句:
modprobe /lib/modules/2.6.11/kernel/drivers/input/joydev.o
即可在每次啟動(dòng)內(nèi)核時(shí)自動(dòng)加載搖桿驅(qū)動(dòng)模塊并檢查與其他模塊的屬性相依。
控制器成功掛載進(jìn)內(nèi)核之后,利用幾個(gè)主要數(shù)據(jù)讀取函數(shù)對(duì)遙桿的輸入數(shù)據(jù)進(jìn)行讀?。?/p>
int joydev_open(const char * filename)//打開遙桿設(shè)備
int joydev_event(int fd,struct js_event * e,int users)//監(jiān)聽遙桿輸入事件
static double handle_axis(int axis,int value)//讀取遙桿臂數(shù)據(jù)
static double handle_button( int button,int value)//讀取遙桿功能按鍵
然后便可通過socket通信模塊,把數(shù)據(jù)轉(zhuǎn)發(fā)到仿真平臺(tái)主程序上,再由主程序處理分配到各個(gè)終端。
2.3 通信模塊
該仿真系統(tǒng)主要采用Socket(套接字)網(wǎng)絡(luò)接口編程技術(shù)來實(shí)現(xiàn)各個(gè)模塊之間的數(shù)據(jù)交換,即進(jìn)程間的通信[9-11]。Socket主要有2種,使用TCP(傳輸控制協(xié)議)協(xié)議的流式Socket通信和使用UDP(用戶數(shù)據(jù)報(bào))協(xié)議的數(shù)據(jù)報(bào)Socket通信。TCP協(xié)議提供面向連接的、提供端到端檢查與糾錯(cuò)全雙工字節(jié)流傳輸。 UDP協(xié)議是非連接的,可提供高速的傳輸服務(wù),但不提供可靠的傳輸服務(wù)。該仿真程序使用UDP數(shù)據(jù)報(bào)協(xié)議,因是在本機(jī)內(nèi)部進(jìn)行通信,并且一個(gè)端口可以同時(shí)接收來自幾個(gè)端口的信息,無疑提高了效率。對(duì)通信雙方進(jìn)行類封裝,建立基于UDP網(wǎng)絡(luò)通信的Server和Client類。主要實(shí)現(xiàn)代碼如下:
int s = socket(PF_INET,SOCK_DGRAM,0);//建立基于無連接的數(shù)據(jù)報(bào)Socket
addr.sin_family = AF_INET;// 在Internet域中進(jìn)行通信
addr.sin_port = htons( port );//設(shè)置目標(biāo)端口號(hào)
addr.sin_addr.s_addr = INADDR_ANY;//設(shè)置目標(biāo)地址
…
Static host_t server;//建立UDP服務(wù)器模型
reconnect_server();//對(duì)UDP服務(wù)器建立連接
add_client (const host_t * src)//加入一個(gè)客戶端端口到服務(wù)器
read_state(state_t * state,int forever)//讀取端口數(shù)據(jù)
server->handle( AHRS_STATE,ahrs_state,0 );//處理讀入的無人機(jī)狀態(tài)數(shù)據(jù)
2.4 人機(jī)圖形界面模塊
圖形界面是最能體現(xiàn)仿真效果的部分。這里采用Linux系統(tǒng)下的FLTK和OpenGL/Mesa圖形函數(shù)庫進(jìn)行圖形界面程序開發(fā),主要代碼如下:
glutInitWindowSize( WIDTH,HEIGHT ); //調(diào)用OpenGL/Mesa庫函數(shù)實(shí)現(xiàn)圖形界面初始化
glutInitWindowPosition( 0,0 );//設(shè)置初始窗口位置
glutInitDisplayMode( 0| GLUT_DOUBLE| GLUT_RGB| GLUT_DEPTH);//設(shè)置窗口顯示模式
main_window=glutCreateWindow(argv[0]);//創(chuàng)建主顯示圖形窗口
…
Fl::gl_visual( FL_RGB );//設(shè)置fltk窗口顯示模式
gui = new UserInterface();//分配界面類UserInterface存儲(chǔ)空間
gui->make_window()->show();//調(diào)用類成員函數(shù)顯示圖形界面
3 仿真系統(tǒng)運(yùn)行結(jié)果分析
對(duì)仿真系統(tǒng)所有模塊的源文件建立Makefile文件,以便今后程序的修改與調(diào)試。用Linux下的gcc編譯器編譯鏈接,生成各個(gè)模塊的可執(zhí)行文件。整個(gè)仿真系統(tǒng)運(yùn)行如下。
圖3為直升機(jī)運(yùn)行功能面板??梢月?lián)合手柄的按鍵,設(shè)置各個(gè)不同的功能鍵。
圖4為直升機(jī)3D運(yùn)行界面以及狀態(tài)面板。當(dāng)執(zhí)行懸??刂瞥绦驎r(shí),仿真程序會(huì)根據(jù)使預(yù)先設(shè)定好的參數(shù),先進(jìn)行垂直起飛,再飛向目標(biāo)位置,然后在目標(biāo)位置上進(jìn)行定點(diǎn)懸停。同時(shí)可以從直升機(jī)狀態(tài)面板上,很直觀地看到直升機(jī)飛行姿態(tài)的變化。
4 結(jié) 語
詳細(xì)介紹了小型無人直升機(jī)仿真系統(tǒng)的構(gòu)建。整個(gè)仿真系統(tǒng)是在Linux上搭建的。仿真系統(tǒng)運(yùn)行結(jié)果很好地再現(xiàn)了直升機(jī)3D飛行過程,垂直起降以及定點(diǎn)懸停等。整個(gè)仿真系統(tǒng)大大縮短了研究周期,減少了資金的投入,并為接下來飛行控制系統(tǒng)的設(shè)計(jì)與驗(yàn)證提供了良好的基礎(chǔ)。
參 考 文 獻(xiàn)
[1]Munzinger, Christian. Development of a Real-time FlightSimulator for an Experimental Model Helicopter [D]. Atlanta:Georgia Institute of Technology,1998.
[2]Gavrilets V.Autonomous Aerobatic Maneuvering of Miniature Helicopters.Cambrigde:Massachusetts Institute of Technology,2003.
[3]Gavrilets V,Mettler B,Feron E.Nonlinear Model for a Small-size Acrobatic Helicopter.Proceedings of the AIAA Guidance,Navigation,and Control Conference.Number AIAA 2001-4333,Montreal,Canada,2001.
[4]Hald U B.Nonlinear Modeling and Optimal Control of a Miniature Autonomous Helicopter.Denmark:Aalborg University,2003.
[5]常銳.小型自主小型無人直升機(jī)軟件系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D].廣州:華南理工大學(xué),2007.
[6]Mason Woo.OpenGL編程權(quán)威指南[M].吳斌,譯.北京:中國電力出版社,2001.
[7]Wright R S,Jr B Lipchak.Open GL超級(jí)寶典.3版.徐波,譯.北京:人民郵電出版社,2005.
[8]Shreiner D,Woo M,Neider J,et al.OpenGL編程指南.5版.徐波,譯.北京:機(jī)械工業(yè)出版社,2006.
[9]羅軍舟,黎波濤,楊明,等.TCP/IP協(xié)議及網(wǎng)絡(luò)編程技術(shù)[M].北京:清華大學(xué)出版社,2005.
[10]Matthew N,Stones R Linux程序設(shè)計(jì)[M].3版.陳健,宋健建,譯.北京:人民郵電出版社,2007.
[11]龍晉元.Richard W.Unix環(huán)境高級(jí)編程[M].2版.北京:人民郵電出版社,2006.
作者簡介 伍 越 男,1983年出生,湖南邵陽人,碩士研究生。主要研究方向?yàn)樾⌒蜔o人直升機(jī)的建模與控制,Linux嵌入式系統(tǒng)及實(shí)時(shí)仿真系統(tǒng)的構(gòu)建。
裴海龍 男,1965年出生,河南鄧縣人,博士,副院長,教授、博士生導(dǎo)師。長期從事嵌入式系統(tǒng)、智能機(jī)器人系統(tǒng)、自適應(yīng)自組織控制等方面的研究和教學(xué)。
陳 亮 男,1983年出生,廣東興寧人,碩士研究生。主要研究方向?yàn)閳D像處理、嵌入式系統(tǒng)。