基于云的无人机远程技术支持系统设计与实现

2020-06-12 09:18卢东辉
计算机工程与设计 2020年6期
关键词:服务器端实时性指令

盛 蔚,卢东辉

(北京航空航天大学 仪器科学与光电工程学院,北京 100191)

0 引 言

由于相关技术的局限性,无人机远程技术支持领域的研究和发展存在着不足与空缺。目前,专业的方案较少,主要借助TeamViewer[1]、PCAnywhere[2]等通用远程控制软件获取远程计算机的控制权来实现,其优点是技术应用较成熟,但非定制的特点使其与无人机和配套软件不协调,且传输数据量较大,因此专业性、功能性、实时性无法满足要求。随着云计算的发展[3-5],陆续有研究将其应用到物联网[6]、智能农业[7]、电力系统[8]的远程支持或监控领域,通过定制化开发,实现远距离数据传输以及对相应事物的监控,发挥了云的通信、计算、存储等优势,但普遍没有考虑传输实时性等问题,云在无人机远程技术支持领域的应用仍存在一定空缺。

针对上述要求,本文提出一种基于云的无人机远程技术支持系统,设计了系统流程和功能模块。在C/S结构[9]下,用Windows Presentation Foundation(WPF)[10]开发支持网络传输的无人机地面站软件[11]客户端,作为终端对无人机指令和数据进行操作和处理;用Python在阿里云上开发服务器端,监听客户端的操作请求和数据,并完成相关处理。通过云和网络连接客户端和远程无人机,设计基于HTTP和TCP[12]的传输协议,传输操作信息和数据指令,实现目标功能。提出一种基于优先级的无人机数据自适应传输方法,通过划分数据优先级、计算分配带宽和预估数据量来调节数据频率,实现重要数据的最优传输和次要数据的可靠传输。最后,实际测试验证了本文设计的可行性,其满足专业性、功能性和实时性等要求。

1 主要技术基础

1.1 云计算平台

云计算(cloud computing)是基于互联网的计算,凭借着远超传统计算服务的弹性扩展、灵活访问资源、方便监控、稳定可靠等优势[3-5],被广泛应用于物联网、通信等技术领域,可以为远程技术支持带来高速网络传输、高开发效率、低运行成本等好处。本文选择稳定可靠的阿里云计算平台作为服务端开发平台。

1.2 Python与aiohttp异步处理框架

Python是一种面向对象高级程序语言,具有开发迅速、可扩展性强、兼容性好等优点[13],是服务器开发的热门语言。aiohttp是基于异步协程IO库的Python服务器框架,该框架利用asyncio的异步协程IO技术[14],协程是可控的程序上下文切换技术,在应对高并发问题时,相比进程、线程更加轻量和高效,因此非常适合本文数据量不大、逻辑简单、高并发的传输背景。

1.3 WPF技术

WPF是基于.NET和Windows的用户界面框架,编程语言为XAML和C#,XAML是用于实例化.NET对象的标记语言,负责构建WPF的用户界面,C#是面向对象的高级程序设计语言,负责界面的后台逻辑实现。WPF具备界面和逻辑分开、自动适应分辨率,处理速度快等优点,提高了客户端开发的效率和质量[10]。

2 远程技术支持系统总体设计

2.1 系统关键与流程设计

在常见的无人机系统中,无人机和地面控制站之间利用无线电链路传输控制站上的控制指令和无人机上的飞行数据,结合相关站上或机上的显示与处理,即可实现对无人机的通信传输、参数调整、实时监视、飞行控制等功能。因此,无人机远程技术支持系统的关键是在上述基础上,利用云和网络连接无人机和客户端,远距离传输无人机的飞行数据和技术支持方的控制指令,实现目标功能。

