钱 平,顾才东,马建圆,刘 锋,李子龙
(苏州市职业大学,江苏 苏州 215104)
近年来,随着国家海洋开发步伐的加快,人工智能前沿技术的飞速发展,前沿的AI技术与海洋开发相结合必然是大势所趋。随着国家对海洋强国发展战略的提升,在各级政府的引领下,智能水下机器人发展迅猛,水下机器人在军事和民用领域都有着广泛的应用[1]。由江苏省教育厅主办的江苏省大学生机器人大赛水中机器人项目,贯彻了学科建设与课程实践,加快教学深化改革,旨在培养当代大学生动手实践能力、创新能力、团结协作能力,也积极为新一代人工智能发展规划添砖加瓦,该赛项近几年正如火如荼地举办着。
比赛项目规则介绍,首先将机器鱼放于起点,不得超过起始线。当裁判吹哨时比赛即为开始,不能控制水下机器人使其自主游动。水下机器人沿着白色PVC管道进行巡迹游动,游动过程中将识别贴在白色PVC管道上的直径为3 cm的黑色胶布点,并以声音或者光等形式回传,比赛结果以准确率优先,准确率一致时时间短者获胜[2]。以往比赛过程中大部分使用的是光电传感器作为采集信息模块,随着机器视觉的不断发展,开源的机器视觉模块的应用,摄像头采集的数据较其他模块受周边环境影响小,识别准确率高。因此,本比赛策略采用的是将开源OpenMV模块应用于水下机器人来进行该项目的比赛。
基于OpenMV颜色图像识别的水中巡检智能机器人核心控制器采用的是STM32F103单片机,以电源管理模块、驱动电路模块、游动舵机模块、OpenMV模块和LED信号灯等模块构成了整个硬件系统。数字摄像头将采集到的图像信号传给OpenMV模块,以OV7725感光元件作为机器视觉模块,通过OV7725感光元件采集图像并通过内置的图像处理算法将信息传递给水下机器人的STM32控制器来控制机器鱼游动速度、转向等操作,并在检测到管道黑点时以灯光闪烁作为检测信号。整体结构如图1所示。
图1中主控制器采用STM32F103单片机为整个执行系统的控制核心,该单片机集高性能、实时功能强、低功耗、数字信号处理能力强等优点于一身。具有USART、I2C、定时器等丰富的外设,便于开发和应用[3]。
图1 整体系统框
OpenMV摄像头是一款小巧、低功耗、低成本的电路板,可以很轻松地完成机器视觉(Machine Vision)应用。OpenMV搭载Micro Python解释器,使用Python来编程使机器视觉算法的编程变得比较简单。OpenMV具有简单的专用的IDE,它有自动提示、代码高亮的功能,而且有一个图像窗口可以直接看到摄像头的图像,有终端可以debug,还有一个包含图像信息的直方图[4]。可以把采集到的图像算法结构通过串口传递给主控模块,使得执行模块做出相应的动作。
电源模块作为整个系统的供电系统,为了保证水下机器人和OpenMV模块正常工作,在用12.6V的锂电池,降压并稳压到5 V给单片机和OpenMV模块供电,另一路直接给水下机器人鱼尾电机供电。
基于OpenMV的水下机器人管道巡检主要原理是利用摄像头采集到的图像信号通过串口传递给水下机器人执行系统做出相应的动作。该模块搭载了Micro Python解释器,使用Python脚本语言编程实现一系列的功能。本识别系统主要应用到OpenMV的颜色识别功能,通过识别到的不同颜色及色域面积的大小等条件通过串口反馈给单片机使得水下机器人做出相应的动作。在正式比赛运行之前,首先对OpenMV模块进行初始化,包括导入uart类等相应操作,设置串口波特率为9 600,初始化摄像头,选择像素模式 RGB565,设置为彩色,设置为QVGA模式的分辨率为320*240,关闭白平衡和自动增益,关键寻找色块的色域设置white_thresholds=(minL,maxL,minA,maxA,minB,maxB)。这个函数表示白色管道的阈值,黑色标志为black_thresholds。通过提前拍摄管道图片,设置阈值,将所得阈值即LAB值,代入代码中,如图2所示为色域参数的选择和优化,其中黑点是要识别的点,白色的为巡迹的管道。
图2 色域选择设置方法
模块初始化和色域参数选择好之后,水下机器人在比赛运行开机后沿着白色管道直行,期间遇到的情况包括3种:直行偏差时的修正,直角右拐弯和检测到黑点进行报警示意。由于采用的是320*240的像素,所以图像X轴采用-160到160,图像面积为76 800。第一种情况出现直线行驶偏差时中心线会偏移,当偏移到一定程度时,串口回传“P”,单片机利用函数通过左右微调使得中心线坐标保持在0左右;第二种情况出现如图1的直角右转弯时,判断X轴正坐标大于200时并且图像面积介于28 000和76 800时判断为出现直角右拐情况,串口回传“R”,单片机利用右转函数控制水下机器人右转。第三种情况在运行过程中当检测到黑点时,串口回传“L”,单片机利用函数控制LED灯光闪烁3次作为报警示意。
图3是比赛时水下机器人运行的主程序流程。水下机器人上电后,首先进行系统初始化,主要包括OpenMV模块初始化,STM32单片机的中断初始化,各类应用函数初始化。进入循环函数,并且开始时直行运动,当摄像头检测到黑点通过串口发送“L”使得单片机接收到信号时灯光标志位l_bit反复三次置1和0,使得灯光闪烁3次。当摄像头检测到转弯条件时通过串口发送“R”使得单片机接收到信号时右转弯标志位zw_bit置1,水下机器人执行右转弯运动。当检测到整个水下机器人轨迹偏移管道时通过串口发送“P”使得单片机接收到信号时偏移修正标志位mode_bit置1或者置2,置1表示左偏修正,置2表示右偏修正。最终在整个循环程序中完成图1比赛场地的巡迹管道并识别黑点的比赛任务。
图3 软件算法流程
在以往的该项目比赛过程中大部分参赛队伍采用的是红外传感器去获取感知到周围的信号,由于在水中受到精度等影响,效果不是很好,容易产生误报甚至是完全偏离管道的现象,从而导致比赛失败。因此采取优化方案,第一,本系统采用的是摄像头采集信号,能很好解决以上问题;第二,在测试过程中右拐弯时,不能全速游动通过,否则会由于惯性很容易冲出管道导致比赛失败,经过再三测试得出结论:通过右拐弯时把速度降为直线管道时的百分之六十,能够顺利完成比赛。实验室测试的过程中黑点的识别率都在100%,并且跑完全程的时间基本在一分钟以内,取得较好的比赛效果,并在2019年江苏省大学生机器人比赛中取得较好的成绩。
本研究提出了基于OpenMV图像识别水下机器人进行水中巡检比赛策略。OpenMV摄像头模块作为数据采集模块,以STM32单片机作为水下机器人运行核心。整体系统在该项目比赛中识别率和运行时间都有很强的优越性。系统的设计也为智能水下机器人在水底管道巡检等应用领域提供了思路和参考。