秦有成 陈红卫 袁 伟
(江苏科技大学电子信息学院 镇江 212100)
近年来船舶制造业和船舶航运业为代表的传统行业处于一种困境,船舶需求低迷,船舶运营成本增长、船舶操作复杂化以及环保法规日趋严格,因而如何走出困境成为了船舶行业共同思考的问题。在这种背景下,航运界不断增加对船舶的技术投入,船舶的研发建造变得逐渐火热,世界各主要造船国家纷纷开始研发智能应用平台、自主航行系统、远程控制系统以及具备相关功能的船舶。船舶有很多突出价值与意义,其可以执行特殊危险任务达到避免人员伤亡,且能长时间不间断地航行,避免了由于驾驶人员疲劳而造成的风险,更可以降低人力的成本[1]。为了在设计船舶与智能航行算法时,保证开发的安全性,有效性和可持续性,必须进行广泛的开发和测试[2]。然而传统的测试昂贵耗时,具有风险性且只能够在有限的场景下进行试验。而智能航行仿真系平台为这个难题提供了一种安全有效的解决途径,借助仿真环境中对船舶动力学控制,多传感器仿真,多场景模拟,可以极大地提高开发效率,验证船舶的环境感知,定位,路径规划以及决策控制等多模块算法的有效性[3]。
目前在关于船舶仿真的研究已经有了一些进展。侯玉乙[4]等针对船舶全局路径规划航线上可能存在未知静态障碍物的问题,采用模糊控制算法实现自主避障功能,并应用Matlab软件实现了相关仿真。吴青[5]等建立了风浪干扰下的船舶运动数学模型,运用模型预测控制算法对船舶运动轨迹进行控制,使用Matlab 与VC 混合编程搭建了船舶运动可视化仿真平台。然而大多数的船舶的仿真是运用Matlab 的,不能够立体化具象化的观测。目前在仿真系统里能够立体化具象化的观测工具是基于ROS 的Gazebo 仿真器,相关的仿真研究也有了一些进展。崔靓[6]等针对服务机器人的智能导航技术问题,以机器人操作系统为开发平台,应用三维物理仿真软件Gazebo,结合Turtlebot3 机器人,对智能导航算法进行仿真验证。结果表明机器人能准确构建地图,实时避障,呈现良好的仿真效果。胡思旺[7]等针对移动机器人对自主导航的需求,设计、实现了基于ROS 的机器人自主导航解决方案。仿真试验表明,该系统可以满足移动机器人在陌生室内环境中的自主导航需求。本课题针对船舶仿真系统缺乏3D仿真而无法立体化观测的现象,选用ROS 作为平台,利用Gazebo 的三维可视化仿真工具进行船舶的仿真,使采用的算法效果更加直观与真实,实现了三维立体化的船舶仿真平台设计。
本仿真平台的系统架构流程图如图1 所示。主体两大模块,第一部分Gazebo 的船体建模模块,包括船舶动力学模型设计与传感器配置,并据此编写Gazebo plugin 来使船舶能够在Gazebo 的仿真环境下航行并获得环境信息;第二部分ROS的算法导航模块,包括感知系统设计,路径规划设计和航迹控制设计,这些设计可以使船舶更加精准地感知障碍物信息,规划出全局路径和局部路径,并根据路径和障碍物信息实现航迹控制,使船舶能够避开障碍物的同时到达目标点。
图1 系统总体结构
船舶在航行时受到很多因素的影响,在仿真时,通过一组Gazebo 插件来模拟这些因素,包括船舶所受的水动力和力矩,以及船舶推力和力矩矢量。
船舶六自由度运动学动力学模型公式为
船舶的感知系统主要利用船载传感器设备以及信息处理技术设备,获取船舶自身状态信息和船体周围各种信息,为船舶的避障、路径规划提供数据基础,使船舶更加可靠、安全航行。单一的传感器具有不同的成像机理,工作于不同的波长范围,有不同的工作环境与要求,完成不同的功能[8]。但是单一传感器不能获取全面的数据信息,因此难以满足实际的需求,同时利用多传感器数据可以提供更多的数据以及更全面的观测识别。
本课题设计的感知系统采用的传感器有三目摄像头、GPS定位系统、3D激光雷达、IMU惯性测量单元。通过在船体URDF 模型上加载上述传感器模型,再利用Gazebo 的3D 动态模拟器提供的仿真环境,就可以实时地得到传感器数据,最后通过ROS 的topic 机制传递给ROS,ROS 里加载的导航避障算法就能利用相应的传感器数据进行路径规划和航迹控制。
本次设计采用激光雷达与视觉传感器进行数据信息融合,利用各个传感器的优点,取长补短,提高对障碍物信息获取的可信度。具体设计如下:首先由于激光雷达与视觉传感器在船舶不同位置上安装,所以要把激光雷达与视觉传感器进行空间融合,方法是了解相机和激光雷达的测距原理,提取出坐标转换的模型,从而找到两个传感器坐标系与世界坐标系的转换方程,最终完成激光雷达与视觉传感器的空间融合。其次由于不同传感器工作频率不同,其中,激光雷达采集数据的频率是10Hz,摄像机采集数据的频率是30Hz,所以激光雷达和摄像机采集的数据都不是同一时间的信息,从而引起传感器数据的时间上的不对应。所以激光雷达和摄像机数据信息还需要在时间上同步采集数据,实现数据时间上的融合。本次设计的方法是以采样频率低的激光雷达数据为基准,采用多线程同步方式从而实现传感器在时间上的同步[9]。具体而言是创建摄像机和激光雷达线程以及数据融合线程,其中视觉线程是用来接收摄像机图像数据并处理,激光雷达线程是用来接收激光雷达数据并处理,并将处理完的数据存放于独立的链队列中,然后作为融合线程的输入,这样可以保证激光雷达和视觉数据在融合时处于同一时刻点下,从而完成时间的融合。
路径规划设计包括全局路径规划和局部路径规划。全局路径规划是在已知的环境中,给船舶规划一条路径,而局部路径规划是在环境信息完全未知或有部分可知情况下使用的。
本课题采用的全局规划算法是Dijkstra 算法,Dijkstra 算法是单源最短路径算法,以起始点为中心向外扩展到终点,来计算一个节点到其他所有节点的最短路径[10]。算法过程如图2。
图2 Dijkstra算法流程图
在船舶建立全局规划时,使用的是改进的Dijkstra算法,代码的具体方法与步骤如图3。
图3 全局规划算法实际程序流程图
局部规划采用的是DWA 动态窗口法,主要原理是在速度空间中采样多组速度,并模拟这些速度在一定时间内的运动轨迹,再通过一个评价函数对这些轨迹打分,最优的速度被选择出来发送给下位机[11]。动态窗口法运行过程如图4。
图4 动态窗口法算法流程
在代码加入动态窗口法时,整个的程序流程如图5。
图5 局部规划算法实际程序流程图
航迹控制采用的基于LOS 的显式模型预测控制。主要原理船舶根据预设路径及自身位置和艏向角信息,通过LOS 算法计算期望的艏向角ψlos作为跟踪目标。艏向控制器采用显式模型预测控制算法得到期望的艏摇方向力矩N,并作用于船舶,整个的设计图如图6所示。具体设计方法如下:
图6 航迹控制流程图
采用式(1)所示的船舶六自由度运动学动力学模型作为预测模型,并表达成离散化的状态空间的形式:
其中:Ad,Bd,Cd为离散化后的状态空间矩阵。
当受到环境干扰时,状态量会存在静差,因此采用增量形式的状态空间模型,以实现无静差控制[12]。另外,对于跟踪问题,需要在状态空间中加入参考状态[13],改写的状态空间模型如下所示:
定义基于Δu的性能指标函数为
其中:Ny和Nc分别是预测时域和控制时域,且Nc≤Ny;yk+i|k,rk+i|k和Δuk+i|k分别表示在k时刻系统实际输出量,参考输出量和控制增量在k+i时刻的预测值;是由最优控制增量构成的控制增量序列;Q,R 和P 分别是状态,输入和终端权重矩阵,且满足Q=QT≥0 ,R=RT≥0,P≥0。
根据多参数二次规划算法,可以求解该性能指标函数,以此来求取航迹控制的最优控制律。
在Gazebo 的船体建模和ROS 的算法导航的基础上,添加模块与模块之间的数据处理和slam 建图,再进行整体的数据流结构分析与设计如图7,进而实现仿真平台的设计。
图7 仿真平台设计图
为了验证所设计的船舶当真平台的有效性,在Gazebo 仿真平台中搭建真实海洋环境,并加载vrx船舶以及4个柱状障碍物,如图8所示。
图8 Gazebo 仿真图
在此基础上,通过运用Google 的cartographer进行slam建图,把海洋信息和障碍物通过栅格地图的形式记录下来。
把建好的地图通过rviz 显示出来,运行movebase 节点,选定船舶的初始位置和终点位置,即可进行全局规划和局部规划进行避障,如图9所示。
图9 rviz仿真图
船舶根据初始位置和最终位置规划出了一条路线,在图中为绿色,船舶便可以根据规划出的路线进行前进,最终到达指定位置。
本文采用ROS作为平台,设计并实现了船舶自主导航系统。该系统采用Gazebo 环境模拟,gps 定位,激光雷达导航,Dijkstra 全局路径规划,DWA 局部路径规划,结合航迹控制成功地模拟了船舶的导航与避障,突破了传统的2D 船舶的Matlab模拟,实现了逼真的3D具象化立体化船舶仿真。