马超超,李岁劳,黄志仁,周 博
(西北工业大学 自动化学院,陕西 西安 710129)
无人机地面站轨迹显示模块设计与实现
马超超,李岁劳,黄志仁,周 博
(西北工业大学 自动化学院,陕西 西安 710129)
为了实现良好的人机交互,并实时显示无人机的位置和轨迹,开发了基于MapX的无人机地面站地图和轨迹显示模块。文中介绍了轨迹显示模块的功能以及在LabWindows/CVI环境下的实现方法,采用了多线程技术辅助MapX轨迹显示,保证了轨迹显示的实时性。
无人机;地面站;MapX;轨迹显示模块
传统的无人机地面站软件[1]的轨迹显示模块大都将MapX应用在VC++ 等环境开发,但在VC++ 等环境下不易开发出友好的人机交互界面,不易将虚拟仪器和计算机技术结合起来。另外,大部分无人机地面站软件[2]没有开发自己的地图包,使用起来不太方便。本文将MapX应用到LabWindows /CVI环境下进行开发,实现了轨迹显示模块的基本功能,开发出自己的电子地图包,并且使用多线程技术[3]解决了MapX显示轨迹时出现的“延迟太大”,“卡死”等的问题。
轨迹显示模块在无人机地面站中是一个很重要的部分。通过无线数传电台通讯,无人机地面站系统实时获取由无人机机载系统传下来的GPS位置信息,经解析后得到无人机的经度、纬度、高度等信息,然后将这些信息送到MapX中,通过相应的函数调用就会在电子地图上实时显示飞行的飞行轨迹,使得操作人员可以直观地看到无人机的飞行航迹信息。从而可以与预先设定好的航迹进行比对,以调整飞机的相关参数。
根据轨迹显示模块在无人机地面站系统中的作用,轨迹显示模块应具备如下功能:能够用鼠标完成地图的放大、缩小、平移、居中等基本操作;能够实时显示鼠标所在地图中位置所对应的经纬度和高度值,以方便航路规划;能够实时显示代表无人机图标在地图中的位置、航向;能实时绘制无人机的飞行轨迹。
2.1 电子地图制作
无人机地面站的电子地图需要一套严格的坐标系统,能够准确地将地理位置信息和地图中的各个地物要素关联起来就能满足要求。本文中电子地图具体制作步骤如下:
1)确定无人机飞行范围;
2)使用Google Earth截取对应位置的影像图,注意截取图片的分辨率和范围;
3)将图片导入MapInfo Professional 中进行配准;
4)Geoset Manager生成GST格式电子地图。
制作出的电子地图的如图1所示,显示的是5.5×5.5平方公里的地形区域,纬度范围是北纬34.00度到北纬34.05度,经度范围是108.74度到108.78度,总共由25张Google Earth地图组成。
2.2 地图的载入和基本操作的实现
MapX的地图功能都是直接或间接地依靠地图对象实现的。导航电子地图加载也不例外。在LabWindows/CVI环境下将地图加载到应用程序视图窗口中的代码如下:
GetObjHandleFromActiveXCtrl(mainPanel,MAIN_PANEL_ MAP,&map);
//获得MapX控件的窗口句柄
MapXLib_CMapXSetGeoSet(map,NULL,path);//加载指定文件
图1 电子地图样图Fig.1 Digital Map Example
其中map为地图窗口句柄,NULL为默认参数,path为加载地图地址。
地图的基本操作包括放大、缩小、平移、居中、自动漫游等。对于前4个操作,MapX提供了简单易操作的接口函数来实现。只要系统直接调用接口函数并设置响应的参数就能实现。在LabWindows/CVI中环境中通过MapXLib_CMapXSetCurrentTool实现。对于自动漫游MapX没有提供标准工具,但提供了获得地图可见范围的边界特征属性函数。因此,可以将当前接收到的经纬度信息与地图可见范围的边界特征相比较,若超出可见范围,就将飞机位于屏幕中心位置来实现自动漫游。其实现的主要代码如下:
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为无人机传回的经纬度信息。
2.3 绘制航向、位置和飞行轨迹
无人机的航向、位置和飞行轨迹的绘制就需要进行绘图操作,MapX自身带有增加、删除和修改图层的方法,这为实现航迹显示带来了很大方便[4]。其设计思想是增加新的临时透明图层,并把新加的图层设置为活动层,然后在此活动层上增加新的地理信息,如点、线、图标等,并把它显示在电子地图上。
在活动层中增加无人机的航迹和图标是使用FeatureFactory对象库创建点、线、区域图像。需要注意的是:由点创建线和区域图像时,点的类型要求是VARIANT类型,为此需要借助IDispatch接口来辅助实现点的类型转换。
在LabWindows/CVI环境下的实现方法如下:
首先用如下语句获得点对象的句柄Dispatch接口指针,
CA_GetDispatchFromObjHandle(apoint,&dispatchPtr);其中apoint为点对象的句柄,dispatchPtr为Dispatch接口指针。
然 后 将 Dispatch的 值 转 换 为 variant类 型,CA_ VariantDispatch(dispatchPtr)。
2.4 地图上经纬度和高度的获取
在地图操作时,能够显示出用户操作点处实际的经纬高将为用户提供指导信息,可以方便地确定新添加的航路点信息。
操作点处经纬度获取的是将图形设备接口GDI坐标与经纬度坐标进行转换,关键函数为MapXLib_CMapXConvertCo ord(map,NULL,&ScreenX,&ScreenY,&MapX,&MapY,miScreenT oMap);其中ScreenX,ScreenY为鼠标所在屏幕处坐标,参数MapxX,MapxY 是经纬度信息。
高度值获取则是借助于数字高程模型[5]。由于矩阵格网DEM存储量最小(还可以进行压缩存储),便于使用且容易管理,因此文中采用规则格网DEM数据结构。对于高度值获取流程图如图2所示。
图2 高度值获取的流程图Fig.2 Flow chart for getting height value
2.5 多线程技术的应用
利用MapX在更新图层,当其他优先级较高的操作还在进行时MapX窗口就会出现“延迟太大”,“卡死”的情况。为了避免窗体界面出现这种情况,文中采用多线程技术协助MapX图像更新。
LabWindows/CVI 为多线程提供了两种次线程运行代码的高级机制,分别是线程池(thread pools)和异步定时器(asynchronous timers)[6]。线程池适用于需要不连续地执行或在循环中执行的任务,而异步定时器适用于在固定时间间隔内执行的任务。因此,文中采用线程池机制。具体实现步骤如下:
1)创建线程池;
2)创建线程;
3)运行线程函数;
4)释放线程池资源。
其中,在运行线程函数时,由于MapX地图操作只能主线程中进行,所以需要使用PostDeferredCall去调用主线程的指定函数。具体的实现代码如下:
PostDeferredCall(TickSoft,NULL);
static void CVICALLBACK
TickSoft(void *pD)
{
… //MapX图像更新函数
为了验证系统的工作性能,进行航迹回放实验验证。实验数据来源于车载惯导设备在环山公路上记录的数据,存放在Access数据库中。飞机的位置信息每1000 ms更新一次,航向信息每100 ms更新一次。实验效果图如图3所示。
图3 轨迹回放效果图Fig.3 Track display screen
图中黑色飞机图标表示的是无人机实际的地理位置,飞机图标的机头代表航向,红色线条为飞行轨迹。
测试结果表明,该轨迹显示模块实现电子地图的载入、放缩和自动漫游,能够在载入的电子地图中连续、准确、清晰地实时显示无人机的位置、航向和轨迹,解决了MapX窗口因响应不及时出现“延迟太大”,“卡死”的问题。
文中在LabWindows/CVI环境下,使用多线程技术辅助MapX[7]开发了无人机地面站的轨迹显示模块,同时验证了该模块的可靠性和稳定性。MapX进行二次开发同使用OpenGL从底层开发相比,避免了大量繁琐的底层代码开发,减少了工作量,大大缩短了开发周期,为小型无人机地面站的搭建提供了便利,但对于大型无人机地面站的三维视景的开发还有一定的局限性。
[1] 朱建新,张秋阳,谢习华.某型无人机地面站软件的设计与实现[J].中南林业科技大学学报,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].北京航空航天大学学报,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] 单体强,陈雷,张万发.LabWindows/CVI 多线程技术的应用研究[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++环境下MapX的开发技术[M].北京:冶金工业出版社.
[5] 王家耀,崔铁军,苗国强.数字高程模型及其数据结构[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测试技术及工程应用[M].北京:化学工业出版社,2006.
[7] 崔荣华.基于MapX雷达显控系统的设计与实现[J].现代电子技术,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—),男,河南灵宝人,硕士研究生。研究方向:无人机地面站的研制。