具体的系统流程如图1所示,分为飞行数据回传流程和控制指令上传流程。前者中,无人机将飞行数据下传给受支持者地面站,再利用TCP传输给云服务器和支持者地面站解析并显示,实现远程监视、参数检查等功能;后者中,利用TCP将支持者地面站上产生的指令传输给云服务器端和受支持者地面站,最后通过无线电上传给无人机从而实现调试、飞行控制等功能;另外,还包括用户操作流程,地面站客户端发起包含操作信息的HTTP请求,云服务器端做出相应的处理和应答。

图1 系统流程

2.2 功能模块设计

针对专业性要求,本文采用C/S结构对系统进行定制化设计,如图2所示,由客户端和服务器端组成。

其中,客户端由以下功能模块组成:

(1)操作模块:提供人为操作的功能界面,包括登录、连接、退出等连接操作和注册、修改密码等账户操作,将操作信息用HTTP发给服务器端,并处理返回的结果。

(2)传输模块:发起和维持与服务器端之间的TCP传输,将地面站中的数据和指令发送给服务器端,接收和解析来自服务器端的数据和指令。

(3)地面站基础功能模块:维持与无人机的通信连接,作为数据指令传输通道;以图形界面、虚拟仪表等形式显示无人机状态信息;提供参数调整等界面;提供飞行控制功能包括控制指令、飞行摇杆和任务规划等。

服务器端由以下模块组成:

(1)主模块:服务器端主程序;接收和处理客户端登录等操作的HTTP请求并返回结果;接收和转发无人机数据和指令的TCP消息,并进行权限控制;连接和处理数据库,处理用户身份验证和操作记录读写。

(2)存储模块:利用数据库实现数据存储功能,主要存储账户、密码等用户信息和用户操作、结果等记录。

下面对客户端和服务器端的设计与实现方法,优先级无人机数据自适应传输方法等关键技术进行重点阐述。

3 客户端设计与实现

针对功能需求和专业性要求,设计客户端为用户进行操作的运行在联网PC上的软件,根据角色不同,分为飞行现场的受支持端和技术支持人员的支持端。本文使用WPF技术基于无人机地面站软件开发客户端,复用其站-机通信、地图与仪表显示、参数调试等功能,并加入远程支持的相关功能。

图2 系统功能结构

3.1 界面功能

客户端界面包括远程支持、用户注册和修改密码等子界面,如图3所示,利用XAML语言调用控件并定制样式,实现了用户名、可连接对象和登录等显示框和按钮,按照MVC模式,在上述控件中通过事件机制在后台逻辑来实现相应的功能。

图3 客户端用户界面

3.2 后台程序

客户端的程序流程图如图4所示,用户填入信息后点击登录,客户端程序发起TCP连接,并用HTTP登录请求将账号和密码发送给服务端:收到反馈为登录成功,则进入下一步;收到登录失败或等待超时,则返回上一步。登录成功后,开始向服务端定时发送HTTP轮询请求,并解析返回的轮询结果,显示结果中的用户状态和可连接用户列表。根据用户状态:

(1)登录状态,选择一名可连接用户点击连接,用HTTP连接请求将账户和口令发给服务端:收到反馈为连接成功,则开始往TCP传输队列中读写无人机数据和指令;收到连接失败,则返回上一步。

(2)连接状态,继续往传输队列读写数据和指令。

(3)断开状态,结束读写并退出程序。

点击断开,程序向服务端发送HTTP断开请求:收到反馈为退出成功,则退出程序;收到退出失败,则继续处于连接状态。

图4 客户端程序流程

代码实现中,将System.NET类库中的Socket和TcpClient类封装成RemoteSupport类,提供发起、维持及断开TCP通信的功能。在地面站软件的数据指令收发程序中调用这个类,当受支持方收到无人机下传或支持者发出的数据和指令时,通过事件发布函数,执行RemoteSupport类的发送函数,实现向服务端发送的功能,关键代码如下:

//发送控制指令的事件订阅

this.DataSendEvent += MainWindow_DataSendEvent;

//将控制指令字节流写入TCP

MainWindow_DataSendEvent(byte[] bytes)

{

RemoteSupport.WriteTcp(bytes);

}

