权聪
(国营长虹机械厂,广西 桂林 541003)
近年来,无人机的应用与研究受到了广泛的关注,成为各大国之间竞争的主要领域。地面站软件作为无人机远程控制的核心关键组成部分,无人机控制人员通过地面站系统提供的地面站软件与无人机进行交互。操作人员在无人机飞行任务开始前提前规划好飞行航线,地面站实时监控无人机的飞行状况,并通过实时修改任务改变无人机的飞行航线,在无人机完成飞行任务后,对飞行存储的数据进行回放分析。航路规划与航线操作功能作为地面站软件的核心组成部分,起到了重要作用。无人机在每次飞行任务前,都需提前进行本次飞行任务的航路规划,航点对应着无人机本次飞行经过的位置,在设置飞行航点时,需要设置无人机飞行器所具有的速度、位置、航向信息等数据,多个有序航路点组成了一条飞行航线。规划好航线后,将该航线装订并通过网口发送飞控计算机,无人机就会按照规划好的航线完成本次飞行任务的各项飞行动作,依次按序飞过各航点执行飞行任务。
航路规划在无人机导航中起到了至关重要的作用,无人机航路规划时,根据任务的预设目标规划好本次飞行任务的轨迹。航线由多个有序的航点组成,规划好的航点和航线拟合成航迹在地图上直观显示,航点、航线数据保存在文本中,方便执行下次飞行任务时调用。
(1)航点信息管理。航点信息的增加、删除、插入(鼠标点击在列表控件某行点上,点击插入行点,会插入该行点之后)、航点信息的保存和加载功能。
在软件界面上,将所有航点信息显示在一个ListContral 列表控件中,该列表的每个数据对应一个规划好的航点,每一列对应该航路点的经纬度、航点序号、速度和高度设定值、状态字等信息,起始位置信息下方有航点添加、航点删除、航点插入、航路点信息保存和航路点信息加载等按钮,如图1 所示。
图1 软件整体界面图
(2)地图数据到列表数据的交互功能。切换街道地图和卫星混合地图、航点的拖拽(航点坐标更新到列表)、地图的缩放、地图的移动,航点坐标信息的显示等基本地图功能等;地图切换为卫星图,如图2 所示。
图2 地图切换卫星图
(3)列表数据到地图的交互功能。修改列表数据信息,点击更新按钮,地图数据也会随着列表数据的更改而更新。
(4)条件插入航点功能。根据已知基准点的航向角、距离插入新的航点(可以插入基准点后,也可以插入最后);已航点3 为基准,航向角180°,距离100000m处插入航点4,效果如图3 所示。
(5)地图测距功能。测量航点之间的距离和测量整个航路的距离,效果如图4 所示。
(6)航线选择功能。航线为直线或者曲线,效果如图5 所示。
图5 航线曲线选择功能
(7)清除所有航点功能。清除地图上的所有数据和列表控件上的所有数据。
(8)航路点信息的管理与保存。为了后续任务的航路点的加载,将设置的航点保存在文本中,把航路点信息保存在数据库中,每次对航路点进行操作都将同时更新数据库中数据表的记录,数据库航点存储表的结构如表1 所示。
表1 PathPointTable 表
航点信息存储:读取Listcontral 列表数据,并把列表数据进行文件存储,保存成.log 文件,并按时间命名,如图6 所示。
图6 航点信息存储效果图
(9)规划好的航线在地图上的标示。规划好一条航线后,载入地图,鼠标点击地图就会设置一个航点,多个航路点绘制出无人机飞行航线的轨迹,用Element标注航点,用直线或弧线将航路点连接起来,形成的Line 曲线表示航线,如图7 所示。
图7 航线表示
(10)大数据量的航点加载功能:选择航路文件,加载已保存的航点信息,并显示在地图上,如图8 所示。
图8 航点文件加载功能
本地面站系统的开发使用集成开发环境是微软公司的Visual Studio2010,系统软件运行在Win7 及其以上操作系统。基于性能方面考虑,采用基于MFC 应用程序框架,地图部分的实现是基于百度的离线地图,这是百度公司为了方便地理信息系统的二次开发而设计的一款功能非常强大的GIS 开发包。
电子导航地图为现代无人机的飞行提供导航服务,无人机飞行过程中使用电子导航地图显示导航轨迹。依据无人机下发状态数据包中包含GPS、北斗等卫星导航提供的经纬度信息,实时地在地图上标注无人机当前准确位置和航向,在无人机导航中起到了至关重要的作用。
由于航路规划需要在地图上实时标注飞行器的位置、航向、规划好的航路和实际的历史轨迹等信息,地面站软件需要实现地图导航的基本功能。本子系统的实现使用了百度公司的产品,基于百度地图开发工具包的二次开发,百度Map 作为一组嵌入式脚本语言可以跨平台使用,它是百度地图软件产品的底层模块,可以用来构建GIS 和桌面地图应用程序,或是在原有的地图软件上增加新的功能。
(1)将百度地图的JS 文件本地化并与服务器进行交互。将百度map 加载时需要的JS 文件下载到本地终端,在后续应用程序开发时,不需引用百度网站上的JS 文件,只需调用本地的JS 文件。调用百度map API时,需要使用百度map JS 文件,百度提供了本地化JS map3.0.js 文件,可在百度官网上进行下载。
(2)将百度 map 的地图数据(tiles:瓦片)下载到本地以及应用的开发。提到地图数据,首先需要了解百度 map 的基础知识。百度将浏览器中显示的导航地图,分割成一张一张图片,起名为tile,为了能够浏览显示的百度地图,需从百度官方网站下载所有tile,然后将这些tile 拼接在一起,就能够展示出一张完整的百度地图。地图每一个tile 都是大小为256×256 的PNG 或jpg 图片,因为百度地图存在级别为0 ~19 缩放功能,因此在每个缩放级别中,地图的显示区域被划分为多个tile 图片,每个tile 图片会根据百度站点下载对应的地图数据,地图数据其实是一张张PNG 或JPG 图片,在百度地图请求获取tile 图片数据时,将三个重要的参数传递给地图,分别为地图x 坐标数据、y 坐标数据及当前显示的地图的缩放级别。
(3)MFC 调用百度离线地图。VS2010 中添加web browsers(Active X 微软操作系统自带)控件,为控件增加成员变量m_web,在初始化的程序中调用以下代码加载百度地图。
百度离线地图的html 网页实现(在工程文件下的map_LINE.html 和map_CURVE.html 中)具体实现要调用百度地图API 函数。
(4)MFC 界面到地图的数据交互(VC 与JavaScript 交互)。在VC 中调用WebBrowser 时,有2 种方法可以调用。MFC 中存在一个CHtmlView 类对WebBrowser 进行封装,调用方便快捷。CHtmlView 类是由CView 派生而来,在MFC 中被称作视图类,CView 类是由CWnd 派生而来,将其应用在对话框类中,不存在使用兼容性问题,只需修改一小部分内容即可。其中特别需要注意的以下两个问题:
CHtmlView 类的构造函数是protected 的,因此在程序中不允许直接构造一个CHtmlView 类对象。必须在CHtmlView 类上进行派生后才能构造。如果将创建CHtmlView 类对象应用到栈上,必需重新调用PostNcDestroy( ),该函数体内容为空。因为默认的PostNcDestroy( )函数会delete( ) this 出错。如果将创建CHtmlView 类对象应用到堆上,则需要注意防止二次delete。
另一种方法是调用WebBrowser 的ActiveX 控件,该方法既可以应用在在MFC 项目中,也可以在非MFC 项目中使用,本系统软件工程使用ActiveX 控件;
需要调用类CWebPage,将其对应的两个文件WebPage.h 和WebPage.cpp 添加到工程中;MFC 调用JS中的函数AddPoint( ),并传递2 个参数(纬度,经度,航点号)。
(5)地图到MFC 界面的数据交互(JavaScript与VC 交互)。一个JavaScript 对象传到了C++ 这边以后,就变成了一个IDispatch*,然后我们用CComDispatchDriver 接管这个IDispatch*( ) 后,就可以调用这个JavaScript 对象的方法,获取这个JavaScript 对象的属性,实际上CComDispatchDriver就是对IDispatch( ) 的包装, 最终都是调用IDispatch::Invoke( )。同理,如果我们在C++ 这边构造出一个IDispatch* 并传递给JavaScript,那么JavaScript 就可以把这个IDispatch* 当作一个JavaScript 对象来使用,自然它就可以调用这个对象的方法,修改这个对象的属性,最终就可以实现调用C++函数,修改C++对象的成员变量,实际上JavaScript调用C++也是通过IDispatch::Invoke( )来调用。那么如何构造这个IDispatch 就是问题的关键点。
这种方法,需要先把IDispatch*( )示例代码中是this,但因为this 是CPathPlanDlg( ) 的实例,而CPathPlanDlg( )多重继承于IDispatch( ),实际this 就是IDispatch*传递给JavaScript,JavaScript把它保存好,然后调用。
航路规划系统是实现无人机自主飞行和避障导航的关键系统。针对航路规划系统国内外学者进行了数据分析,多半是针对控制规律和系统安性进行研究设计,鲜有人考虑无人机地面站控制系统的人机交互策略。依据现有的飞行器适航规范标准归纳总结航路规划软件系统设计的技术难点,设计了一款无人机航路规划软件,但是系统设计未考虑突发及极端环境下无人机规划航路规划的自适应规避算法。在后续的研究中将继续完善地面站平台的功能,实现无人机自主导航的过程监测和异常处理,以提高无人机系统的稳定性与可靠性。