1. 引言
无人机的地面控制系统,即地面站是无人机的重要组成部分。它是无人机系统的指挥控制中心,可以完成无人机的飞行操纵、数据链管理、机载任务设备控制,同时以数字和图形形式提供飞机飞行状态、图像侦查信息,实现对全系统的监控。目前,对于无人机地面站的研究已经成为国际上的一个研究热点。国外无人机系统地面站正在向智能化、通用化、模块化、系列化方向发展。随着计算机技术、计算机图形学和虚拟现实技术的飞速发展,无人机地面系统实践的不断深入,如何利用计算机网络、图形学和虚拟仪表进行无人机地面系统的设计成为了无人机地面系统研究的热点之一。
2. 无人机地面站系统简介
地面站是无人机系统的重要组成部分,它的任务是监测飞机的飞行状态和机载有效载荷的工作状态,使地面操作人员能够有效的对飞机和有效载荷实施控制[1] ,主要功能包括对无人机飞行数据的监测接收存储和回放从实际出发,利用VS2010开发环境,给出地面站系统的组成和软件设计。
3. 系统结构和功能实现
根据当前无人机飞行监控地面站技术现状,将系统划分为以下几个部分,系统主要分为通信、数据显示、数据存储和历史数据回放四个模块,系统总体结构如图1所示,系统主界面如图2所示。
3.1. 通信模块
3.1.1. 通信协议
无人机系统使用的通信设备是3DRobotics的3DR电台无线数传电台进行透明式数据传输,因而只需实现地面站与数传电台的通信,上下位机之间的通信是直接的、透明的,为了保证数据的一致性,通信设备的收发和数据输出接口均采用RS-232串行通信方式。
RS-232通讯使用标准DB9公针输出口,采用异步通信方式,数据接口的数据刷新率不得超过50帧/秒,不得少于10帧/秒,数据波特率可以选择为9600、19200、38400、115200这几种波特率,8位数据位,无奇偶校验,1位停止位,无硬件握手协议[2] 。数据采用如下结构:
使用RS-232串行通信必须采用异步方式,因此地面站的程序中,采用多线程的方法,在主进程中为每一个收和发都新建一个线程,保证接收数据、显示数据、存储数据、发送命令、输出数据等都得到及

Figure 1. Ground station’s overall structure of Quad-Rotor UAV
图1. 四旋翼无人机地面站总体结构

