朱志巍 陈华东 张 洁
(1海军工程大学,武汉,430033;2 31131部队,南京,210016)
水下机器人是先进机器人技术在水下的特殊应用,近几十年来,随着科技的不断发展,水下机器人技术取得长足进步,继而出现了一大批性能良好的水下机器人,它们主要用于海底考察、钻井支援、海底施工、数据采集、水下设备维护与维修等作业任务。
图像是人类获取信息的主要来源,也是智能机器人感知环境和识别目标的重要信息源之一。图像处理技术经过几十年的发展逐渐成熟,目前已广泛应用于航空航天、生物医学工程、通信工程、工业检测、军事公安等领域[1]。
本文结合单关节机器鱼(如图1所示),即水下机器人创新平台基础版(下文称机器鱼)与输油管巡检技术挑战赛的相关要求及比赛规则[2],提出利用STM32F429IGT6(下文简称STM32)核心板与OV2640摄像头相结合进行图像识别处理的方法,使得机器鱼可以实现管道巡线、漏点检测等功能。
图1 单关节机器鱼的整体图(左)与分解图(右)
输油管巡检技术挑战赛比赛场地设置如图2、图3所示,将PVC 管铺入水池底部用来模拟输油管线,PVC 管直径为75mm;采用直径 3cm 的圆形实心黑色标记表示漏油处,共设置 8 个漏油处,随机分布在输油管各处,其中,有2个点分布在侧面区域,2 个点分布在深水区。图2中标识起点和终点所处的虚线方框内,上半部为起点区,下半部分为终点区,通过黑色胶带标记规划范围。
图2 比赛场地俯视图
图3 比赛场地侧视图
输油管巡检技术挑战赛的比赛规则为:比赛开始前,机器鱼在起点区,不得超过分隔线;裁判吹哨示意比赛开始,同时比赛开始计时,由裁判远程连接并启动机器鱼,启动后不允许再进行任何操作;机器鱼沿着输油管线并按照白色箭头指示方向游动,不得偏离管线,从正上方观察,若机器鱼在水平面上的投影与管线在水平面上的投影没有重叠则比赛停止,计时结束;机器鱼游动的同时检测管线上是否有标记的漏油处,检测到漏油处时通过某种方式及时告知裁判及观众,比如,声音、光、回传PC机数据等;机器鱼全身都进入终点区时比赛结束,计时停止;比赛时间共计150s,如果150s后机器鱼仍未到达终点区,比赛亦停止。每条机器鱼一共有两次比赛机会,在比赛过程中不得暂停;比赛满分120分,机器鱼正确检测到一个漏油处得 10 分,检测到侧面的漏油处和深水区的漏油处均得20 分。正确的检测要求是:从正上方观测到机器鱼与漏油处重合,并且同时以明确的方式报告检测到漏油处。如果机器鱼在未遇到漏油处时进行报告则为误报,扣10分。
本系统总体设计思路为:系统以STM32为主控核心,利用TIM定时器产生PWM信号,控制舵机摆动速度和方向使机器鱼游动前进;通过DCMI接口接收图像传感器OV2640摄像头采集的图像,利用DMA数据流方式将图像发送到SDRAM,在SRAM中对采集到的图像数据进行实时处理。若图像中出现漏油点,则通过GPIO端口输出至蜂鸣器进行报警,若图像中白色PVC管道没有在视野中央,则利用PWM信号改变舵机姿态进行调直动作;若图像中出现管道直角处,则利用PWM信号控制舵机姿态进行转弯动作[3]。系统原理框图如图4所示。
图4 系统原理框图
本系统硬件主要包括STM32核心板、OV2640摄像头传感器、机器鱼体(包含舵机、电源),其中机器鱼体如图1所示。
本系统选用ARM 公司设计的STM32核心板,其采用Cortex-M4 内核(CPU),主频达180MHz,具有1MB Flash,256KB SRAM,可接32M SDRAM,能存储大容量程序和数据;拥有2条APB总线、2条AHB总线和1个32位多AHB总线矩阵,可外挂如GPIO、DCMI等多种I/O和外设。因此,STM32可以设计实现对运算量有较高要求的实时图像处理和舵机控制。
OV2640摄像头传感器主要包括控制寄存器、通信控制信号及外部时钟、感光矩阵、DSP处理单元、数据输出等。该传感器不仅支持输出像素最大为200万的图像(1600x1200分辨率),还支持使用VGA时序输出图像数据,输出图像的数据格式支持YUV(422/420)、YCbCr422、RGB565以及JPEG格式,若直接输出JPEG格式的图像时可大大减少数据量,方便网络传输。OV2640摄像头传感器还可以对采集到的图像进行补偿,支持伽玛曲线、白平衡、饱和度、色度等基础处理。根据不同的分辨率配置,传感器输出图像数据的帧率在15-60帧之间均可以调节,工作时功率在125-140mW之间。
系统主控器控制OV2640摄像头时,采用SCCB协议读写其寄存器,输出图像时采用VGA时序,而且一帧一帧地输出,在帧内的数据一般从左到右、从上到下、一个像素一个像素地输出。OV2640摄像头采用Y2-Y9数据线,图像格式设置为RGB565,在数据输出时,Y2-Y9数据线会在1个像素同步时钟PCLK的驱动下发送1字节的数据信号,所以2个PCLK时钟可发送1个RGB565格式的像素数据。像素数据依次传输,每传输完一行数据时,行同步信号HREF会输出一个电平跳变信号,每传输完一帧图像时,VSYNC就会输出一个电平跳变信号。
STM32的控制器包含DCMI数字摄像头接口(Digital Camera Interface),它支持使用VGA时序获取图像数据流,支持原始的按行、帧格式来组织的图像数据,如YUV、RGB,也支持接收JPEG格式压缩的数据流;接收数据时,主要使用HSYNC及VSYNC信号来同步。STM32的DCMI外设使用的通信时序与OV2640摄像头的图像数据输出接口时序一致。
在STM32的内部,采用HCLK作为时钟源提供给DCMI外设。从DCMI引出有DCMI_IT信号至中断控制器,并可通过DMA_REQ信号发送DMA请求。数字摄像头接口每接收到32位数据,触发一次DMA请求,由于DCMI采集的数据量很大,此时可以使用DMA把采集的数据搬运至内存[4]。
图像采集原理框图如图5所示,STM32内核、DCMI外设和OV2640摄像头三者相互配合,OV2640摄像头将图像信息转变为电信号后,通过DCMI外设将数据存储至STM32的SDRAM中,以便接下来对图像数据信息进行分析处理。
图5 图像采集原理框图
在图像数据采集传输过程中,每采集一行数据需调用一次DMA数据传输,包含本次传输的目的首地址及传输的数据量。DMA每次传输完毕后会引起DMA中断,以便在中断服务函数中配置DMA传输下一行数据。同时,为了防止DMA有时出现传输错误或传输速度跟不上,导致数据错位、偏移等问题,需要配置DCMI帧中断。每次DCMI接收到OV2640摄像头的一帧数据,得到新的帧同步信号后(VSYNC),就进入中断,复位DMA,同时将DMA传输的目的首地址进行偏移,使它重新开始一帧的数据传输。这样可以使采集数据连续不断地传入SDRAM中[5],从而实现图像数据的连续传输。
在每一帧图像传输完成后,系统对本帧图像进行简易的平滑滤波处理,以方便后续的图像处理工作。因为白色PVC管道与蓝色场地背景交界处、圆形实心黑点与白色PVC管道交界处颜色差异明显,所以可利用此特点检测图像边缘。抽取PVC管道和圆形实心黑点的轮廓,运用一阶Sobel算子模板,利用像素邻近区域的梯度值来计算一个像素的梯度,运算结果得到一幅边缘幅度图像。
在STM32核心板中存入PVC管道图像模板、PVC管道直角处图像模板和圆形实心黑点图像模板信息。每一帧图像边缘检测完成后,系统将得到的边缘幅度图像与事先存入的两幅模板进行匹配,若边缘幅度图像中的PVC管道与标准的PVC管道图像模板中的PVC管道不重合,说明机器鱼偏离PVC管道,则输出控制舵机信号,对机器鱼体进行调直操作;若与PVC管道直角图像模板匹配吻合,则输出控制舵机信号,改变舵机姿态进行转弯操作;若与圆形实心黑点图像模板匹配吻合,则输出信号使蜂鸣器报警。
通过上述图像处理,本系统可满足总体设计思路中提出的调直、转弯、报警动作要求,实现机器鱼具备管道巡线、漏点检测的功能。
笔者按照上述内容进行系统软硬件设计,完成机器鱼平台的改装和程序编写烧录后,搭建如图2所示的场地进行最终测试分析。
经多次调试、测试,机器鱼能够实现沿PVC管道游动且不偏离管道。在游动的同时,机器鱼会检测管线上标记的漏油点,检测到漏油点后通过蜂鸣器报警,没有出现误判或漏判的现象,最短耗时48s,取5次的调试测试结果如表1所示。
表1 机器鱼测试结果记录
测试结果表明:利用STM32核心板与OV2640摄像头相结合进行图像识别处理,使得机器鱼在管道巡线、漏点检测上取得了良好效果,机器鱼不仅具备自主沿管道游动的能力,还能准确找到漏油点,可以认定:本方案达到设计要求。
在输油管巡检技术挑战赛中,笔者及其团队利用上述平台参赛获得了该项目的冠军。由此可见,利用STM32核心板与OV2640摄像头相结合进行图像识别处理实现管道巡线、漏点检测的设计方法具有明显优势。同时,此类图像处理设计思路对于实际工程应用也具有很强的现实意义。