基于MOOS的自主式水下机器人导航系统
2021-11-10邱海洋曾庆军智鹏飞
邱海洋, 曾庆军, 智鹏飞
(江苏科技大学 电子信息学院, 江苏 镇江 212003)
自主式水下机器人(autonomous underwater vehicle,AUV)又称为自主式水下无人运载体,是一种具有探测和感知能力,且可以在水下运动的装备.它可以通过远程控制或自主操作的方式代替人类进行海洋调查和水下作业,具有广阔的应用前景[1-2].AUV导航系统发展方向是减少系统对母船的依赖,最终形成更加智能的自主导航系统[3].但AUV是一个复杂系统的集合,集成了运动控制、多传感器融合、模式识别等多项技术,因此对软件控制系统提出了极高的要求.由于AUV的试验成本极高,水下机器人的应用与算法验证都需要一个理想的仿真环境进行测试,水下机器人仿真环境的建模较为困难,要考虑到水下的流体力学及作用于机器人上的一些复杂传感器参数.当前,使用较为广泛的系统主要有基于ROS(robot operating system)系统的UUV仿真(unmanned underwater vehicle simulator)系统和基于分布式结构星型拓扑的MOOS系统.UUV仿真系统是基于欧盟智能水下异构集群协作网络项目(SWARMs)开发出来的,载体模型由Gazebo物理引擎生成,属于纯数据仿真.MOOS软件系统由美国麻省理工大学开发完成,对水下机器人具有更高的专业性与兼容性,已经成功应用于水下无人航行器及大型海洋传感系统中.它具有自身分布式和模块化的设计理念、凭借易用性、可扩展性和可靠性等优点,为海洋航行器的设计提供优良的软件功能[4-5].为此,笔者提出应用MOOS系统对AUV导航系统进行导航位姿、通讯及三维信息的仿真,从而更好地模拟AUV水下航行轨迹及导航数据采集.
1 AUV导航系统和MOOS系统简介
1.1 AUV工作原理及导航系统
以美国Hydroid公司研发的水下机器人为例[6].AUV舱体分为前舱、中间舱和后舱3个部分.前舱主要用于放置各种水文传感器、水下摄像头、多波束等传感器模块.中间舱主要装置PC104控制计算机、通讯设备、声呐和惯性导航单元等.后舱主要是动力控制、能源及动力驱动等系统.
AUV主要工作是在贴近水面或者复杂水下环境中自主展开执行各项任务[7].其硬件导航系统主要配备了惯导系统(INS)、多普勒测速仪(DVL)、卫星定位系统(GPS)、深度计和高度计.传感器主要参数见表1.其中,惯性导航的精度包括陀螺仪精度与加速度计精度,DVL参数为速度百分比,GPS参数为单点定位精度,深度计与高度计参数为全量程(FS).
表1 传感器主要参数表
导航信息通过计算机处理,应用网线与主控计算机相连,采用TCP协议向控制系统发送导航信息.此外,AUV导航系统采用开放式硬件构架,可以通过随时增加导航信息源来保证导航系统的精度.AUV导航系统软件采用的模块化设计有效降低程序的复杂性,一般由3个模块组成,分别为串口通信模块、导航滤波模块和网络通信模块.导航系统模块结构图如图1所示.
图1 导航系统模块结构图
操作系统是基于可编程逻辑控制单元VxWorks软件系统开发的,在执行任务时基于任务优先级,通过抢占方式进行调度,对不同的任务以数据结构共享的方式进行通讯处理.为了保证系统软件的可靠性,采用卡尔曼滤波器对数据进行滤波处理,以减免异常数据干扰对系统的影响.
1.2 MOOS系统简介
MOOS系统作为1种全新的设备,通常被描述为各种应用程序的“中间设备”,它通过类似中央服务器机能的MOOSDB模块连接了所有正在运行的应用程序APP[8-9].每个应用程序都继承了1个通用的MOOS接口,该接口提供了一种功能强大、易于使用的数据交互方法,可完成客户端与服务器端及其他应用程序的通信[10].
2 基于MOOS 的AUV系统设计
2.1 MOOS整体设计思路
MOOS软件的设计主要基于以下3个思想:
1) 后座驾驶员的设计理念.图2为后座驾驶员设计关系图.
图2 后座驾驶员设计关系图
后座驾驶员设计的主要思想是实现航行器控制系统和自主系统的分离[10].航行器控制系统运行在主航行器计算机上,而自主系统运行在单独的负载计算机上.这样操作的主要优点是通过将航行器自主系统与控制系统分离,提高了运算速度,对航行器的控制也更加高效.它们之间的工作过程简述如下:航行器从主计算机上接收航行器的位置和航线信息,从负荷计算机上获取方向、速度和深度信息;自主系统为航行器控制系统提供前进的方向、速度和深度等命令,控制系统执行命令,并传递航行信息给自主系统.图2中,MOOS系统具有自治功能,可以将各个APP统一为1个信息处理整体,但是需要满足有效载荷的计算机.
2) 发布-订阅式设计.MOOS提供了基于发布-订阅体系结构和协议的功能.每个进程通过星型拓扑中的单个数据库与其他进程通信.MOOS进程星型拓扑图见图3.MOOS社区是一系列MOOS应用程序的集合,这些应用程序通常运行在1台机器上,每个程序都有1个单独的进程ID.每个进程通过1个MOOS数据库模块(MOOSDB)以发布-订阅的方式进行通信.每个进程独立于其他进程,并由用户设置的频率执行其内部循环.
图3 MOOS进程星型拓扑图
3) 基于行为的控制设计理念.基于行为的控制设计理念是行为自主设计系统(IvP Helm)的核心设计思想.IvP Helm是1种基于行为的行为控制器,其自身也是1个MOOS应用程序.其作用是通过多目标值优化方法,最终实现航行器的协调运行.IvP Helm是1个非常特殊的软件模块,包含在所有自动化系统的软件模块中.每个行为都有1个接口函数,可以配置每个行为的接口参数,从而实现想要的功能.这种配置通常包含了确切的坐标点、搜索区域和速度等详细信息.当出现多个行为竞争时, IvP Helm求解器会对它们进行分析,并找出优化方案.IvP Helm求解器优化方案如图4所示.
图4 IvP Helm求解器优化方案
求解器通过调用1个目标函数来实现这种协调.目标函数来自航行器中的一些行为参数,例如,航行器的航向、速度和深度设置等.总之,IvP Helm是实现基于多目标函数优化的1种技术,可以通过合作和协调航行器的各种行为,保证命令被正常执行.
图4中的IvP Helm循环过程如下:① 从MOOSDB读取邮件信息,读取的信息被解析,并存储在本地缓冲区中以供行为使用.② 读取所有发来的消息,并存储于本地后,MOOS将分析所有行为,并建立行为模型.③ 分析每种行为,生成IvP Helm函数,并在循环结束时将返回的变量值以消息模式发布到MOOSDB上.④ 分析目标函数,从而实现最优化处理.⑤ 所有变量值都发布到MOOSDB,以供其他MOOS进程使用.
2.2 MOOS系统设计框架
MOOS系统具有模块化设计、分布式设计和星型拓扑结构设计的特点.模块化设计的好处是通过把不同的功能抽象成软件模块,从而分工非常明确,对于新模块的搭载也非常便利.系统中不同的应用程序或模块,如pAntler(开启任务)、iAHRS(航向)、iGPS(定位)、iRemote(远程控制)、uMS(图形界面)、pControler(控制程序)、pMOOSBrigeEx(铱星和无线通信)和pLogger(记录数据)等功能互异,且相互独立的应用程序都与中央服务器模块MOOSDB连接.分布式设计可以实现不同模块运行在不同的水下机器人控制平台,有利于资源合理分配.星型拓扑结构如图3所示,MOOSDB处于结构中心,是MOOS软件结构的核心部分,主要进行不同模块间信息交互的协调工作.所有通信都通过这个中央服务器应用程序进行.MOOSDB作为MOOS系统的服务站和数据管理站,被认为是整个软件框架的信息中心及信息交互平台.
MOOS系统客户端之间相互透明独立,互不干扰.网络结构设计保持简单,服务器完全了解所有活动匹配,可以合理分配通信资源.
2.3 MOOS通讯机制
MOOSDB和客户端之间传输的数据取决于用户的需要.然而,数据的形式受到MOOS的限制.MOOS只允许以字符串或双精度格式发送数据,格式数据通常以字符串格式进行发送.以进程1和进程2为例,进程1代表AHRS的驱动程序,用来获取AUV的航向姿态等数据,进程2代表USV的控制进程,用来订阅USV的航向参数.进程1和进程2都
包含在CCommsClient组件中,MOOSDB与它们相连.MOOSDB进程间通信模型如图5所示.
图5 MOOSDB进程间通信模型
进程2要采集进程1的航向数据,该过程是通过调用Register函数来通知MOOSDB服务器,MOOSDB接收后会通知进程2,告知其最小的时间间隔.当进程1获取航向信息后则会调用Notify函数,并发送数据给MOOSDB服务器.然后,当MOOSDB服务器接收到进程1发送过来的航向信息后,服务器会定时地把接收到的消息发送给进程2,同时会把进程2的基本信息反馈给进程1.最后,进程1和进程2都可以通过调用Fetch函数以随时获取它们所需要消息.进程1与MOOSDB通信流程图如图6所示.
图6 进程1与MOOSDB通信流程图
MOOS通讯机制对于其他模块的添加变得更加便捷、高效,也便于软件的开发与维护.由于各模块都是以MOOSDB为核心的服务器,也保证了自主式水下机器人系统在采集数据时可以做到同步性和一致性.
在水下航行器的实际研究中,由于增加的模块不多,所需处理的数据有限.如GPS卫星导航、数字罗盘、航向姿态采集系统、多普勒测速仪等数据较少的传感器,往往通过串行口进行通信.而摄像头与其他一些图像信息等数据较多的系统都是通过以太网通信,并发送给其他处理器,由它们处理信息.因此,MOOSDB的通信机制完全胜任数据传递和信息共享的工作.以MOOSDB为核心的MOOS通信机制有很多优点,例如,当水下机器人工作时,星型拓扑的结构形式使得其上面无论搭载了多少模块,它们的通信方式都是一样的.
3 基于MOOS的AUV导航仿真
3.1 仿真实例
基于MOOS的AUV仿真研究是将MOOS IvP软件安装在Ubuntu系统中.该系统基于Debian GNU/Linux,支持x86、AMD64(即x64)和ppc架构的开源操作系统.首先,要在计算机上安装上Ubuntu系统,本研究中所用的Ubuntu系统的版本为Ubuntu 14.04LTS.然后,在控制台输入命令:
S|cd moos-ivp/ivp/missions/s1_alpha
S|pAntler alpha_moos
当显示图7所示页面时,代表MOOS IvP已经安装完成,并模拟AUV相应录像,左侧蓝色区域为导航信息参数.
图7 MOOS IvP仿真AUV运行图
3.2 AUV导航系统模块仿真分析
MOOS包含了1个名为CMOOSApp的基类,它简化了作为派生子类编写新的MOOS应用程序的过程[11].在CMOOSApp基类下是1个循环,它重复调用1个名为Iterate的函数,该函数在默认情况下不执行任何操作.如果想要编写1个新的应用程序,其中1项工作就是编写这个函数,使应用程序能够执行想要的任务.在执行程序循环时,CMOOSApp还需要检查是否向应用程序发送了新邮件消息.如果有,则调用另一个虚函数OnNewMail,这是用来处理新邮件消息的函数.MOOSDB模块主要功能是为水下机器人提供人工控制接口,操作人员可以通过岸上软件平台上的键盘等外设设备实现对机器人的远程控制.
3.3 基于MOOS的AUV导航系统模块仿真分析
在用户图形界面(GUI)中任意调整轨迹长度、缩放大小和颜色、航行器尺寸和颜色及平移和缩放等航行器的参数.它们也可以在pMarineViewerMOOS配置模块中设置.部分参数信息见表2.
pNodeReporter存储位置、速度、航向和深度等航行器导航信息,以及操作模式和平台类型等其他信息,并生成变量摘要信息,供pMarineViewer等查看器应用程序使用.pNodeReporter应用程序运行在真实的或模拟的航行器上,并生成节点报告,作为AIS报告的代理,以便航行器之间信息共享.这个过程中不断地收集本地平台信息和导航数据,并以NODE_REPORT_LOCAL的MOOS变量的形式创建1个类似于船舶自动识别系统(AIS)的报告.pNodeReporter配置参数见表3.
三维航行器模拟器应用1个简单的程序uSimMarine,其功能是可以根据当前执行的任务和之前时刻航行器的状态信息更新水下机器人的状态、位置和轨迹信息,如三维的位姿状态信息、速度信息、旋转矢量,以及是否发送信息的逻辑位监测.其中方向x定义为前向,y定义为左手侧,z定义为天向.由于AUV的运行一般不经常涉及垂直起降,因此z方向信息一般不列入参数配置清单.仿真过程中可以通过pause暂停,以读取相关的状态信息,并进行调试.具体的配置参数见表4.表4中,通过drift相关变量的数据检测,可以监测航行器的位置偏移;通过检测深度相关变量数据,可以知道绝对深度与深度变化速率信息;通过检测sim_pause参数可以判断是否暂停对系统仿真的操作,以便于利用中间变量值查阅故障诊断;通过start_pos参数值的采集和分析,可以知道仿真初始位置,以生成轨迹信息;利用thrust_factor数据可以了解载体的动力信息.
4 结 论
1) 笔者介绍了AUV导航系统的原理与应用场景,针对MOOS系统对AUV导航系统进行导航位姿、通讯及三维信息的仿真,模拟AUV水下航行轨迹及导航数据采集.
2) 对MOOS系统中的配置模块pMarineVie-wer、pNodeReporter和uSimMarine的核心配置参数进行详细介绍,实现AUV模拟调节的便捷操作.
3) 在GUI显示模块下,设计了实时的AUV运动行驶场景,并根据产生的导航数据进行解析,使用集成算法进行位置估计解算.