仲筱艳, 黄大庆
(南京航空航天大学无人机研究院 南京 210016)
基于ArcGIS的无人机测控站地图导航模块设计∗
仲筱艳, 黄大庆
(南京航空航天大学无人机研究院 南京 210016)
提出一种新的无人机地面站地图导航模块的设计方法。方法利用Google Earth获得高清卫星图片,采用ArcGIS快速生成所需要的地图,为无人机试飞提供一种高效便捷的数字地图获取方式;同时采用基于ArcObjects二次开发的方法,实现无人机地图导航模块的航线规划和航迹显示功能,大大提高了开发效率。
无人机; 地面站; ArcGIS; ArcObjects; Google map
无人机地面站是无人机系统的指挥控制中心,而地面站软件是地面站的重要组成部分。无人机地面站软件集飞行监控、地图导航、数据回放三大功能于一体,可同时对多架无人机进行控制与管理,以完成既定的飞行任务。地图导航模块主要实现地图导航和航线规划功能,旨在实现自动化的航迹规划,并对无人机进行实时导航控制,是地面站软件的重要组成模块。为了实现无人机的飞行导航功能,不可避免地需要使用电子导航地图。目前地面站使用的电子导航地图主要通过纸质地图扫描或商用电子地图两种渠道获得,但是扫描的地图坐标误差较大,需要做大量的校准工作,普通的商用电子地图在无人机试飞地区分辨率较差,无法满足试飞要求。鉴于Google Earth数字平台能够提供多级卫星图像和数字地图,本文提出一种利用ArcGIS对Google Earth数字平台提供的数据进行处理,从而获取导航电子地图的方法。本文还针对获取的导航电子地图,采用基于ArcObjects二次开发的方法,设计了无人机地面站地图导航模块。
地图导航模块主要为无人机测控站提供地图导航与航线规划功能。地图导航功能为无人机地面控制人员提供导航平台,飞行过程中将无人机的预设航路、实时航迹和当前位置实时标示在电子地图上。航线规划功能指飞行前,操作员根据预定的飞行计划规划好本次任务的飞行航线,然后将这一规划发给无人机,用于飞行过程中的显示和与实时航迹的比对。可见,地图导航模块应具备如下功能:能应用鼠标放大、缩小和漫游地图;能够实时显示鼠标在地图中的位置和对应的经纬度坐标,以此来确定目标航路点;能够通过鼠标操作添加或编辑航路点,规划无人机飞行航线;能实时显示代表无人机的图标在地图中的位置和实际的地理坐标,确定无人机当前位置。
地理信息系统GIS(Geographic Information System)是管理地理信息的计算机应用技术分支,具备地理信息的采集、存储、管理、查询、分析和显示等功能[1]。地理信息系统以数字化的形式呈现各种地理空间数据,并描述这些数据特征的属性。现在很多地理信息系统已经实现了组件化的二次开发模式,使得基于这些GIS系统的应用开发更加快捷高效。下面介绍一种本文使用的地理信息系统及其二次开发组件。
2.1 ArcGIS地理信息系统
美国ESRI(Environmental Systems Research Institute,Inc.)公司的ArcGIS地理信息系统是一个功能完善、可伸缩的开放地理信息平台,具有完善的地理数据显示、编辑、管理和分析等功能[2]。ArcGIS软件体系分为四个部分:Desktop GIS、Embedded GIS、Sever GIS和Mobile GIS。本文主要用到了Desktop GIS和ArcGIS Engine两个子系统。Desktop GIS由ArcMap、ArcCatalog、ArcReader等单个软件组成,综合这些软件的功能,用户可以完成制图、数据编辑与管理、地理分析、可视化和空间处理等各种GIS任务。ArcGIS Engine是用于构建定制应用的一个嵌入式GIS组件包,它封装了ArcObjects中的大部分组件库[3]。利用ArcGIS Engine,开发者可以将GIS功能作为应用软件的一部分集成到开发的应用程序中。
2.2 ArcObjects
ArcObjects是一个GIS框架,它是基于Microsoft的COM技术开发的一套COM组件对象集[4]。开发人员可以利用ArcObjects框架提供的各种组件进行二次开发,实现各种GIS功能扩展。
使用基于ArcObjects组件库的应用开发有以下三种方式[5,6]:①VBA(Visual Basic for Application)定制开发。利用ArcMap内嵌的VBA调用ArcObjects组件编程实现桌面软件的功能扩展,这种方法比较简单,但是无法用于独立应用程序的开发。②创建客户化组件。通过ArcObjects中的ICommand和ITool等接口编写客户化组件,编写好的组件可以集成到ArcGIS系列软件中。③开发独立应用程序。基于VC++、VB等开发环境可以直接嵌入ArcGIS Engine提供的MapControl、TOCControl、ToolbarControl等ActiveX控件,快速开发带有GIS功能的应用程序。本文开发的是一个带有GIS功能、用于辅助地图导航的独立地面站软件,所以采用第三种方法。
谷歌地球(Google Earth)是一款把卫星照片、航空照相和GIS布置在一个地球三维模型上的虚拟地球软件。利用它提供的免费高精度卫星图像,采用ArcGIS软件可以快速绘制出较为精确的地图,供地图导航模块使用。
3.1 Google Earth
Google Earth是谷歌公司在2005年推出的一款全球卫星地图和地理信息展示软件。该软件以高分辨率卫星影像和航拍照片为底图,配合公路、区划、水域等矢量地图,实现了导航、网络搜索和三维地形展示等功能。它提供了ArcGIS、MapInfo等地理数据应用程序接口,可实现与其他遥感软件的交互性操作,其性能优于国内外众多网络GIS平台。运用该软件可以获得区域地形地貌和交通道路等影像资料,结合GIS的相关功能,可做出精度完美的地图。
3.2 影像的获取
Google Earth软件的地理数据是通过卫星拍摄的影像数据与航拍的数据整合而得的。得到Google Earth影像的方法有三种。第一种是直接保存法:打开Google Earth找到研究区域,将区域放大直接保存为JPG格式的图片,图片之间保留适当的重叠区域便于拼接[7]。采用这种方式,影像清晰度高但后期存在拼接误差,影像上也有一些界面标志无法消除,影响了后期的配准和地图矢量化。第二种方法是通过GetScreen软件进行截图。生成文件有两个:一个是截图区域的影像图片,另一个是扩展名为map的同名文件,包含了图片的基准面、投影及地理校正信息[8]。这种截图方式较为准确,它能够自动拼接图片,但是得到的研究图片清晰度不高,同样影响了后期的配准和矢量化操作。第三种方法是通过Daogle Google Map Downloader自动下载,生成带有坐标的tif格式的栅格影像文件。这种方式截取的图片质量较高,便于后期的配准和矢量化。
本文采用第三种方式,在获取原始栅格影像图像后,通过ArcGIS制作mxd格式的地图影像库。
3.3 利用ArcGIS制作mxd地图影像库
制作mxd格式的导航地图影像库需要用到ArcGIS系统中的ArcMap和Arc Catalog两个软件。首先利用Arc Catalog创建影像文件的栅格目录(Raster Catalog),再在ArcMap中创建mxd地图影像文档。
利用Arc Catalog创建影像文件栅格目录的步骤如下:①在Catalog根目录中建立影像数据目录;②在新创建的影像数据目录上创建Geodatabase影像数据库(File Geodatabase);③在新创建的影像数据库上创建栅格目录(Raster Catalog),需要注意的是创建Raster Catalog时要在“Coordinate System for Geometry Colum(Optional)”中指定好坐标系,否则生成的栅格数据无法显示正确的坐标。创建完成时,数据库中就会出现新创建的栅格目录;④向栅格目录中添加栅格数据,添加完成后,如图1所示,点击Catalog目录树下的栅格目录,在右边的“Contents”选项下,显示它所包含的数据项;⑤创建影像金字塔,影像金字塔是一种对栅格影像按逐级降低分辨率的拷贝方式存储的方法,在数据操作时,根据需求直接取其中某一级作为操作对象,提高整体效率。
图1 添加完成效果
在ArcMap中创建mxd地图影像文档的步骤如下:①在ArcMap中创建一个新工程;②向“Layers”中添加ArcCatalog中创建的影像数据的栅格目录gdb,进行相应的显示设置后,出现图2所示的影像文件预览,保存为mxd文件,即为需要的地图文件。产生的数据影像文件夹中除了有tif、mxd文件之外,还有“aux”、“rrd”文件以及数据库文件datatif.gdb,使用地图影像文件仅需要gdb和mxd文件。
综上,利用Google Earth得到高清卫星图片,然后通过ArcGIS矢量化快速得到所需要的地图。
为了使用上述采用ArcGIS生成的地图,无人机地面站地图导航模块也需要基于ArcGIS进行开发。本文基于ArcGIS Engine9.3开发工具包,在VC++6.0中使用COM API的二次开发方法来实现。ArcGIS Engine用户开发包提供了ActiveX控件、工具条与GIS工具和ArcObjects对象组件库三种主要集合。地图浏览功能使用MapControl控件实现,同时加入了Toolbar工具条控件来辅助实现地图的载入、放大、缩小、浏览、拖动等各项操作。为了在地图上标示飞行器的飞行状态,调用ArcObjects的多种对象和接口绘制地图的客户图层,标示飞行器的位置姿态、飞行轨迹、航线规划等信息。
图2 显示设置完成效果
4.1 导入ArcObjects组件库
使用ArcObjects提供的接口与对象需要在项目中导入ArcObjects组件库(.olb)。要使用到某个对象或者接口,就先把该对象或接口所在的组件文件导入到项目中。
4.2 载入地图与地图浏览
载入地图和地图浏览功能是地图导航软件最基本的功能,该功能使用ArcObjects中的地图控件MapControl和工具栏控件ToolbarControl来实现。其实现步骤如下:
①在对话框中添加这两个控件,如图3所示。
图3 向项目中添加地图控件和工具栏控件
②修改ToolbarControl的属性,往控件中添加载入地图、地图缩放、地图漫游等工具栏按钮,完成基本的地图操作功能。完成后的工具栏如下:
4.3 绘制客户图层
在ArcGIS中,视图通过地图控件显示。可以显示在地图控件上的图形分为两种:一种是基于Layer的要素(Feature)等存储在数据库中的数据,另一种是元素(element)。元素是一个地图中除去要素数据外的部分,即在一幅地图中,除了保存在数据库中的地理数据外,其余的对象全部是元素。
在地图上标示无人机的位置、航点的位置和航线走向等,需要在地图的客户图层上绘制一些点、线、图标等元素对象。元素是一个庞大复杂的对象集合,主要包含图形元素和框架元素两大类,本文用到的是图形元素。图形元素包括MarkerElement(点)、LineElement(线)、TextElement(文本)和PictureElement(图片)等对象,它们都是作为图形的形式而存在的,在视图上是可见的。这些图形元素的几何形体是Geometry对象,有Ipoint(点)、Icurve(曲线)等;而Element的图形外观要用到symbol对象,有Markersymbol(点)、Linesymbol(线)、Textsymbol(文本)等。
在地图上绘制一个图形元素需要定义一个Geometry对象和一个symbol对象,Geometry对象是图形元素的载体,而symbol对象是该图形元素显示的内容。以在地图的客户图层上绘制一个点为例,流程图如图4所示。绘制线、图片、文字的过程类似,仅需要将相应的Geometry对象和symbol对象替换即可。
图4 在图层上绘制点流程图
4.4 扩展功能实现
上文介绍了基于ArcGIS Engine的地图基本开发方法。下面介绍如何实现地图导航模块的主要功能。
4.4.1 航迹显示功能
地面站收到无人机下行的状态帧,解析得到定位信息中的经纬度和航向,将实时获得的点添加到保存航迹的线中,然后更新无人机在地图上的航迹线。同时,为了显示当前飞机所在位置,在飞机当前位置上添加symbol对象为图片、Geometry对象为一个点的图形元素,航迹显示效果如图5所示。图中白线为预设航路,黑线为实时航迹,飞机当前位置为飞机图标所在位置。
图5 航迹绘制图
4.4.2 航路规划
①新建航路
通过在地图上单击鼠标左键添加一个航点,双击鼠标右键完成新建航路。具体实现过程如下:定义一个IPointCollectionPtr变量m_TraceCollection用于存放新添加的点,在MapControl控件的OnMouseDown事件响应函数OnMouseDownMapControl中,在每次鼠标取点后将鼠标获取的点存放在点集m_TraceCollection中,当航点添加完成后,双击鼠标右键,此时m_TraceCollection点集就是依次存储的航路点。航路新建完成后,将航点的信息保存到航路文件备用。主要实现代码如下:
void CMapCtrol::OnOnMouseDownMapcontrol
(long button,long shift,long X,long Y,double mapX,double mapY)
{
//获得鼠标点击点
IPointPtr ipPoint(CLSID_Point);
ipPoint->PutCoords(mapX,mapY);IPointCollectionPtr m_TraceCollection;
m_TraceCollection->AddPoint(ipPoint);
m_iPathPointCount++;
//绘制新增点
IMarkerSymbolPtr imakersymbol(CLSID_SimpleMarkerSymbol);
DrawPoint(ipPoint,imakersymbol)
//绘制新增航线
IPointPtr ip1(CLSID_Point);IPointPtr ip2(CLSID_Point);
m_TraceCollection->get_Point(m_iPathPointCount-2,&ip1);
m_TraceCollection->get_Point(m_iPathPointCount-1,&ip2);
DrawLine(ip1,ip2,m_iLineSymbol);
}
②航点修改
航路规划中,当航线处于编辑状态时,采取鼠标点击地图的方式快捷添加、删除、移动航点给操作员规划航线带来了很大的便利。其中移动航点是一个比较难实现的功能,可以采用IMovePointFeedback接口实现这一功能,主要实现过程如下:
a)定义IMovePointFeedback的变量:pMPointFeed;
b)将鼠标移动到需要操作的点,按下鼠标左键获取该点:
void CMapCtrol::OnOnMouseDownMapcontrol
(long button,long shift,long X,long Y,double mapX,double mapY)
{
IPointPtr ipPoint(CLSID_Point);
ipPoint->PutCoords(mapX,mapY);
CoCreateInstance(CLSID_MovePointFeedback,NULL,CLSCTX_ALL,IID_IMovePointFeedback,(void∗∗)&pMPointFeed);
pMPointFeed->putref_Display(pScreenDisplay);
IPointPtr pStartPos;
pMPointFeed->Start(pStartPos,ipPoint);
}
c)按住鼠标并移动,移动鼠标过程中显示该点的当前位置:
void CMapCtrol::OnOnMouseMoveMapcontrol
(long button,long shift,long X,long Y,double mapX,double mapY)
{
IPointPtr ipPoint(CLSID_Point);
ipPoint->PutCoords(mapX,mapY);
pMPointFeed->MoveTo(ipPoint);
}
d)松开鼠标后,获取点的当前位置:
void CMapCtrol::OnOnMouseUpMapcontrol1
(long button,long shift,long X,long Y,double mapX,double mapY)
{
IPointPtr pStopPos;
pMPointFeed->Stop(&pStopPos);
}
上文简要介绍了无人机地面站地图导航模块主要功能的实现方法,系统中实现的其它功能(如航路删除、航路整体移动、航路复制等)的实现方法在此不一一赘述。总之基于ArcGIS Engine可以实现强大的地图导航相关功能模块的开发,满足无人机地面站导航功能的需求。
本文提出一种利用ArcGIS平台对Google Earth数字平台提供的数据进行处理获取导航电子地图的方法,实现了在任何时间、任何地点都能方便地获得任何地区的电子地图。针对获取的导航电子地图,采用基于ArcObjects二次开发的方式,进行无人机测控站地图导航模块的开发,实现了地图导航模块的各项功能,该模块已成功应用到某型无人机的地面测控站系统中,并在飞行试验中取得了理想效果。此外,该地图导航模块还可以方便地移植到其它无人机测控站软件中,提高地面测控站软件的开发效率。
[1] Zeiler M.Modeling Our World.ESRI Press,Redlands,US,2001.
[2] ESRI Inc.Getting Start with ArcGIS.ESRI Press,Redlands,US,2004.
[3] ESRI Inc.ArcGIS Engine Developer’s Guide.ESRI Press,Redlands,US,2004.
[4] 童兆国,刘 南,刘仁义,等.基于ArcObjects组件式扩展的标准化地图制图实现[J].计算机应用研究,2006(2):240~242.
[5] 白亚茹,陆 鑫.基于ArcObjects的GIS应用软件开发[J].计算机工程,2009,35(14):66~68.
[6] 赵万锋,刘 南,刘仁义,等.基于ArcObjects的系统开发技术剖析[J].计算机应用研究,2004,21(3):130~132.
[7] 朱超平,王海滨,周 亮,等.如何利用Google Earth绘制校园平面图:以湖北大学为例[J].湖北大学学报(自然科学版),2008,30(1):93~94.
[8] 莫平浩,胡茂林.利用Google Earth制作卫星影像图[J].电力勘测设计,2008(4):30~31.
Design of Map Navigation Module for UAV Ground Station Based on ArcGIS
Zhong Xiaoyan, Huang Daqing
A new design method of UAV ground station map navigation module is proposed in this paper.By the means of getting high definition pictures from Google Earth and making digital maps by ArcGIS,a new and convenient method to get digital maps for UAV flight-testing is provided.Meanwhile,based on the ArcObjects component of GIS development technology various functions of map-based UAV navigation such as flight path planning and displaying are realized,which highly improve the development efficiency.
UAV(Unmanned Aerial Vehicle); Ground station; ArcGIS; ArcObjects; Google map
TP79
A
CN11-1780(2014)02-0025-07
仲筱艳 1980年生,助理研究员,工学硕士,毕业于南京航空航天大学通信与信息系统专业,现从事无人机测控方面的研究设计工作,研究方向为遥控遥测。
中央高校基本科研业务费专项资金支助(No.NZ2012019)
2013-09-16 收修改稿日期:2013-12-16
黄大庆 1959年生,研究员,博士生导师,毕业于南京航空航天大学雷达与电子对抗专业,现从事无人机航电总体、遥控测控等方面的研究工作,研究方向为遥控遥测、电磁兼容。