馬超超,李歲勞,黃志仁,周 博
(西北工業(yè)大學(xué) 自動化學(xué)院,陜西 西安 710129)
無人機(jī)地面站軌跡顯示模塊設(shè)計(jì)與實(shí)現(xiàn)
馬超超,李歲勞,黃志仁,周 博
(西北工業(yè)大學(xué) 自動化學(xué)院,陜西 西安 710129)
為了實(shí)現(xiàn)良好的人機(jī)交互,并實(shí)時顯示無人機(jī)的位置和軌跡,開發(fā)了基于MapX的無人機(jī)地面站地圖和軌跡顯示模塊。文中介紹了軌跡顯示模塊的功能以及在LabWindows/CVI環(huán)境下的實(shí)現(xiàn)方法,采用了多線程技術(shù)輔助MapX軌跡顯示,保證了軌跡顯示的實(shí)時性。
無人機(jī);地面站;MapX;軌跡顯示模塊
傳統(tǒng)的無人機(jī)地面站軟件[1]的軌跡顯示模塊大都將MapX應(yīng)用在VC++ 等環(huán)境開發(fā),但在VC++ 等環(huán)境下不易開發(fā)出友好的人機(jī)交互界面,不易將虛擬儀器和計(jì)算機(jī)技術(shù)結(jié)合起來。另外,大部分無人機(jī)地面站軟件[2]沒有開發(fā)自己的地圖包,使用起來不太方便。本文將MapX應(yīng)用到LabWindows /CVI環(huán)境下進(jìn)行開發(fā),實(shí)現(xiàn)了軌跡顯示模塊的基本功能,開發(fā)出自己的電子地圖包,并且使用多線程技術(shù)[3]解決了MapX顯示軌跡時出現(xiàn)的“延遲太大”,“卡死”等的問題。
軌跡顯示模塊在無人機(jī)地面站中是一個很重要的部分。通過無線數(shù)傳電臺通訊,無人機(jī)地面站系統(tǒng)實(shí)時獲取由無人機(jī)機(jī)載系統(tǒng)傳下來的GPS位置信息,經(jīng)解析后得到無人機(jī)的經(jīng)度、緯度、高度等信息,然后將這些信息送到MapX中,通過相應(yīng)的函數(shù)調(diào)用就會在電子地圖上實(shí)時顯示飛行的飛行軌跡,使得操作人員可以直觀地看到無人機(jī)的飛行航跡信息。從而可以與預(yù)先設(shè)定好的航跡進(jìn)行比對,以調(diào)整飛機(jī)的相關(guān)參數(shù)。
根據(jù)軌跡顯示模塊在無人機(jī)地面站系統(tǒng)中的作用,軌跡顯示模塊應(yīng)具備如下功能:能夠用鼠標(biāo)完成地圖的放大、縮小、平移、居中等基本操作;能夠?qū)崟r顯示鼠標(biāo)所在地圖中位置所對應(yīng)的經(jīng)緯度和高度值,以方便航路規(guī)劃;能夠?qū)崟r顯示代表無人機(jī)圖標(biāo)在地圖中的位置、航向;能實(shí)時繪制無人機(jī)的飛行軌跡。
2.1 電子地圖制作
無人機(jī)地面站的電子地圖需要一套嚴(yán)格的坐標(biāo)系統(tǒng),能夠準(zhǔn)確地將地理位置信息和地圖中的各個地物要素關(guān)聯(lián)起來就能滿足要求。本文中電子地圖具體制作步驟如下:
1)確定無人機(jī)飛行范圍;
2)使用Google Earth截取對應(yīng)位置的影像圖,注意截取圖片的分辨率和范圍;
3)將圖片導(dǎo)入MapInfo Professional 中進(jìn)行配準(zhǔn);
4)Geoset Manager生成GST格式電子地圖。
制作出的電子地圖的如圖1所示,顯示的是5.5×5.5平方公里的地形區(qū)域,緯度范圍是北緯34.00度到北緯34.05度,經(jīng)度范圍是108.74度到108.78度,總共由25張Google Earth地圖組成。
2.2 地圖的載入和基本操作的實(shí)現(xiàn)
MapX的地圖功能都是直接或間接地依靠地圖對象實(shí)現(xiàn)的。導(dǎo)航電子地圖加載也不例外。在LabWindows/CVI環(huán)境下將地圖加載到應(yīng)用程序視圖窗口中的代碼如下:
GetObjHandleFromActiveXCtrl(mainPanel,MAIN_PANEL_ MAP,&map);
//獲得MapX控件的窗口句柄
MapXLib_CMapXSetGeoSet(map,NULL,path);//加載指定文件
圖1 電子地圖樣圖Fig.1 Digital Map Example
其中map為地圖窗口句柄,NULL為默認(rèn)參數(shù),path為加載地圖地址。
地圖的基本操作包括放大、縮小、平移、居中、自動漫游等。對于前4個操作,MapX提供了簡單易操作的接口函數(shù)來實(shí)現(xiàn)。只要系統(tǒng)直接調(diào)用接口函數(shù)并設(shè)置響應(yīng)的參數(shù)就能實(shí)現(xiàn)。在LabWindows/CVI中環(huán)境中通過MapXLib_CMapXSetCurrentTool實(shí)現(xiàn)。對于自動漫游MapX沒有提供標(biāo)準(zhǔn)工具,但提供了獲得地圖可見范圍的邊界特征屬性函數(shù)。因此,可以將當(dāng)前接收到的經(jīng)緯度信息與地圖可見范圍的邊界特征相比較,若超出可見范圍,就將飛機(jī)位于屏幕中心位置來實(shí)現(xiàn)自動漫游。其實(shí)現(xiàn)的主要代碼如下:
MapXLib_CMapXGetBounds(map,NULL,&scenerange);//獲取可見范圍邊界
……
if(longt>xmax||longt<xmin||lat>ymax||lat<ymin)//判斷是否超出可視范圍
{
MapXLib_CMapXSetCenterX(map,NULL,longt);
MapXLib_CMapXSetCenterY(map,NULL,lat);//將飛行器居中
}
其中xmax、xmin、ymax、ymin為可見范圍邊界值,longt、lat為無人機(jī)傳回的經(jīng)緯度信息。
2.3 繪制航向、位置和飛行軌跡
無人機(jī)的航向、位置和飛行軌跡的繪制就需要進(jìn)行繪圖操作,MapX自身帶有增加、刪除和修改圖層的方法,這為實(shí)現(xiàn)航跡顯示帶來了很大方便[4]。其設(shè)計(jì)思想是增加新的臨時透明圖層,并把新加的圖層設(shè)置為活動層,然后在此活動層上增加新的地理信息,如點(diǎn)、線、圖標(biāo)等,并把它顯示在電子地圖上。
在活動層中增加無人機(jī)的航跡和圖標(biāo)是使用FeatureFactory對象庫創(chuàng)建點(diǎn)、線、區(qū)域圖像。需要注意的是:由點(diǎn)創(chuàng)建線和區(qū)域圖像時,點(diǎn)的類型要求是VARIANT類型,為此需要借助IDispatch接口來輔助實(shí)現(xiàn)點(diǎn)的類型轉(zhuǎn)換。
在LabWindows/CVI環(huán)境下的實(shí)現(xiàn)方法如下:
首先用如下語句獲得點(diǎn)對象的句柄Dispatch接口指針,
CA_GetDispatchFromObjHandle(apoint,&dispatchPtr);其中apoint為點(diǎn)對象的句柄,dispatchPtr為Dispatch接口指針。
然 后 將 Dispatch的 值 轉(zhuǎn) 換 為 variant類 型,CA_ VariantDispatch(dispatchPtr)。
2.4 地圖上經(jīng)緯度和高度的獲取
在地圖操作時,能夠顯示出用戶操作點(diǎn)處實(shí)際的經(jīng)緯高將為用戶提供指導(dǎo)信息,可以方便地確定新添加的航路點(diǎn)信息。
操作點(diǎn)處經(jīng)緯度獲取的是將圖形設(shè)備接口GDI坐標(biāo)與經(jīng)緯度坐標(biāo)進(jìn)行轉(zhuǎn)換,關(guān)鍵函數(shù)為MapXLib_CMapXConvertCo ord(map,NULL,&ScreenX,&ScreenY,&MapX,&MapY,miScreenT oMap);其中ScreenX,ScreenY為鼠標(biāo)所在屏幕處坐標(biāo),參數(shù)MapxX,MapxY 是經(jīng)緯度信息。
高度值獲取則是借助于數(shù)字高程模型[5]。由于矩陣格網(wǎng)DEM存儲量最?。ㄟ€可以進(jìn)行壓縮存儲),便于使用且容易管理,因此文中采用規(guī)則格網(wǎng)DEM數(shù)據(jù)結(jié)構(gòu)。對于高度值獲取流程圖如圖2所示。
圖2 高度值獲取的流程圖Fig.2 Flow chart for getting height value
2.5 多線程技術(shù)的應(yīng)用
利用MapX在更新圖層,當(dāng)其他優(yōu)先級較高的操作還在進(jìn)行時MapX窗口就會出現(xiàn)“延遲太大”,“卡死”的情況。為了避免窗體界面出現(xiàn)這種情況,文中采用多線程技術(shù)協(xié)助MapX圖像更新。
LabWindows/CVI 為多線程提供了兩種次線程運(yùn)行代碼的高級機(jī)制,分別是線程池(thread pools)和異步定時器(asynchronous timers)[6]。線程池適用于需要不連續(xù)地執(zhí)行或在循環(huán)中執(zhí)行的任務(wù),而異步定時器適用于在固定時間間隔內(nèi)執(zhí)行的任務(wù)。因此,文中采用線程池機(jī)制。具體實(shí)現(xiàn)步驟如下:
1)創(chuàng)建線程池;
2)創(chuàng)建線程;
3)運(yùn)行線程函數(shù);
4)釋放線程池資源。
其中,在運(yùn)行線程函數(shù)時,由于MapX地圖操作只能主線程中進(jìn)行,所以需要使用PostDeferredCall去調(diào)用主線程的指定函數(shù)。具體的實(shí)現(xiàn)代碼如下:
PostDeferredCall(TickSoft,NULL);
static void CVICALLBACK
TickSoft(void *pD)
{
… //MapX圖像更新函數(shù)
為了驗(yàn)證系統(tǒng)的工作性能,進(jìn)行航跡回放實(shí)驗(yàn)驗(yàn)證。實(shí)驗(yàn)數(shù)據(jù)來源于車載慣導(dǎo)設(shè)備在環(huán)山公路上記錄的數(shù)據(jù),存放在Access數(shù)據(jù)庫中。飛機(jī)的位置信息每1000 ms更新一次,航向信息每100 ms更新一次。實(shí)驗(yàn)效果圖如圖3所示。
圖3 軌跡回放效果圖Fig.3 Track display screen
圖中黑色飛機(jī)圖標(biāo)表示的是無人機(jī)實(shí)際的地理位置,飛機(jī)圖標(biāo)的機(jī)頭代表航向,紅色線條為飛行軌跡。
測試結(jié)果表明,該軌跡顯示模塊實(shí)現(xiàn)電子地圖的載入、放縮和自動漫游,能夠在載入的電子地圖中連續(xù)、準(zhǔn)確、清晰地實(shí)時顯示無人機(jī)的位置、航向和軌跡,解決了MapX窗口因響應(yīng)不及時出現(xiàn)“延遲太大”,“卡死”的問題。
文中在LabWindows/CVI環(huán)境下,使用多線程技術(shù)輔助MapX[7]開發(fā)了無人機(jī)地面站的軌跡顯示模塊,同時驗(yàn)證了該模塊的可靠性和穩(wěn)定性。MapX進(jìn)行二次開發(fā)同使用OpenGL從底層開發(fā)相比,避免了大量繁瑣的底層代碼開發(fā),減少了工作量,大大縮短了開發(fā)周期,為小型無人機(jī)地面站的搭建提供了便利,但對于大型無人機(jī)地面站的三維視景的開發(fā)還有一定的局限性。
[1] 朱建新,張秋陽,謝習(xí)華.某型無人機(jī)地面站軟件的設(shè)計(jì)與實(shí)現(xiàn)[J].中南林業(yè)科技大學(xué)學(xué)報,2011(31):164-168.
ZHU Jian-xin,ZHANG Qiu-yang,XIE Xi-hua.System design and realization of the software for UAV ground station[J].Journal of CentralSouth University of Forestry & Technology,2011(31):164-168.
[2] 何江艷,趙琦.無人直升機(jī)地面監(jiān)控電子地圖的設(shè)計(jì)與實(shí)現(xiàn)[J].北京航空航天大學(xué)學(xué)報,2011(37):615-618.
HE Jiang-yan,ZHAO Qi.Design and realization of the electronic map for UAV GCS[J].Journal of Beijing Unirersity of Aeronautics and Astronautics,2011(37):615-618.
[3] 單體強(qiáng),陳雷,張萬發(fā).LabWindows/CVI 多線程技術(shù)的應(yīng)用研究[J].電子設(shè)計(jì)工程,2012(20):52-54.
SHAN Ti-qiang,CHEN Lei,ZHANG Wan-fa.Research on the application of LabWindows/CVI multithreading technology[J].Electronic Design Engineering,2012(20):52-54.
[4] 尹旭日,張武軍 Visual C++環(huán)境下MapX的開發(fā)技術(shù)[M].北京:冶金工業(yè)出版社.
[5] 王家耀,崔鐵軍,苗國強(qiáng).數(shù)字高程模型及其數(shù)據(jù)結(jié)構(gòu)[J].海洋測繪,2004(24):1-4.
WANG Jia-yao,CUI Tie-jun,MIAO Guo-qiang.Digital Elevation Model and Data Structure,2004(24):1-4.
[6] 王建新,楊世鳳,隋美麗,等.Labwindows/CVI測試技術(shù)及工程應(yīng)用[M].北京:化學(xué)工業(yè)出版社,2006.
[7] 崔榮華.基于MapX雷達(dá)顯控系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2012(10):118-121.
CUI Rong-hua.Design and implementation of radar display control system based on MapX[J].Modern Electronics Technique ,2012(10):118-121.
Design and implementation of UAV GCS's track display module
MA Chao-chao,LI Sui-Lao,HUANG Zhi-Ren,ZHOU Bo
(School of Automation,Northwestern Polytechnical University,Xi'an 710129,China)
In order to implement human-machine interaction perfectly and display the position and track of UAV timely,a kind of GCS's track display module based on MapX is constructed.The function of track display module and the design method in LabWindows/CVI environment were introduced,multi-threading technology assisted MapX track display was used,and Real-time display was assured.
unmanned aerial vehicle(UAV);GCS(Ground Control Station);MapX;track display module
V24
A
1674-6236(2014)11-0159-03
2013-09-18 稿件編號:201309145
馬超超(1989—),男,河南靈寶人,碩士研究生。研究方向:無人機(jī)地面站的研制。