Skip to content

SysuUavFormation/UAV_Formation_Ground_Station

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 

Repository files navigation

集群无人机分布式编队飞行上位机系统

项目目的

室外场景中集群无人机基于GPS的分布式编队飞行,项目工作:

  1. 分布式自主协同编队
  2. 集群内无人机之间的避碰
  3. 实时路径规划
  4. 无人机与地面站、无人机之间的实时信息传输

为何开源

无人机协同编队控制系统涵盖控制与通信,其中控制部分包括无人机的路径规划和轨迹跟随控制;通信部分包括多架无人机之间的通信、无人机与地面站之间的通信。我们构建了集群无人机编队飞行的基础平台,实现了集群的三维队形生成与队形切换、合作式避碰、编队保持、通信协议以及上位机系统。内嵌离线谷歌地图的上位机使用Qt开发,可实时监控各无人机的状态,并能随时接管无人机的控制;同时,上位机系统包括三维队形生成与队形切换、目标点匹配、手动设置目标点以及通信协议的功能模块。考虑到QT的跨平台型,开源上位机系统可以给更多的对于集群无人机自主编队飞行感兴趣的开发者们减少前期环境搭建的时间开销,更好地进行集群无人机分布式编队飞行方面的开发,希望更多的对于集群无人机自主飞行感兴趣的开发者们可以一起继承完善该上位机工程,同时对于不同的开发者们,我们允许并且友好的提供通信协议的接口,可以改进我们现有的通信协议,或者采用开发者自己的通信协议(修改或替换UAV_link类的相关函数实现),维护该上位机工程的多态性和可扩展性。

流程图

image

上位机工程

地面站,也就是地面的基站,它能够通过GPS和串口通信实时监测无人机当前的飞行路线、状况等,能够发送命令,控制调度无人机群,也能够存储无人机群的飞行数据以进行后期的分析等。
考虑到QT的跨平台型,上位机工程由Qt编写。测试使用系统为Windows7、Windows8.1和Windows10,使用的Qt Creator版本为Qt Creator 3.4.2(opensource)。Qt Creator编辑文本格式为UTF-8。

功能说明

  1. 上位机与无人机进行串口通信
  2. 上位机实时监测无人机位置并在地图上显示
  3. 上位机可以发送相关指令控制无人机
  4. 上位机实时显示无人机状态,和具体坐标

地面站上位机实现人机交互功能主要依赖于三个子界面:串口配置页、地图页和状态页。

页面 功能
串口页 串口配置;与433M无线模块通信,获取无人机通信网络中的信息,并将地面站的信息发送到无人机通信网络中
地图页 监测:将串口页获取到的无人机位置信息实时显示到google离线地图上
地图页 控制:发送起飞、降落、停止、执行任务(包括编队飞行、切换队形、手动设置目标点)等命令;从google地图上获取目标位置,并通过串口页发送出去
状态页 从串口页获取到所有无人机的当前状态信息,并定时刷新

地图页采取在QT中嵌套html网页框架的形式,实现基于谷歌电子地图瓦片的离线地图功能,主要涉及到相关js方面的技术,允许上位机在户外实测时离线的情况下加载当前地图。

串口页

aa

地图页

aa

状态页

aa

上位机工程类图

Markdown

相关文件说明

文件名 功能说明
parameter.h parameter.h为通信协议基本变量和参数文件
commons.h commons.h为数据类型定义文件
MainWidget类 MainWidget为主界面,生成MapPage、SerialportPage、StatusPage这三个子界面,只完成界面布置功能
MapPage类 MapPage为地图界面,用于显示离线地图和无人机当前位置,目标位置以及飞行轨迹等相关信息
SerialportPage类 SerialportPage为串口调试界面,用于实现串口的基本功能,包括串口配置,通信的收发功能。SerialportPage包含串口类(Win_Qextserialport)和通信协议类(UAV_link)
UAV_link类 UAV_link类为通信协议类,继承,本上位机充当飞行器编队分布式系统中虚拟飞行器,通信协议类用于解析数据包,向编队中的其他飞行器发送指令等。UAV_link包含parameter.h和commons.h。
protocol类 protocol作为UAV_link的父类,用于实现串口的接收数据updateDataBuff和发送数据sendData的函数,UAV_link继承后,可以调用上面俩个函数进行串口通信

通信协议

无人机系统通信协议使用了自己的通信协议,分布式无人机编队系统要求每个无人机都知道其他无人机的数据以及地面站发送来的命令。在通信网络中,我们将地面站设置为0号无人机。

无人机通信数据包如表所示:
image

分布式广播通信
image
当所有无人机都开始运行程序准备就绪后,点击地面站检查通信,地面站会触发通信。为了保证通信网络中的各个节点按照一定顺序发送信息,避免因为同时发送,导致信号干扰出现丢包或者误码。所以,我们制定了通信协议如上图所示:理想情况下,第N架无人机发送信息,通信网络中其他无人机接收信息,但只有第N+1架无人机收到信息后开始发送自己的信息(由于是闭环网络,应注意临界条件),当第N架无人机收到第N+1架无人机发出的信息后,视为第N架无人机成功应答。

自定义通信协议

需要一个类继承protocol类,得到父类关于串口的接收数据和发送数据的方法,接收到串口的原始数据后,根据开发者自己的协议设计,添加对串口数据进行具体处理的函数(当前版本采用了Data_Receive_Anl()方法),得到解析后的数据,进行下一步动作,实现通信协议的多态和可扩展性。

硬件部分

  • 433M无线通信模块
  • GPS模块
  • 树莓派3代

问题与展望

进一步完善上位机系统,主要可以分为以下几个目标,根据需要实现:

  1. 关联数据库记录飞行状态相关数据。
  2. opengl多角度三维显示无人机飞行轨迹。
  3. 进一步完善通信协议,当前采用的简单轮询方式并且每个数据包固定字节长度,效率较低开销较大。
  4. 当前采用了CVT算法进行最优目标点匹配,可以新增相关避障算法,仿真通过后,实物上机测试算法。

实验结果

检查通信

image

起飞

image

选取队形

image

队形切换

image