晏 杰,王彦臻,3,林 彬,金松昌,武云龙,赵名扬
(1.国防科技创新研究院人工智能研究中心,北京 100071;2.天津(滨海)人工智能研究中心,天津 300457;3.国防科技大学计算机学院高性能计算国家重点实验室,长沙 410000)
随着人工智能、计算机、控制技术的快速发展,机器人作为现代高新技术的产物之一,逐渐被广泛应用于国家经济建设和国防建设中。面对复杂的任务时,单个机器人已经无法满足应用需求,这就需要群体机器人的协作来完成任务。在群体机器人任务协同的软件开发中,如果直接用机器人实物进行试验调试,一旦任务失败,可能造成巨大的损失,因此,设计并开发一套群体机器人仿真系统,在群体机器人任务协同的软件开发过程中,对所开发功能进行仿真验证,对于人员设备的安全保障、开发调试的效率提高均具有十分重要的意义。
文献[1]采用半实物仿真的方法,对多移动机器人自主导航路标准确识别方法进行了仿真验证。该方法硬件结构组成复杂、成本高,对于机器人数量较多时不适用。文献[2-3]基于ADAMS和MATLAB,建立多机器人协同作业仿真模型,该方法所依赖的ADAMS和MATLAB软件均为商业软件,且在机器人仿真领域中应用范围有限。文献[4]基于蚁群算法,对多机器人协同形式和执行任务的策略进行了仿真实验与分析。该方法仅仅能对任务级的协同策略进行仿真,无法将机器人平台与任务级策略一同仿真。文献[5-7]基于RobotStudio,建立多机器人自动化生产线仿真系统,该仿真系统所依赖的RobotStudio软件为商业软件,且RobotStudio软件主要对机械系统动力学进行建模,因此,在机器人仿真领域中应用范围有限。文献[8]基于三维物理仿真软件Gazebo,对服务机器人的智能导航算法进行仿真验证。该方法只对单体机器人进行仿真,没有对群体机器人进行仿真。文献[9]基于美国环保署的饮用水分配系统建模软件EPANET,开发了一种管道检测群体机器人仿真系统。该仿真系统依赖的建模软件EPANET为专用商业软件,且在机器人仿真领域中应用范围很局限。文献[10-11]基于仿真软件ARGoS,建立群体机器人仿真系统。该仿真系统无法对三维环境及机器人平台自身的结构进行精细仿真。
Gazebo是一款优秀的开源物理仿真环境,可以构建机器人运动仿真模型;支持显示逼真的三维环境;支持传感器数据的仿真;用户可以定制化开发插件,扩展Gazebo的功能;拥有多种机器人模型,也可以使用用户自己创建的机器人模型。Docker容器是一个开源的应用容器引擎,让开发者可以以统一的方式打包他们的应用以及依赖包到一个可移植的容器中。容器完全使用沙箱机制,相互之间不会有任何接口,且性能开销很低,可以很容易地部署至其他的平台或者服务器上。
基于上述分析,本文设计一种基于Gazebo和Docker容器的群体机器人仿真系统。
基于Gazebo与Docker容器的优势,使用Gazebo对机器人平台和所处环境进行逼真和精细建模仿真,使用Docker容器对机器人的控制软件进行打包和隔离,Docker容器和Gazebo之间基于数据分发服务(DDS,Data Distribution Service)传输控制指令与机器人的状态数据,从而实现对群体机器人的逼真仿真。
基于Gazebo和Docker容器的群体机器人仿真系统的总体架构如图1所示,具体包括基于Gazebo的群体机器人仿真环境、基于Docker容器的运行支撑环境及地面站3部分。
图1 群体机器人仿真系统的总体架构
基于Gazebo的群体机器人仿真环境用于构建机器人虚拟实体及其运动仿真模型、现实场景中的环境模型,从而仿真群体机器人的底层运行过程。基于Gazebo的群体机器人仿真环境与基于Docker容器的运行支撑环境进行通信,向控制机器人的Docker容器发送机器人虚拟实体的状态数据,具体包括位置数据、姿态数据及机器人所携带传感器输出的数据(如摄像头采集的数据)等;并接收Docker容器中机器人控制软件生成的行为指令,具体包括位置点导引指令、速度导引指令、攻击指令等。
基于Docker容器的运行支撑环境,用于启动控制每个机器人的Docker容器。每个Docker容器对应一个群体机器人仿真环境中的机器人虚拟实体,运行着控制对应机器人虚拟实体的机器人控制软件。运行支撑环境与基于Gazebo的群体机器人仿真环境进行通信,接收群体机器人仿真环境中机器人虚拟实体的状态数据,具体包括位置数据、姿态数据及机器人所携带传感器输出的数据(如摄像头采集的数据)等;并向群体机器人仿真环境中的机器人虚拟实体发送机器人控制软件生成的行为指令,具体包括位置点导引指令、速度导引指令、攻击指令等。
地面站为可选部分,用于必要时向各个Docker容器中的机器人控制软件发送控制命令,同时接收各个Docker容器发送的机器人的状态数据,显示群体机器人的行为过程、运动轨迹等。如果真实的群体机器人控制系统中没有地面站,则该仿真系统中不需要构建地面站。
基于Gazebo的群体机器人仿真环境主要包括机器人虚拟实体、仿真引擎和容器桥接模块三部分,如图2所示。
图2 基于Gazebo的群体机器人仿真环境构成
2.1.1 仿真引擎
仿真引擎采用开源物理仿真环境Gazebo的仿真引擎,用于仿真群体机器人模型的底层运行过程,具体功能包括:
(1)构建机器人运动仿真模型。可以利用Gazebo提供的基础物体模型设计一个简单的机器人三维仿真模型。此外,Gazebo提供了CAD、Blender等各种2D、3D设计软件的接口,可以导入这些软件生成的模型。同时,通过Model Editor下的plugin,添加需要验证的算法文件,可以在Gazebo里对机器人的运动进行仿真。
(2)构建现实世界各种场景环境的仿真模型。Gazebo可以建立一个用来测试机器人的仿真环境,通过添加物体库来模仿现实世界,还可以通过Building Editor,构建2D的房屋和3D的房屋。
(3)构建传感器仿真模型。Gazebo拥有一个很强大的传感器模型库,包括camera、depth camera、laser、imu等机器人常用的传感器,也可以根据现实应用需要创建一个新的传感器,设置它的具体参数,甚至还可以添加传感器噪声模型。
(4)为机器人模型添加现实世界的物理性质。可以为机器人添加重力、阻力等属性。
2.1.2 机器人虚拟实体
机器人虚拟实体是真实机器人平台的仿真模型,根据真实机器人平台的特性,选择仿真引擎中提供的满足需求的机器人模型。如果仿真引擎中现有机器人模型不满足需求,则根据仿真引擎提供的工具构建满足需求的机器人模型。
机器人虚拟实体提供2种接口。一种是状态输出接口,将机器人虚拟实体的状态数据以ROS topic的形式发布出去,供容器桥接模块订阅后转发给Docker容器;另一种是行为指令订阅接口,通过ROS topic订阅容器桥接模块转发的行为指令。
2.1.3 容器桥接模块
容器桥接模块实现基于Gazebo的群体机器人仿真环境与基于Docker容器的运行支撑环境之间的双向通信。一方面,容器桥接模块将机器人虚拟实体的状态数据转发给Docker容器,供Docker容器中的机器人控制软件生成控制指令使用,状态数据具体包括机器人虚拟实体的位置数据、姿态数据及机器人所携带传感器输出的数据(如摄像头采集的数据)等;另一方面,容器桥接模块接收Docker容器中机器人控制软件生成的行为指令,并将该指令转发给群体机器人仿真环境中对应的机器人虚拟实体,从而驱动和控制机器人虚拟实体的行为,行为指令具体包括位置点导引指令、速度导引指令、攻击指令等。
由于容器桥接模块需要传输的数据包的长度可能很长,如机器人虚拟实体上搭载的可见光相机的图像数据;另一方面,容器桥接模块需要传输的数据包的种类和格式多样,如机器人虚拟实体自身的状态数据及搭载的多种传感器的感知数据。由于TCP/IP通信对数据包的长度有限制,且在传输数据类型较多时存在底层代码封装不够模块化、复用率不高的问题,而数据分发服务(DDS,Data Distribution Service)可以克服TCP/IP通信的不足。
数据分发服务DDS作为网络数据通讯的核心技术,能可靠实时地交换分配群体数据。DDS必须确保在极少的时间和不限制网络中的数据容量的条件下,高度可靠地传输数据。DDS标准为OMG组织发布的《Data Distribution Service for Real-time Systems》,该规范标准化了分布式实时系统中数据发布、传递和接收的接口和行为,定义了以数据为中心的发布-订阅(Data-Centric Publish-Subscribe)机制,提供了一个与平台无关的数据模型。DDS将分布式网络中传输的数据定义为话题(Topic),将数据的产生和接收对象分别定义为发布者(Publisher)和订阅者(Subscriber),从而构成数据的发布/订阅传输模型。各个节点在逻辑上无主从关系,点与点之间都是对等关系,通信方式可以是点对点、点对多、多对多等,在QoS的控制下建立连接,自动发现和配置网络参数。DDS强调以数据为中心,提供丰富的QoS服务质量策略,能保障数据进行实时、高效、灵活地分发,可满足各种分布式实时通信应用需求。
DDS以数据为中心的发布—订阅模型为所有分布式节点之间建立了一个虚拟共享的全局数据空间(Global Data Space, GDS),如图3所示。在该模型下,分布式节点在网络上以发布或订阅的方式传输数据,节点可以是发布者或订阅者,或者既是发布者又是订阅者。各个节点在逻辑上无主从关系,点与点之间都是对等关系。通信方式可以是点对点、点对多、多对多等。节点之间在QoS的控制下自动发现、建立连接和配置网络参数。
图3 DDS以数据为中心的发布一订阅模型
应用程序使用API建立实体(对象),以此建立彼此间的发布—订阅通信。需要建立的主要实体包含:域(Domain)、域参与者(DomainParticipant)、数据写入者(DataWriter)、发布者(Publisher)、数据读取者(DataReader)、订阅者(Subscriber)。
发送方使用的对象被称为Publisher和DataWriter,接收方使用的对象被称为Subscriber和DataReader。应用程序使用DataWriter发送数据。DataWriter与单独的主题Topic相关联,用户可以在单独的应用程序中拥有多个DataWriter和主题。另外,在单独的应用程序中,用户可以为一个特定的主题拥有超过一个DataWriter。应用程序使用DataReader接收数据。一个DataReader关联一个单独的主题,用户可以在一个应用程序中拥有多个DataReader和主题。另外,在单独的应用程序中,用户可以为一个特定的主题拥有超过一个DataReader。
DDS技术最早应用于美国海军,用于解决舰船复杂网络环境中大量软件升级的兼容性问题,目前已经成为美国国防部的强制标准,广泛应用于国防、民航、工业控制等领域,如洛克希德马丁公司Aegis军械系统、波音公司B-1B轰炸机军械系统、波音公司扫描鹰无人机侦查及地面控制系统、德国RoboScout机器人侦查车内部通讯系统、NASA智能机器人系统、CAE飞行模拟器系统等,成为了分布式实时系统中数据发布/订阅的标准解决方案。
eProsima Fast RTPS是一种轻量级的DDS中间件,用于在单播和多播中通过UDP等不可靠传输进行best effort和reliable的发布-订阅通信,被广泛用于航空航天和国防军工领域中。eProsima Fast RTPS在性能、特性和对最新版本RTPS标准(RTPS 2.2)的遵从性方面处于领先地位。
容器桥接模块基于eProsima Fast RTPS实现,根据其具体功能分为状态数据发送模块和指令数据接收模块,具体实现流程如图4、图5所示。状态数据发送模块通过订阅ROS topic获得机器人虚拟实体i的状态数据,然后将获得的状态数据序列化,最后将序列化后的数据通过eProsima Fast RTPS的topic发送给Docker容器i。指令数据接收模块通过订阅eProsima Fast RTPS的topic获得Docker容器i发送的对机器人虚拟实体i的行为指令序列化后的数据,然后将获得的序列化后的数据反序列化,得到对机器人虚拟实体i的行为指令,最后将该行为指令通过ROS topic发送给机器人虚拟实体i。
图4 状态数据发送模块实现流程 图5 指令数据接收模块实现流程
在基于Docker容器的运行支撑环境中,部署了每个机器人虚拟实体对应的Docker容器,每个Docker容器中运行着机器人控制软件、机器人间通信模块和Gazebo桥接模块三部分,如图6所示。
图6 Docker容器运行软件构成
2.2.1 机器人控制软件
机器人控制软件是群体机器人仿真系统仿真验证的对象之一,与真实机器人上运行的机器人控制软件是一致的。机器人控制软件根据从Gazebo桥接模块接收到的机器人虚拟实体的状态数据,生成机器人虚拟实体的行为指令和机间通信数据。将行为指令发送给Gazebo桥接模块,供Gazebo桥接模块转发给群体机器人仿真环境中的容器桥接模块;将机器人虚拟实体的机间通信数据发送给其他机器人虚拟实体。仿真验证通过的机器人控制软件可直接部署于真实机器人上。
2.2.2 机器人间通信模块
与容器桥接模块相似,机器人间通信模块也基于eProsima Fast RTPS实现,根据其具体功能分为机间数据发送模块和机间数据接收模块,具体实现流程如图7、图8所示。机间数据发送模块通过订阅ROS topic获得机器人虚拟实体i需要发送给其他机器人的数据,然后将获得的数据序列化,最后将序列化后的数据通过eProsima Fast RTPS的topic发送给其他Docker容器。机间数据接收模块通过订阅eProsima Fast RTPS的topic获得其他Docker容器发送的对机器人机间数据序列化后的数据,然后将获得的序列化后的数据反序列化,得到其他Docker容器发送的机器人机间数据,最后将该机间数据通过ROS topic发送给机器人控制软件。
图7 机间数据发送模块实现流程 图8 机间数据接收模块实现流程
2.2.3 Gazebo桥接模块
Gazebo桥接模块实现Docker容器与基于Gazebo的群体机器人仿真环境之间的双向通信。一方面,Gazebo桥接模块将Docker容器中机器人控制软件生成的行为指令发送给基于Gazebo的群体机器人仿真环境,从而驱动和控制机器人虚拟实体的行为;另一方面,Gazebo桥接模块接收群体机器人仿真环境中对应机器人虚拟实体的状态数据,并将该状态数据转发给Docker容器中的机器人控制软件,供机器人控制软件生成行为指令使用。
Gazebo桥接模块与容器桥接模块相互通信,因此,Gazebo桥接模块也基于eProsima Fast RTPS实现,根据其具体功能分为指令数据发送模块和状态数据接收模块,具体实现流程如图9、图10所示。指令数据发送模块通过订阅ROS topic获得机器人控制软件生成的行为指令,然后将获得的行为指令数据序列化,最后将序列化后的数据通过eProsima Fast RTPS的topic发送给基于Gazebo的群体机器人仿真环境。状态数据接收模块通过订阅eProsima Fast RTPS的topic获得基于Gazebo的群体机器人仿真环境发送的对机器人虚拟实体i的状态数据序列化后的数据,然后将获得的序列化后的数据反序列化,得到机器人虚拟实体i的状态数据,最后将该状态数据通过ROS topic发送给机器人控制软件。
图9 指令数据发送模块实现流程 图10 状态数据接收模块实现流程
在上述实现的群体机器人仿真系统中,开展30架规模的固定翼无人机集群执行区域封控任务的仿真实验。仿真主机的硬件配置为:2颗Intel 8160 CPU,256 GB内存,256 GB固态硬盘+2 TB机械硬盘,P6000显卡(24 GB显存)。无人机集群执行任务的具体流程为:30架固定翼无人机依次起飞至某集结点集结盘旋,集结完成后以箭型编队对某区域进行目标搜索,当某架无人机利用光电吊舱发现目标后,派出2架无人机对目标进行跟踪。
仿真过程中,某一时刻Gazebo的显示界面如图11所示,在3D空间中显示了无人机集群的行为;某一时刻地面站的显示界面如图12所示,在2D空间中显示了无人机集群的位置及部分状态信息。整个仿真过程与群体机器人的机器人控制软件的预期控制效果一致。仿真结果表明,所设计的基于Gazebo和Docker容器的群体机器人仿真系统能够对群体机器人的机器人控制软件进行有效仿真验证。
图11 某一时刻Gazebo的显示界面
图12 某一时刻地面站的显示界面
分析了当前群体机器人仿真系统的不足,基于开源物理仿真环境Gazebo和开源应用容器引擎Docker容器,设计和实现了一种群体机器人仿真系统。使用Gazebo对机器人平台和所处环境进行逼真和精细建模仿真,使用Docker容器对机器人的控制软件进行打包和隔离,Docker容器和Gazebo之间基于DDS通信传输控制指令与机器人的状态数据。仿真实验表明,所设计的群体机器人仿真系统能够对群体机器人的机器人控制软件进行有效仿真验证。