刘祖均,何 明,刘锦涛,张 乔
(陆军工程大学,江苏 南京210007)
随着无人机技术的迅速发展,在许多领域中变得非常流行,包括交通监控[1]、农业[2]或灾难危机管理[3],因为这些机器人的使用使得人们避免冒着生命危险执行任务。
在无人机的开发过程中,当一些硬件平台功能难以实现时,可以借助仿真软件和编写控制程序来辅助研究人员进行实验[7]。无人机一般需要在各种复杂环境下导航并成功执行特定任务。然而,构建不同的测试场景并在多种条件下检查无人机状态是昂贵且耗时的。因此,使用完善的仿真环境可以对正在开发的无人机系统进行安全且经济的测试,不仅可以缩短开发周期,还可以降低研发成本。
但以往的无人机仿真系统存在软件依赖过多,职能不明确等问题,模型的前端表示与后端控制没有独立出来,导致系统过于繁杂,而且不易于操作人员进行分析调试[16-17]。针对以上问题,本文设计了一个基于逻辑分离的无人机仿真系统,目的是使用在ROS下的集成环境为无人机仿真和指挥控制开发一个可扩展的、可控制的、业务逻辑可分离的系统。
本文的主要贡献是:
1)内容可以作为在ROS环境下Gazebo无人机仿真系统的设计参考,为进行无人机实物飞控算法研发提供保障。
2)针对地面控制站软件的不足,设计了一款基于PX4开源固件的工具包,该软件可配合Gazebo、QGroundControl完成多种仿真任务。
3)借鉴经典Model - View-Controller(MVC)体系结构设计了一个逻辑分离的无人机仿真控制系统。该系统有效实现了输入、业务处理、输出三端分离。
在过去几年中,一些学者设计无人机仿真环境,用于监督飞行控制[10]、协作[11]或训练[12]。
目前常用的机器人仿真软件Webots、OpenAI Gym、Gazebo等。为了能够精准而高效的模拟工作在复杂室内和室外环境的机器人行为,Meyer J等人使用ROS与Gazebo环境进行了四旋翼无人机综合仿真[9]。
在使用无人机的模拟和控制时,必须区分两种类型的软件:自动驾驶仪软件和地面控制站软件(GCS)。GCS可以控制UAV的轨迹并且提供车辆的遥测。为了解决无人机在任务执行中自动规划路线的难题,David等人在QGroundControl软件中使用了几种扩展工具包并完成自动任务规划[8]。
另一方面,GCS软件侧重于操作员使用,可以提供一个或多个无人机的飞行控制和手动路径规划[4]。为了将这些GCS指令传送到自动驾驶仪,需要有通信协议,能够提供与自驾仪的通信,最常用的协议是MAVLink。
QGroundControl地面控制软件通过MAVLink协议与自驾仪进行数据通信,为一个或多个无人机提供地面站支持和飞行姿态控制和参数配置。QGroundControl的主要优点在于它提供了友好简单的使用方式,同时还可以扩展一些高端功能。缺点是需要配置其依赖环境,软件耦合度高,而且对于仿真环境中飞机的位置控制方式不友好。
鉴于QGroundControl的缺点,设计了一款基于PX4开源固件的工具包——PX4Command。与现有控制软件不同的是,工具包使用时会打开多个脚本文件,用户只需在脚本中输入数字命令来选择所需功能。消息传递、命令控制均由工具包中底层编写的cpp文件实现。在逻辑上实现了用户输入、数据处理、仿真演示的分离,使得操作员只需输入数字命令即可完成相应的仿真操作。为科研人员带来简洁快速的仿真测试,减少项目前期验证时间。
3.1.1 经典MVC体系结构
MVC全称Model(模型)-View(视图)-Controller(控制器),它是于1970年首次提出,设计该模式是为了解决用户界面与业务逻辑的代码分离,便于程序员进行维护和代码重用,尤其是在一个完整的前端与后端交互的系统中。下面根据图1简单介绍下MVC体系结构:
1)M:即Model模型,用于处理业务规则。该层负责的处理任务最多,既要与前端界面进行数据交互,又要作为后端控制指令的“传达者”。
2)V:即View视图是指用户界面。主要负责与用户进行交互,并把用户请求发送给模型。
3)C:即Controller控制器,并不直接与视图交互,而是使用模型中的相关功能响应用户的需求。
图1 经典MVC体系结构
3.1.2 基于ROS的分离式体系结构
本文借鉴MVC的逻辑分离思想,提出了一种基于ROS环境下的分离式体系结构(即自驾仪-仿真器-命令、控制体系结构,简称为ASC2体系结构,如图2所示),用于设计表示层、业务层、控制层三层分离的无人机仿真系统。该体系结构不仅具有MVC的特点,又由于在每一层使用软件具有很好的开源性,使得体系具有很好的开放性和扩展性。
图2 基于ROS的ASC2体系结构
1)A:即自驾仪Autopilot,代表业务层。主要负责与仿真器进行数据交互并完成飞控姿态状态量的计算,接受控制层的指令并通知表示层更新视图。
2)S:即仿真器Simulator,代表表示层。在设计的系统中主要负责可视化界面,模拟计算传感器参数并发送给业务层处理。
3)C2:即命令、控制(Command、Control),代表控制层。提供友好的操作界面由用户操作,并与自驾仪建立通信链接发送指令实现控制,操作员只需输入命令,无需关注数据如何发送及处理,通过仿真器的界面反馈指令的执行。
基于3.1节中提出的ASC2体系结构设计三层逻辑分离系统,分别在每一层对应了软件。该系统设计要素包括一下五点:
1)ROS:是用于有效开发和构建机器人系统的库,驱动程序和工具的集合[5]。采用了一种分布式进程结构,使得执行程序可以分别设计并进行有机结合,按照使用的各种包的形式分别管理[6]。也是本文系统的基础环境。
2)PX4:一款功能强大的开源自动驾驶仪,是无人机平台的核心部分。在本系统中负责业务层的数据处理任务,同时与表示层、控制层软件进行交互。
3)Gazebo:是一个免费的开源机器人模拟环境,可以在三维室内和室外环境中模拟机器人和传感器应用[17]。在本系统中主要负责表示层的界面可视化和模拟无人机传感器参数。
4)MAVLink:一种用于微型飞行器的开源通信协议。在本系统中主要负责控制层与业务层的数据通信。
5)PX4Command:一款基于PX4和Mavros的工具包,为操作员提供简洁快速的开发。在本系统中处于控制层,是ASC2体系结构的核心部分。
3.2.1 PX4Command工具包
PX4Command工具包是一个基于PX4和Mavros的控制程序。能够配合板载计算机(树莓派、TX2、Nano)等运算能力比较强的处理器,来实现复杂算法的运行,控制指令通过串口或者网口通信发送给底层控制板。
如图3所示,该工具包通过命令界面发送指令,由Mavros程序把负责消息传递给自驾仪,然后经过数据处理后反馈到前端状态界面。通过这样的双向交互信息,操作员并不需要知道底层数据的处理,只需输入控制命令并观察界面反馈。
图3 工具包交互式控制流程
图4 PX4Command工具包框架
工具包主要包括外部位置估计、位置控制规则、消息传递、应用层文件四大模块。
1)应用层:包含实现无人机定点、自主着陆、碰撞避免、目标追踪等上层应用的cpp文件。
2)外部位置估计:该模块功能主要由px4_pos_estimator.cpp文件负责实现,订阅激光雷达或者mocap发布的位置信息,并进行坐标转换, 根据订阅的数据,发布相应的位置,偏航角给飞控。
3)位置控制规则:该模块主要由px4_pos_controller.cpp文件负责实现,提供有关位置控制基础参数、控制方式的头文件。订阅由位置估计发布的飞机状态,初始化当前飞机状态的时间。订阅Control_Command发布的消息参数,对move节点中数据等进行逻辑处理。
4)消息传递:主要功能是负责PX4Command工具包与Mavros功能包的信息交互,发送/接收期望位置,速度(本地系与机体系),角度,角速度,底层控制(遥控器输入)。
由于该工具包的使用,使得用户只需关注应用层的实现,消息传递、位置估计、位置控制均由相应模块负责与PX4进行交互处理,有效实现了表示层、业务层、控制层的逻辑分离。
应用3.1节中的逻辑分离思想,集成仿真系统的通信流程遵循下图中的体系架构。PX4与模拟器(例如Gazebo)通信,以接受来自模拟世界的传感器数据并发送电机和执行器值;与GCS和Offboard API(例如ROS)通信,以从模拟环境发送遥测并接受命令。
图5 仿真系统体系架构
图6 系统整体通信原理图
结合以上两图来阐述整体系统的数据流通。
1)PX4—仿真器:所有仿真器与PX4的通讯都是通过MAVLink消息来进行的,软件在环仿真(SITL)使用simulator模块中的simulator_mavlink.cpp来处理这些消息。例如,在PX4终端中输入命令commander takeoff,命令以MAVLink消息的形式发送到Gazebo仿真器并执行起飞操作。
2)仿真器—PX4:仿真器的作用就是模拟真实飞行,即模拟计算出真实飞行时的传感器状态,包括GPS,IMU等,将这些信息发送给飞控后,再由飞控中的相关模块计算出飞机状态量。
3)控制器—PX4:控制程序PX4Command,它支持运行ROS的计算机、支持MAVLink的自动驾驶仪和支持MAVLink的GCS的计算机之间的可扩展通信[8]。PX4Command通过UDP协议与PX4自驾仪进行通信链接,用户通过该地面站发送传输指令(位置期望点、速度期望值等)并且监控飞机状态,还可以使用操纵杆游戏手柄来控制虚拟世界的飞机。
由以上分析,ASC2体系结构应用到无人机仿真系统设计中,能够完成简洁快速的仿真开发,操作员无需关注底层数据处理过程,通过简单的控制文件可以有效实现表示层、业务层、控制层的逻辑分离,使系统具有更好的可控性。
本节为了充分验证本文仿真系统的易用性、可控性、开放性分别进行了三组实验。从单机仿真到多机仿真再到拓展使用外部软件进行飞行任务。实验一、实验二均使用自驾仪状态信息回显进行飞行数据分析验证,实验三中则拓展使用较为流行的飞行日志分析软件Flightplot进行数据可视化分析验证。
在配置好ROS+PX4+Gazebo+PX4Command集成仿真环境后,配合Mavros 软件包来完成外部程序控制虚拟世界仿真。
运行工具包中单机仿真脚本,如图所示,启动了六个脚本,其中①②③脚本为启动ROS服务、Gazebo、自驾仪以及完成ROS与自驾仪的通信端口连接;④脚本由px4_pos_controller.cpp实现控制方式与子模式选择;⑤脚本由move.cpp实现无人机切换offboard模式并解锁;⑥脚本由px4_pos_estimator.cpp实现无人机相关信息的计算处理并回显到屏幕。
图7 单机仿真
如上图中④脚本所示,控制方式为机体坐标系,控制子模式为xyz坐标点位置控制,输入坐标(4,3,2)。待无人机稳定后查看脚本⑥的回显信息,无人机状态信息显示为已连接、已解锁、offboard模式;位置信息显示坐标(4.19,2.94,1.85),误差属于飞行正常波动。
当前启动文件初始三架UAV坐标分别为(2,0,0)、(-2,2,0)、(-2,-2,0)。
设定任务:选择地球固连坐标系(ENU),控制子模式为xyz坐标点位置控制,①输入坐标+(0,0,1),即原地起飞。②输入坐标+(1,0,0),即三机沿X轴编队飞行一格。
图8 多机仿真
根据rostopic话题中三架无人机返回的位置信息和Gazebo中实际飞行轨迹作出图8。编队飞行实现为当前(x,y,z)与输入坐标(1,0,0)对应项相加,即三架无人机整体沿X轴移动一格。
本文仿真系统具有很高的开放性,可以配合多种软件使用以获得更多的功能,实验三将配合常用地面控制站QGC完成路径规划仿真测试。
首先设定预想任务要求:
1)选择任务模式并进行航线规划,任务结束启用返航模式并且要求返航模式需爬升至20 m空中并降落在起飞点。
2)默认任务飞行高度10 m,飞行速度5 m/s。
3)任务模式飞行中可执行其它操作,如中断任务,立即返航等。
其次在QGroundControl中按照任务要求设定飞行参数。设定完成后,执行任务以及相关要求的操作。
图9 任务中途执行返航操作
由图9中航线明显观察到任务在执行中中断并执行返航操作,仪表盘数据显示飞行高度20 m,速度为4.8 m/s。仿真结果能够完成预设任务的三点要求。
最后,使用日志分析软件Flightplot对实验数据进行分析。从仿真系统中获取了本次飞行的日志文件,其中包括许多数据包和参数信息,通过数据来验证仿真。通常比较关注的数据包有:
1)vechile_gps_position:GPS数据包,包括了定位的经纬度、固定状态、卫星数。
2)vechile_local_position:ekf数据融合之后的当地坐标系坐标(NED)、航向、水平和垂直精度,及其它信息。
图10 仿真数据分析
通过上图,可以清晰的观察出,绿色曲线为卫星颗数,稳定维持在10左右,说明卫星信号正常无干扰;红色曲线代表飞机高度变化曲线,可以看到飞机在执行飞行高度为10 m的任务,最后返航模式爬升至20 m再降落起飞点;蓝色曲线为实时动态定位(RTK)曲线,GPS定位状态稳定。
该系统由Gazebo实现可视化仿真、PX4完成业务数据处理、PX4Command工具包实现外部控制。实验一、实验二充分说明系统能够完成单机、多机的简单仿真测试,并且可以实现表示层、业务层、控制层的有效分离,体现出整体系统的易用性、可控性。实验三说明系统具有良好的开放性,更加方便科研人员进行开发调试。
本文基于逻辑分离思想设计了一个无人机仿真控制系统,编写的PX4Commnd工具包可以完成对无人机的仿真测试,并且可以实现系统的表示层、业务层、控制层三层分离,对于科研人员能够有效的缩短研发周期并便于分析调试。由于各层开源软件的使用,可以快速有效的对机器人的各种传感器参数实现控制,也使得本文的集成仿真环境具有较高开放性。文章最后仿真验证了集成仿真系统的易用性、可控性。
由于多机通信问题较为复杂,实现困难,下一步研究工作将会探索如何优化多机仿真测试,并且使用该集成仿真系统进行无人机集群飞控算法的开发与实体机测试。