Figure 2. The main interface of Quad-Rotor UAV ground station
图2. 四旋翼无人机地面站主界面
时、有效响应。
3.1.2. 功能实现
由于地面站与无人机的通信不仅仅是遥控遥测数据的发送接收,还包括有效载荷数据的传送,会涉及到多线程和多串口因此,本设计选用了第三方通信类CserialPortEx,它更适用于地面站下一步的开发工CserialPortEx类是一个基于多线程的类[3] ,其工作流程是:当接收数据时,首先设置好串口参数然后开启串口监测工作线程串口监测工作线程监测到串口接收到的数据流控制事件或其他串口事件后,就以消息方式通知主程序,激发消息处理函数来进行数据处理;发送数据时,可直接向串口发送在CserialPortEx类中有多个串口事件可以响应,只需处理WM_COMM_RXCHAR消息,添加消息处理函数在主界面的头文件CGWView.h中加入该响应函数的声明:
//{{AFX_MSG(CGCSView)
afx_msg LONG OnCommunication
(WPARAM ch, LPARAM port);
//}}AFX_MSG
然后在MapDlg.cpp文件中进行WM_COMM_RXCHAR消息映射[12] :
BEGIN_MESSAGE_MAP(CGCSView, CRecordView)
//{{AFX_MSG_MAP(CGCSView)
ON_MESSAGE(WM_COMM_RXCHAR, OnCommunication)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
接着在主界面的源文件CGCSView.cpp中加入函数的实现,就可以对接收到的数据进行处理。
3.2. 数据显示模块
通信系统将解析后的数据送予航空仪表电子地图等控件,进行飞行状态飞行轨迹等信息的显示,以便地面操作人员对无人机进行可靠和有效的控制数据显示分为图形显示和文本显示图形显示具有直观,形象的特点,容易使用户有一种身临其境的感觉[4] ,但由于屏幕范围所限,这里只显示了一些相对重要的参数,如无人机的高度速度俯仰角航向飞行轨迹电池电压等。
3.2.1. 航空仪表
航空仪表使用GL Studio开发,如图3所示,GL Studio工具包主要由图形设计器和代码生成器两部分组成[5] 。图形设计器是一个三维所见即所得的绘制工具,它有10种图像原形,包括规则多边形、花键和True Type文本对象。设计器支持照片级纹理的应用,一切多边形的对象都可以贴图,纹理工具可以让用户导入使用大多数普通格式的贴图,如TIFF,JPEG,SGI,BMP等从而实现使用者完成仪表仿真。代码生成器被内建到GL Studio设计器中,并把图形设计器创建的文件生成可移植的C++源代码,这些C++源代码可以集成到其他仿真应用程序中[6] 。
3.2.2. 电子地图
无人机当前位置和飞行轨迹的显示主要通过电子地图来实现电子地图显示采用MapInfo公司提供的MapX控件在Visual C++中即导入MapX.h和MapX.cpp两个文件,如图4所示电子地图模块,调用MapX类然后在视图中载入电子地图,它是一个扩展名为*.gst的文件,可以通过MapInfo地图软件来生成最后运用MapX对象的属性和方法,实现地图的放大缩小和漫游等基本功能本设计中是用接口函数实现这些功能的,只需调用接口函数,并确定相应的参数就能达到操作地图的目的[7] 。
地图放大:m_ctrlMapX.SetCurrentTool(miZoomInTool);
地图缩小:m_ctrlMapX.SetCurrentTool(miZoomOutTool);
当前位置居中:m_ctrlMapX.SetCurrentTool(miCenterTool);
地图漫游:m_ctrlMapX.SetCurrentTool(miPanTool);
轨迹显示的实现主要通过调用地图/屏幕坐标转换函数,将接收过来的经纬度(即地图上经纬度坐标)转换为窗口中对应的坐标值(即屏幕上设备坐标),再根据屏幕上的设备坐标绘制出飞行航迹地图[8] ,屏幕坐标转换函数的原型如下:
//将屏幕坐标转换为地图坐标
m_Map.ConvertCoord(&ScreenX, &ScreenY, &MapX, &MapY, miScreenToMap);
//将地图坐标转换为屏幕坐标
m_Map.ConvertCoord(&ScreenX, &ScreenY, &MapX, &MapY, miMapToScreen);
添加航迹显示函数,在视图的头文件中加入响应函数的声明:
//{{AFX_MSG(CGCSView)
afx_msg void OnToolTrace();
//}}AFX_MSG
在视图的源文件中加入该消息映射:
BEGIN_MESSAGE_MAP(CGCSView, CRecordView)
//{{AFX_MSG_MAP(CGCSView)
ON_COMMAND (ID_TOOL_TRACE, OnToolTrace)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
接着在视图的源文件中加入OnToolTrace()函数的实现,就可以实现飞行航迹的显示功能无人机飞行轨迹在电子地图上的显示是通过增加新的层,并把新层设置为活动层,然后在新层上增加新的特性,新的特性的颜色形状大小可以按照自己的要求定义,最后把它显示在地图上来实现的在无人机运动过程中,根据接收到的不同信息,可以将无人机定位到不同的位置,然后刷新地图就能实现无人机的移动。
3.2.3. 文本数据显示区
地面站中除了以仪表和地图显示飞机状态外,还包括文本数据显示区,使得地面控制人员能够精确的掌握飞行参数,这些参数包括惯性导航数据、GPS定位数据、飞行状态监控数据等[9] 。如图5所示状态数据显示区。
惯导数据显示区主要显示惯导系统给出的空中机器人导航数据,如上文所述,包括:俯仰角、横滚角、航向角,空速,气压高度,三轴线加速度、三轴角加速度。角度的单位为弧度(rad),空速的单位为

Figure 5. Data display area of airplane status
图5. 飞机状态数据显示区
Km/h,气压高度单位为m,加速度单位是m/s2。
GPS定位数据显示区需要显示的数据为:GPS经度(分)、GPS纬度(分)、GPS高度(m),GPS地速(m/s),爬升率,航迹角(rad)、磁偏角(rad),EHPE、EVPE,星数,时间(纳秒)。
飞行状态监控区主要包括以下数据的显示:开关指令回报,舵机转角、电机转速回报,飞机电源电量,飞行状态[10] 。
3.3. 数据存储模块
数据库需要记录所有空中机器人回传的飞行参数数据,特别是惯导数据和GPS数据,并提供数据输出接口,供数据分析。利用Access数据库,将实际飞行的数据进行存储设计中采用可以使用SQL语言的ODBC接口将数据保存到数据库中将实际飞行的数据进行存储后[11] ,可以在实时飞行结束之后,通过数据回放,用户可以更加仔细地研究这些数据,从而找到改进系统的方案。除此以外数据库还有专门的数据表用于存储和管理扩展功能的数据。本地面站数据库管理系统实现了数据的日常管理如查询、修改、导出等功能[12] 。
3.4. 历史数据回放模块
在选择了数据回放功能后,系统按照回放要求重新初始化程序,在初始化结束后,通过弹出对话框的方式供用户选择要回放的数据块选择结束后,系统从数据库中读出所选择的数据,并将数据显示在界面上,供用户分析,讨论结果。
4. 测试及验证
以上程序已通过自行编制的地面站测试程序的验证,该地面站系统完成了如下功能:数据的实时接收处理显示存储回放电子地图与实际航线的同步显示与配准等功能,清楚地显示了无人机的重要飞行参数测试结果表明此地面站可以较好地进行无人机飞行参数的监测,工作稳定,可靠。
5. 结束语
介绍了VC++环境下无人机地面控制站的设计与实现,并且对设计中的一些关键技术进行了验证无人机地面站可以较好的监测无人机的飞行状态,这为今后进一步的研究打下了基础此外,无人机地面站在实际应用中要与飞行区域的电子地图相匹配,因此还需要通用的数字地图库这些问题是下一步努力的方向。