在收到服务端下传的数据和指令时,执行RemoteSupport类的数据接收函数,再通过事件发布函数传给地面站解包处理程序(支持方)或者转发给飞控(受支持方),实现远程下传接收功能,关键代码如下:

//收到服务端数据的事件订阅

RemoteSupport.DataReceivedEvent+=RemoteSupport_DataReceivedEvent;

//下传接收处理函数

RemoteSupport_DataReceivedEvent(byte[] bytes)

{

//根据是否支持方处理接收数据

DataProcessSupport(bytes);

}

声明NewWebClient类继承自System.NET类库中的WebClient类,提供收发HTTP请求和回复的功能。当进行登录、连接等操作时,客户端将相关信息放入HTTP协议后以POST方式发送给服务端并解析回复,关键代码如下:

//发送信息接收回复

byte[]response=newWebClient.UploadValues(URL,"POST",formData);

4 服务器端设计与实现

针对功能需求和专业性要求,设计服务器端为运行在阿里云服务器上,接收客户端请求并完成相应处理,存储用户信息和操作记录的程序。

4.1 主程序

服务器端用Python开发,程序流程图如图5所示,启动后创建线程,主线程运行后,读取待连接和连接列表,创建传输线程并读写连接双方的Socket套接字,根据口令验证结果实现不同权限的数据指令传输直至收到退出请求为止。

TCP线程运行后,监听TCP请求,在收到连接请求时,接收并保存Socket套接字中的用户信息和数据。关键代码如下:

//开启TCP监听

TcpListener.bind(IP,Port)

TcpListener.listen(10)

//获取TCP请求中的套接字信息

sock,addr=TcpListener.accept()

HTTP线程运行后,监听HTTP请求,收到请求时,利用aiohttp异步处理框架解析请求并根据HTTP协议中的操作类型进入相应的处理函数:

(1)登录请求,解析请求并利用数据库验证用户的账号密码等信息。验证通过,存入登录用户列表并返回登录成功;不通过,则返回登录失败。

(2)轮询请求,获取登录用户列表中该用户的状态和可连接的用户名单,返回给客户端。

(3)连接请求,解析请求中的连接双方账号,检查双方状态,若双方在线,将双方存入待连接列表中,等主线程完成连接后返回连接成功;否则返回连接失败。

(4)退出请求,解析请求中的用户账号,若处于连接状态,关闭连接后从连接列表中删去用户信息,并返回退出成功;如果处于登录状态,则从登录用户列表删去用户信息,并返回退出成功;其余情况返回退出失败。

(5)注册账户请求,解析请求中待注册的账号和密码,读取数据库判断该用户是否存在,若不存在,则将注册信息写入数据库并返回注册成功;否则返回注册失败。

关键代码如下:

//创建web服务器

app = web.Application(loop=loop)

图5 服务端程序流程

//将处理函数注册进应用路径

app.router.add_route(′POST′,′/remote/Login′,Login)

//创建HTTP监听服务。

srv=yieldfrom loop.Createserver(handler,ip, port)

4.2 数据库

本文用MySQL建立“无人机远程技术支持系统数据库”,由用户信息表和操作记录表组成。用户信息见表1,用来存储和管理用户信息。表中No是用户编号,是主键;Name和Password是用户姓名和密码,提供处理用户注册、登陆、修改密码等请求时的验证功能;ModifyTime是用户修改信息的时间;LoginTime是上次登录系统的时间。

操作记录见表2,用来存储和管理用户操作记录。表中No是操作记录编号,是表主键并自动加1;Action是注册、登陆、连接等操作;Result是操作结果,1表示操作成功,0表示失败;UserNo是用户编号,是该表连接用户信息表的外键。

表1 用户信息表Users_Table

表2 操作记录表Action_Table

以用户登录时的账号密码检验为例,关键代码如下:

//连接数据库

db=pymysql.connect(host="",user="",password="",db="remote")

//获取游标、执行SQL语句

db.cursor.execute(sql)

