刘雨青,杨喜清,楚慧勇,黄璐瑶
(上海海洋大学 工程学院,上海 201306)
近年来,随着池塘养殖产业的迅速发展,各式各样的自动化投饵设备也相继出现,越来越多的无人投饵船被用到养殖当中,王真亮[1]设计了一种自主巡航式太阳能充电投饵船,但阴雨天气时无人船就会受到影响。高洁等[2]设计了一种可以实现两种方式进行无线充电的无人船充电系统。一方面可以实现无线充电,另一方面实现太阳能供电的功能,但是无人船的自主返航也将成为一个难点。基于此研究一种可以自主巡航无人船控制系统,实现无人船无法顺利返航的问题。
无人船自主巡航的关键技术就是航向的控制、航迹的选择、动态避障等方面。王丹等[3]人通过无人船的航迹跟踪设计,设计航向以及航向控制器,将模糊控制与传统的PID控制进行结合的方式进行无人船的控制。薛飞[4]提出了一种将无人船的路径分为全局路径以及局部路径两个部分完成无人船的航行任务。通过传感器感知周围的环境实现动态避障。霍星星等[5]人基于PID控制、模糊控制、神经网络三种控制算法方式设计了一种船舶的自动舵。以航向的偏差作为输入,通过PID算法对无人船进行控制。J.M.Larrazabal等[6]采用遗传算法对传统的PID控制进行优化调节,无人船实际航行中的各种未知条件使用模糊控制进行调节,实现无人船的路径跟踪。
本文的研究目的就是为了实现无人船高效快速自主返航,将返航的过程分为两个部分:全局路径规划与局部路径规划。全局路径规划通过模糊PID实现无人船的航向控制,航迹控制算法实现无人船从一点航行至另一点。局部路径规划通过激光雷达与图像识别技术进行融合来实现无人船的动态避障。
无人船系统构成整体分为三个部分:主控制器模块、电机驱动模块、避障模块、航向与定位模块、电源管理模块等组成[7]。如图1所示。
图1 无人船的系统构成
避障模块:激光雷达可以对周围的环境进行感知,获取障碍物的距离和角度信息。摄像头通过YOLOV4目标检测算法可以对障碍物进行识别。同时将信息通过串口3传输给STM32进行避障处理。当遇到的较大障碍物时由激光雷达进行处理,当障碍物较小激光雷达不能检测时,使用图像识别技术进行避障。
主控制器模块:主控制器模块主要是航向控制算、航迹选择算法与各传感器进行结合使得无人船具有自主巡航功能。主控制器将树莓派传输过来的信息与相关控制算法进行结合,进而控制电机驱动模块,使无人船进行动态避障。
电源管理模块:对无人船的电池进行管理,当无人船电池电量不足时,发出提示信息,通过网络通讯模块传输到上位机。
由于差分GPS可以实时获取经纬度、航向角等信息,所以将GPS获取的位置信息以及航向角信息作为控制算法的输入参数。通过计算当前点坐标与目标点的坐标的偏差,获取无人船的期望航向角,在通过主控芯片控制两个电机的PWM调整两电机的转向,控制无人船进行实时调整方向,实现闭环控制。无人船控制策略如图2所示。
图2 无人船控制策略
无人船全局路径规划主要是通过对航迹的选择实现无人船点到点的航行,通过模糊PID控制实现无人船的航向控制,通过仿真实验验证航向控制策略的可行性。航向与航迹控制的结合使得无人船自主航行。
航迹的选择首先要进行航迹数学模型的建立,航迹数学模型如图3所示。无人船起始点A(xA,yA),目标点坐标B(xB,yB),CN(xN,yN)为无人船的当前航向目标点CN-1(xN-1,yN-1)为无人船GPS的上一坐标点。根据无人船的起始点位置坐标以及目标点坐标可以确认无人船的实际航迹,同时也可以确认无人船实际偏离航迹的垂直距离E,θ3为无人船与理论航向的允许偏差角度值,在调整时需要在此范围内调整。其中θ1指的是无人船的实际航向与当前坐标点与目标点的夹角,θAB为无人船的实际航向与x轴的夹角,θACN为上一个目标点到当前点与x轴的夹角。∂为无人船在规定航迹的最大偏差角度范围。
图3 航迹数学模型
由已知条件可得:
由式(1)和式(2)根据勾股定理可得轨迹的垂直位移E为:
E为无人船在正确的航迹偏差范围。保持直线行驶。当E>0航迹偏理论路线的左侧,反之则偏离理论路线的右侧,θAB-φ≤θ4≤θAB+φ无人船在正常的航线上。
通过相关算法可以计算出起始点与目标点的距离、方位角信息[8]。
为了提高无人船的航向控制器性能,在PID控制的基础上采用模糊PID控制完成无人船控制,其控制原理如图3所示。
图4 模糊PID控制
首先进行Nomoto模型[9]建立,得出航向角与推进器偏转角之间的传递函数。其次分析模糊PID控制原理,目标点的航向角φ0与当前的航向角φ的偏差e以及偏差变化率ec作为模糊控制的输入,经过相关模糊处理输出相应的参数作为PID控制器的输入实时调整PID参数,PID控制算法得到的推进器偏转角δ输入Nomoto模型,即可得到无人船的航向,实现闭环控制。
仿真实验需要将输入的两个实际值的变量进行模糊化处理得到相应的论域EC、E,并将EC、E输出论域控制在[-3,3],控制在[0,3]。考虑到模糊子集对无人船的航向影响,将论域量化为{NB、NM、NS、ZO、PS、PM、PB}7个级别,采用隶属度函数为三角形函数,得出隶属度函数。该设计采用加权平均值法将模糊规则进行推理得到模糊集,然后将模糊集转换为精确地ΔKP、ΔKI、ΔKD值。具体计算公式如式1所示,其中u为输出值,xi为输出模糊论子集,ki为输出子集对应的隶属度[10]。
无干扰的情况下,将无人船航速设置为2m/s,初始角度为0°起始点位置坐标(0,0),无人船的目标点为(60,50),得出无人船的方位为50°,使用Simulink模型搭建进行仿真如图2-2所示,仿真结果对比图如图5所示:
图5 模糊PID控制Simulink仿真图
从仿真结果可以看出,PID控制下,大概第6s时无人船的航向与目标点一致。模糊PID控制下大概第7s航向与目标点方向一致,如图6所示。
图6 两种控制策略下的航向角仿真结果
存在干扰的情况下,为了验证模糊PID控制在实际的控制过程中的可靠性,仿真更接近真实情况,假定无人船受到一个自南向北的1m/s水流干扰,无风的情况下的进行仿真,将无干扰与有干扰的情况进行仿真结果对比,如图6所示。综合分析在有外界干扰的情况下,无人船达到目标方向的时间会变长,但是依然具有更高的稳定性。
图7 航向控制仿真结果
无人船动态避障在不偏离全局路线的情况下,将激光雷达对环境的感知信息与图像识别的信息融合进行无人船的避障。避开障碍物后可以重新回到规定航线进行航行,在某种程度上保证了无人船的顺利返航。图像识别部分利用OpenCV对障碍物的信息进行采集,采用YOLOV4目标检测算法实现障碍物的识别。激光雷达环境感知部分采用的是官方提供的SDK进行开发调试。
激光雷达通过数据的读取,得到相对应的数据报文,再经过相关公式算法就可以测出实际船与障碍物的实际夹角,从得到的角度和距离进行判断,进而控制电机螺旋桨M1和电机螺旋桨M2的转动。并且还可以通过串口1以无线通讯的方式发送给上位机来进行显示障碍物的位置距离,也可以进行上位机的控制,进而控制无人船的电机转动。无人船行驶过程中激光雷达的扫描图如图8所示。
图8 激光雷达扫描图
在树莓派上这种计算资源相对有限的开发板上做目标检测使用YOLOV4相对较好。YOLOV4网络架构可以将YOLOV4目标检测算法分为4个部分,具体包括:输入端、基准网络、Neck网络与Head输出端[10],将YOLOV4模型应用到数据采集、网络设计、模型参数训练:
数据采集,图9为USB免驱采集障碍物部分样本,障碍种类有:塑料瓶、易拉罐、打捞的船只等常规障碍物。采集图片样本后,将VOC格式数据借助LabelImg软件进行标注,是一个在Python下运行的软件,可以高效地捕捉到目标物,提高效率。图10为LablImg软件进行标注图。
图9 障碍物采集部分样本图
图10 LablImg标注软件
目标识别实验通过对障碍物数据的采集、标注、训练等操作,通过实验验证目标障碍物识别效果良好,通过YOLOV4目标检测算法可以实现对物体的精准识别,符合无人船目标识别的技术需求。图11为无人船的部分障碍物识别。
图11 障碍物识别实验
自主巡航的实现首要要对整体的框架进行设计,然后将依靠的几个主干分支程序填写进去。自主巡航实先主要依托的几大分支:主程序、自主巡航程序、地图程序、动态避障程序[11]。
自主巡航程序主要用于起始点至目标点的设定,将地图设定信息传输给主控芯片。
地图程序主要是获取设定无人船的起始点,目标点的坐标信息。
动态避障程序主要是通过激光雷达来感知周围环境,摄像头用于图像识别障碍物,两者进行结合达到避障目的。
无人船进行自主巡航流程图如图12所示。
图12 自主巡航流程图
实现自主巡航具体分为以下几个步骤:
1)上位机主控界面中点击自主巡航,此刻无人船开启了自主巡航功能。无人船控制程序初始化,在上位机界面地图上标注一点中心点作为无人船的起始出发点,紧接着就是在无人船起始点经纬度编辑框中输入经纬度坐标信息,作为无人船的起始点经纬度坐标,并进行设定,接下来响应函数将获取并存储起始点纬度坐标。同时利用UM_StartPosition消息将无人船起始点地图坐标发送给地图程序,此刻地图程序中的响应函数接收到地图坐标以后,将起始点位置显示在地图上。
2)在上位机地图界面中设定四个点作为无人船航行点,其中一点为最终目标点。地图程序中的鼠标点击后,相应的响应函数OnButtonDown依次获取目标点地图坐标,并利用UM_TargetPoint消息将目标点坐标发送给主程序。当相应的响应函数接收到目标点坐标后,存在数组M_TargetArray中,根据无人船的起始点与目标点地图坐标信息,根据先关算法算出实际的经纬度坐标并将数值存储到相应的数组中,将无人船切换位自主巡航模式后,响应函数Wm_AutoNaviStart将消息传递给主控制程序,对应的响应函数OnStartAuto将无人船航行起始点设置为1。
3)当主程序接收到GPS信息后,开始标志位才置1,表示无人船进入自主航行状态,将接收到的GPS信息通过串口发送给主控制程序。然后主控制程序将接收到的方向传感器模块、激光雷达、图像识别模块的信息进行解析融合,通过相关算法计算航向角、距离等信息,从而完成无人船的自主巡航。
无人船的自主巡航、定点返航实验,选取上海海洋大学的一个人工湖作为测试水域,忽略无人船与水体的摩擦,无风速,1m/s水流速情况下进行测试。
在上位机界面完成航迹点的设定,将坐标(30.885188N,121.898611E)作为起始点,无人船的起始航向为180度。由MATLAB得出拟合曲线,由网络通讯模块将无人船轨迹信息上传上位机界面,图13为无人船的模拟轨迹与实际航行轨迹图。
图13 无人船试验航迹图
图14为无人船遇到障碍物进行自主避障的图片。当无人船航行到理论的目标点时,通过传统目标识别技术去缓慢的逼近目标点,可以避免由于外界不可抗力因素以及GPS定位不精准带来的误差。当无人船航行至理论的无线充电装置坐标时,通过目标识别技术去缓慢的逼近目标点,图15为无人船识别到无线充电装置,正在慢慢逼近目标点。
图14 无人船自主避障
图15 目标装置图像识别
本文主要研究主要是实现无人船自主巡航进行返航的问题。通过模糊PID控制实现对无人船航向控制;通过航迹路线的选择、路径控制算法实现无人船点到点的自主航行;通过激光雷达与图像识别技术进行融合实现无人船的动态避障;但是在实际的环境中,大水流风速影响较大,对无人船的返航产生影响,所以在后面研究中针对不同的水流、风速展开研究,真正意义上的无人船的自主精准返航。