基于Google Earth的无人机地面站的地理围栏研究∗
2019-12-27强明辉把翠芳
强明辉 把翠芳
(1.兰州理工大学电气工程与信息工程学院 兰州 730050)(2.甘肃省工业过程先进控制重点实验室 兰州 730050)(3.兰州理工大学电气与控制工程国家级实验教学示范中心 兰州 730050)
1 引言
无人机从军用领域逐渐走向民用以及商用领域[1~2],便捷人们生活的同时,带来的社会安全问题[3]也逐渐暴露,尤其是闯入禁飞区域,引发“黑飞”、“乱飞”现象,威胁人员或者破坏公共设备[4]。地理围栏[5]技术是一种基于位置服务[5~6]的新应用,早在十多年前就被提出了,是人机交互服务类型中的一种,目前的应用场景多是应用程序[7]。地理围栏技术在无人机中的应用是近几年才被提出的,主要为了防止无人机进入禁飞区域,引发安全事故。国内外对该技术在无人机的应用还在研究阶段。2015年10月13日美国媒体KOED报道称,美国国家航空航天局(NASA)的某研究中心[8]目前正在研究一种被称为“地理围栏”的技术,通过该技术为无人机划分静态地理围栏,设置围栏事件。NASA无人机管理首席调查员KoDardekar还表示,设置两类地理围栏事件:禁止其他无人机飞入和禁止自家无人机飞出,同时依靠无人机飞行器中的传感器进行识别并避障。在国内,作为全球民用无人机行业领军企业的深圳大疆创新科技公司,目前是全球唯一一家研究地理围栏技术的民用无人机制造商。
地理围栏实质是真实世界地理区域上的虚拟边界,可以在定位源进入或离开时触发围栏事件。地理围栏在无人机系统的主要是安全性方面的应用,可以在地面站引入地理围栏,无人机无论在手动操控还是自动模式下,当进入禁飞域时,地理围栏算法通过定义的围栏事件,触发声音警报,使得操作人员能够操控无人机避让禁飞区域[9];也可以应用于无人机飞行控制系统,当无人机在自动模式下飞行时,在地理围栏算法的帮助下,无人机将不会进入禁飞区域。
本文将地理围栏技术作为解决无人机“黑飞”、“乱飞”安全事故的一种“新”技术引入,主要研究在无人机地面站系统中的地理围栏,在Visual Studio 2010.NET[10]的开发环境下,以C#语言为主,研究地理围栏算法,划分的地理围栏可以是多边形、圆形等,用户可以选择禁止无人机进入的范围,利用地理围栏算法画出一个多边形或者圆形禁飞区域,通过相应的地理围栏算法解算并判断无人机是否在禁飞区域内,实现如果无人机进入禁飞区域,就会显示带有信号框的报警信号或语音提示。
2 基于Google Earth的无人机地面站系统
无人机是无人机系统的控制对象,包括了飞行器本体、飞行控制器、负载设备(包括电池、图像传输[11]等)几个部分。地面站系统是整个无人机系统的重要部分,可以称之为无人机系统的大脑,协调整个系统的任务规划和导航控制。本文所涉及的无人机系统总体结构如图1所示,地面站系统由便携式PC机、地面站监控软件、图像接收设备、地面数据终端、通信设备等几个部分组成。
图1 无人机系统总体结构
地面站系统地面站监控系统对导航位置的精度要求较高,本文利用Google Earth客户端使得无人机监控系统能够加载更加精准地电子地图,模拟无人机的飞行仿真,实时显示观察无人机的飞行状态信息。但是目前无人机地面站的安全性能不高,尤其缺乏针对无人机“黑飞”、“乱飞”,引发事故的安全应用。在地面站中引入地理围栏技术,提高了无人机系统的安全水平,帮助无人机预先划分禁飞区域,构建基于地理围栏的避让禁飞区域的地面站,实现无人机的安全应用。
图2 地面站软件设计流程
基于Google Earth的无人机地面站系统[12]实现地理围栏功能,在Google地图中划分禁飞区域,然后由无人机机载GPS定位模块实时向地面站传送无人机位置信息,利用地理围栏算法解算无人机位置与预划分禁飞区域的位置关系,从而判断无人机是否进入禁飞区域,若未进入且没有进入禁飞区域的趋势,则无人机正常飞行;若进入禁飞区域,则通知地面操作人员,向飞行控制系统传达返航或避让指令,进而实现无人机对禁飞区域的避让。还可以根据不同的需求加载不同的三维模型[12],对无人机进行飞行模拟仿真。具体的软件设计流程如图2所示。
3 地理围栏算法
本文主要介绍两种典型常用的地理围栏算法:多边形地理围栏和圆形的地理围栏。基于Visual Studio 2010.NET开发地理围栏算法,利用基于Google Earth的地面站实现地理围栏功能,还包括像保存XML[13]格式的地图数据,加载已保存的数据,选择地图类型等功能,为无人机的飞行和地理围栏模拟提供基础。
3.1 圆形地理围栏算法
圆形地理围栏的示意图如图3。假设圆形地理围栏[15]圆心位置的为(x0,y0),地理围栏半径为r,无人机由机载GPS设备定位到的位置信息经纬度(X,Y),无人机与地理围栏中心点距离为d,那么存在如下判断规则算法:
判断规则1:d-r≤0时,此时无人机已到达指定的地理围栏。
判断规则2:d-r>0时,无人机在地理围栏外部,同时可由与前一状态的差值判断此时的无人机是不断接近或是远离地理围栏,若不断接近,说明有进入地理围栏的可能,需进行频繁地判断;若不断远离,正常飞行。
通过无人机飞行器系统的定位模块可获知无人机信息(X,Y),同时指定的围栏中心点的经纬度信息已知,求出无人机与围栏中心点的距离d。进入圆形地理围栏的算法为:d-r≤0,即设置的地理围栏触发事件。为了计算地理空间距离d,使用了“Haversine公式[16]”。
图3 圆形方法示意图
其中,R为地球半径,可取平均值6371Km。
由式(1)、(2)可求出d,如下:
3.2 多边形地理围栏算法
由于实际应用中,地理围栏侧重于对禁飞区域的实际形状边界的界定,因此地理围栏基本都是不规则的复杂多边形。多边形地理围栏算法的关键是找出有多少个节点在多边形[17]地理围栏内,即奇偶定理。
多边形地理围栏如图4所示,由无人机定位位置A向左作射线,将其作为水平阈值线,多边形每条边与水平阈值线相交的点表示为一个节点。那么地理围栏的算法判断规则如下:
判断规则1:在无人机位置的左侧存在奇数个节点,那么无人机在地理围栏内部。
判断规则2:在无人机位置的左侧存在偶数个节点,那么无人机在地理围栏外部。
图4 射线与多边形交点的几种可能情况
但也有特殊情况:例如水平阈值线刚好经过多边形围栏边界的一个顶点,如图4中所示,AB会被误认为和地理围栏两条边界都有交点,而AC与某一条边界共线被误认为与地理围栏边界有无穷多的交点。这些情况均会导致对于地理围栏事件的错误判断。
针对这些特殊情况进行判断的规则如下:其中假设当前处理的边是A1A2。
判断规则1:如果点A为无人机的位置,在多边形围栏边A1A2上,则直接判定无人机在地理围栏内部。
判断规则2:如果水平阈值线正好穿过A1或者A1A2,那么,若无人机坐标的纵坐标与A1,A2中较小的纵坐标相同,且在此次判断过程中,忽略这个交点。
判断规则3:如果水平阈值线与多边形围栏边A1A2平行,则忽略对其与该边交点的判断。
4 地理围栏功能的实现
4.1 圆形地理围栏功能
用户可以在圆形地理围栏功能选项中输入任意半径,在兴趣点上绘制一个圆圈。这个圆圈将作为禁飞区域,如果无人机跨越禁飞区域边界,则会出现语音提示以及消息框。与多边形地理围栏相比,圆形地理围栏更容易,用圆形地理围栏算法规则的C#代码实现地理围栏功能,实现效果图如图5所示。
图5 圆形地理围栏效果图
实现圆形地理围栏功能的C#代码如下:
public double Distance(Point y0x0pos1,
Point YX pos2)
{
int Radius=6371;
//地球的半径
double dY=this.toRad(pos2.Y-pos1.y0);
double dX=this.toRad(pos2.X-pos1.x0);
double inn_brckt=Math.Sin(dY/2)*Math.Sin(dY/2)+Math.Cos(this.toRad(pos1.x0))*Math.Cos(this.toRad(pos2.X))*Math.Sin(dX/2)*Math.Sin(dX/2);
double f=2*Math.Asin(Math.Min(1,Math.Sqrt(inn_brckt)));
double d=Radius*f;
return d;
}
private double toRad(double deg_val)
{
return(Math.PI/180)*deg_val;
}
if(r_circle.Checked==true & & r_poly.Checked ! =true)
{
Pointy0x0LL_circle=gMapfence1.Position;double d_re⁃sult=Distance(circle_centre,LL_circle);
if(d_result>(radius/1000))
{
Warningsound.Play() ; MessageBox.Show(“UAV Crossed boundary”,“Error”,MessageBoxButtons.OK);
}
}
4.2 多边形地理围栏功能
在基于Google Earth的地面站的Google地图上,在禁飞区域边界上选择关键顶点,连接绘制一个多边形边界,如图6所示,将某机场沿其边界划分为禁飞区。
地理围栏算法利用所选点来定义围栏边界,进而判断无人机的位置是否在边界内。多边形是任意形状的,对于复杂的多边形,很难判断无人机是在边界内还是在边界外[18],具体实现利用多边形地理围栏算法的判断规则。确定无人机的位置是多边形地理围栏内部或外部的C#代码如下:
Public bool FindUAVPs(double X,double Y)
{
int no_of_pySides=this.Count()-1;
int j=no_of_pySides-1;
bool UAVStatus=false;
for(int i=0;i<no_of_pySides;i++)
{
if(boundryPt[i].Y<Y & & boundryPt[j].Y>=Y
||boundryPt[j].Y<Y & & boundryPt[i].Y>=Y)
{
if(boundryPt[i].X+(Y-bndryPt[i].Y)/( bndryPt[j].Y-bndryPt[i].Y)*(bndryPt[j].X-bndryPt[i].X)<X)
{
UAVStatus=! UAVStatus;
}
}
j=i;
}
return UAVStatus;
}
上面代码的运行过程中,首先会检查(bound⁃ryPt[i],boundryPt[j])范围内的无人机位置的Y坐标,如果检查到,则继续检查无人机位置的X坐标是否在水平阈值线以下,从i点连接到j点,或者不连接。如果在这两个条件在奇数次都为真,则“FindUAVPs()”函数将返回true,那么无人机就在地理围栏里面;否则返回false,否则无人机就在地理围栏外面。
图6 多边形地理围栏效果图
5 结语
基于Google Earth的地面站系统[3]中地理围栏功能的实现,在Visual Studio 2010.NET的开发环境下,以C#语言为主,利用地理围栏算法在地面站系统的Google电子地图上用多边形或圆形地理围栏算法预先绘制虚拟边界,为无人机划分禁飞区域。无人机在飞行过程中,飞行控制系统通过遥测链路向地面站系统的地理围栏模块发送位置信息,通过地理围栏算法解算检查无人机是否进入禁飞区域,如果无人机越过禁飞区域边界,则在地面站收到音频和弹出消息框来通知操作人员。在具体实现应用方面,圆形地理围栏比多边形地理围栏容易实现,但是多边形地理围栏的精确度更高,后续工作中,进一步研究实现针对多边形地理围栏的实时地大范围索引技术,使基于地理围栏的地面站更具有实际工程价值,对无人机的安全应用具有深远意义。