//根据查询结果判断密码是否正确

result=cursor.fetchone()

IsRight = (result==password) ? true:false

//关闭连接

db.close()

5 基于优先级的无人机数据自适应传输方法

5.1 数据优先级分析

系统中传输的数据可分为以下3类:控制指令数据Ic、飞行状态数据Iu以及系统操作数据Is,如果按混合产生的顺序传输会导致重要数据等待传输的时间过长,影响系统实时性。为了保证重要数据的传输性能,需要根据实时性要求划分数据优先级,用不同的队列进行传输。Ic是人为产生的飞行控制、载荷控制等指令,由于无人机的控制特性与要求,实时性要求最高;Iu是无人机的飞行状态、载荷状态等数据,实时性要求仅次于Ic;Is是远程技术支持系统操作数据,与飞行任务无直接关联,实时性要求最低。由此可定义数据传输的优先级为:Ic>Iu>Is。

5.2 传输协议设计

根据上述数据的特点,分别设计了TCP数据指令传输协议和HTTP操作信息传输协议。

数据指令传输协议用来传输Ic、Iu。如表3所示,协议包括帧头、帧长度、类型编号、数据内容、校验位、帧尾6个部分。其中,帧头、帧长和帧尾保障TCP流式传输中单个数据包的完整性,校验位保证正确性。ID用来区分协议的类型,数据内容用来承载数据或指令。

表3 数据指令协议帧结构

操作信息传输协议利用HTTP的请求-响应模型,具有简单、灵活、无连接的特点,协议中URL用来表示登录、连接等操作的类型,请求体用来搭载Is数据。以注册账号的代码为例:

//URL标记为注册

URL="http://1.1.1.1:9090/remote/Register";

//用POST的方式上传注册信息

newWebClient.UploadValues(URL,"POST",Register)

5.3 自适应传输算法设计

优先级传输方法保证了重要数据的最优传输,但当系统维持多个远程技术支持时,单个可用带宽b将减小,导致传输延迟增大甚至拥塞,这对低优先级数据的影响尤为明显。在时隙T内完成全部数据的传输,需满足下式

Ic+Iu+Is≤b×T

(1)

进一步分析数据传输情况可知:Ic和Is由人为操作产生,由于人为操作具有发生时的突变性和发生后的连续性,因此,下一时隙的数据量可由最近一次突变后历史时隙的数据发送情况来预估;Iu由飞控采集模拟量转换为数字量后按一定频率fu发送,根据经验,fu在5 Hz-50 Hz内可调。因此可以通过计算可用带宽和预估Ic、Is数据量来调整频率fu,优化带宽占用,保证次要数据的可靠、实时传输。

云服务器固定带宽为B,可用带宽系数为β,远程支持组数为m,系统采用平均的带宽分配策略,则单个远程支持的可用带宽b可由下式计算

b=β×B/m

(2)

下一时隙的Iu数据量可由下式计算

Iu=fu×du×T

(3)

其中,du为Iu的单包数据量,根据前文设计的传输协议确定。

(4)

其中,Ii=qi×d,qi为服务器端记录的收到包数,d为Ic和Is单包数据量。

求解上式的关键在于最近一次突变后的有效时隙数n和计算权重wi。以Is为例,定义时隙间的数据量变化率如下

(5)

(6)

设完成传输对预估的影响因子为ks∈(0.5,1),则未完成的影响因子为1-ks。那么,权重计算公式如下

(7)

Ic的预估同理,由于其优先级最高,Si恒等于1,ks恒等于1,则其计算权重为:w1=W,wi=(1-W)/(n-1),i=2,3,…,n。

算法步骤如下:

步骤1 确定服务器固定带宽B,单包数据量dc、du、ds等常数,初始化β,W,perM,ks,fu和T等参数。

步骤2 按优先级顺序和fu约束预处理产生的数据包,放入相应的传输队列并标记序号。

步骤3 传输数据,记录时隙T内3个队列各自的发送包数pi和收到包数qi,再根据式(5)和式(6)计算数据变化率perc,i,pers,i和传输完成情况Sc,i,Ss,i,并更新对应的nc,ns。

步骤4 根据Sc,i,Ss,i,nc,ns和式(7)分别计算Ic和Is的过去时隙权重wc,i,ws,i。

步骤6 获取当前在线远程支持组数m,根据式(2)计算单个可用带宽b。

步骤8 根据Iu,du和式(3)计算下一时隙的fu。若fu<5 Hz,进入步骤9,其余情况返回步骤2。

步骤9 取fu=5 Hz,若fu无法满足任务要求,适当增大时隙到T=(1+λ)T,其中λ∈(0,1)为时隙调整因子。返回步骤2。

6 系统运行结果

从以下方面对本文设计的无人机远程技术支持系统进行实际飞行验证。

(1)在两台计算机上启动无人机地面站软件,一台作为支持者客户端,另一台连接无人机作为受支持者客户端,注册账号后登录服务器,选择对方进行连接,开始远程技术支持。依次验证各个功能,如图6所示,支持者端的地面站软件可以观察到和受支持者端一致的飞行姿态、位置、航点等数据;远程无人机可以收到并执行支持端发送的调试参数和起飞等指令。表明系统运行稳定,实现了目标功能,满足专业性和功能性要求。

图6 系统测试截图

(2)在上述实验中,分别在受支持者和支持者客户端用DateTime函数记录了5000条协议数据包的发送时间SendTime和收到时间RecvTime,计算每个包传输用时的结果为:用时最大为36 ms,最小为9 ms,平均为13 ms。如图7所示,对连续100个包的传输用时画折线图可知,用时较为稳定。由于人为连续操作软件的最快反应时间在几百毫秒左右,大于传输用时,因此传输对操作的延时影响很小,满足实时性要求。

图7 传输用时变化

(3)为模拟多组远程技术支持并发,实验中限制可用带宽为15 000 bit/s,初始化算法参数,其中时隙T为1 s,Iu的初始频率fu为25 Hz。分别在启用和未启用基于优先级的无人机数据自适应传输方法下,重复相同操作。如图8所示,当带宽受限时,该方法随着Ic和Is数据量的变化自动调节fu,调节效果如图9所示,以时隙内收到包数与发送包数的比例计算传输成功率,相比未启用方法,该方法提高了数据传输成功率,尤其是低优先级数据。计算各队列及全部数据的平均传输用时,如图10所示,相比未开启方法,该方法的传输用时更小,这在低优先级数据上尤为明显。表明系统在多组并发导致可用带宽减少的情况中,通过调整数据频率仍能保证数据的传输性能,满足实时性要求。

图8 数据频率调节效果

图9 传输成功率对比

图10 平均传输用时对比

7 结束语

本文针对无人机需求,设计并实现了基于云的无人机远程技术支持系统。定制化开发了云服务器端和客户端,利用云和网络完成远距离通信,并在此基础上实现飞行监控、参数调整等多种远程支持功能,相比通用远程支持工具,专业性、功能性和实时性更好;根据数据传输特点,提出一种基于优先级的无人机数据自适应传输方法,相比常规传输方法,保证了重要数据的传输性能,在可用带宽减少的情况下传输实时性和可靠性更好。通过实际飞行实验,验证了该系统运行正常,满足功能需求和性能要求。

猜你喜欢
服务器端实时性指令
Linux环境下基于Socket的数据传输软件设计
航空电子AFDX与AVB传输实时性抗干扰对比
基于Qt的安全即时通讯软件服务器端设计
基于Qt的网络聊天软件服务器端设计
基于C/S架构的嵌入式监控组态外设扩展机制研究与应用
中断与跳转操作对指令串的影响
基于汇编指令分布的恶意代码检测算法研究
一种基于滑窗的余度指令判别算法
MAC指令推动制冷剂行业发展
一种车载Profibus总线系统的实时性分析