基于STM32图像处理的机器人自动充电解决方案---二

        接上一篇基于STM32图像处理的机器人自动充电解决方案

                                                                                          第2章 总体设计

      本方案,主要利用单目视觉,红外传感器为辅助,在传感器使用上远远少于其他方案,而且一般服务型机器人,都有摄像头和红外线传感器,所以在自主充电时利用摄像头来定位,减少了硬件设备的开销,而且摄像头不会被其他传感器干扰到,检测结果比较精准。本方案的总体框架如下图2-1所示

     电量判断模块每隔一定时间查询一次电量,如果电量低于需要充电的阈值则置位充电标志;如果电量充满,则置位退出充电标志。当充电标志已被置位,按照一定角度依次调整充电装置模块角度,通过图像处理判断摄像头中心区域没有充电站标志。如果没有或则标志不在视野中间位置,则继续调整摄像头角度;如果有,则自动规划初步路线,然后移动。在移动过程中,每隔一定时间处理图像,判断标志有无在视野内,图像处理结果用于调整整个模块的路线。如果标志不在视野内或则不在视野中间位置,则转动模块,直至捕捉到标志在视野中间位置,然后根据图像处理调整整个模块的路线。红外线传感器有感应时,说明已到达充点电,推出充电头,然后进行充电。当退出充电标志已被置位,收回充电头,并将整个模块稍微移离充电站。

                                                         第3章 基于STM32单目视觉的目标检测与识别设计

3.1 视觉系统设计

本方案采用的方案是基于STM32硬件平台的单目视觉方法,即在STM32平台上进行图像处理时,视觉方面只采用一个摄像头对周围环境进行图像获取[10]。在本方案中,图像处理的最终目的是指引装置到达充电处,所以不必要采用多目视觉进行定位处理。第一,多目视觉占用过多的硬件资源,增加设备成本;第二,多目视觉的图像处理信息量过大,不适用在本方案的STM32平台上;第三,在本次方案中,图像处理的最终目的是指导装置到充电处进行充电,不必要进行坐标点和距离计算。

本方案采用单目视觉系统。一方面,采用单目视觉相比较多目视觉能减少硬件资源的开销;另外一当面,采用单目视觉相比较而言比较灵活一点,其视角范围一定,没有多目视觉那么广,在搜索到目标时能缩小其方位,将短处化为长处;还有一方面,采用单目视觉,其图像信息量较多目视觉少很多,能在很大程度上提高图像处理的运算速度,从而提高装置的实时性。

综上所诉,本方案在基于STM32平台上采用单目视觉。

 

3.2标志物的设定

 本方案所采用的硬件平台是STM32。因为STM32的最高频率有限,只有72MHz,所以标志物的设定要能在很大程度上减少图像处理的计算量,而且在减少计算量的同时,要保证计算图像处理结果的精准性,不能顾此失彼。在本次方案中,采用的是OV7725型号的摄像头,而且采用RGB565的模式,即每个像素点占用两个字节,一共16位,其中R(红色)占前5位,G(绿色)占中间的6位,B(蓝色)占最后5位。在进行图像处理时,为了减少图像处理的计算量的同时保证图像处理的精准性,本次方案采用绿色作为标志物的颜色。因为在同等情况下,红色和蓝色只有5位灰度级,而绿色有6位灰度级,灰度数量级多了一倍,有效的保证标志物颜色设定的最优方案。

综上所述,本次方案标志物采用的颜色是绿色。

 

3.3图像处理

  3.3.1 基于RGB三颜色的目标识别与分割

本方案在标志物设定上使用了颜色作为判断准则,而且STM32的主频率最高为72MHz,所以在对标志物的处理上采用RGB灰度值阈值分割的算法[7]。首先将图像中间区域的每一个图像像素点进行RGB分量分离,分离出RGB每个分量在本像素点的灰度值[9],然后通过与预先设定的各个分量阈值比较处理,提取出标志物像素点。即如果像素点达到设定阈值,则表明标志物在摄像头视野内,反正则无。下面是本方案中,对每个像素点进行RGB分量提取的方法。

                      R=(DATA[&0XF800)>>11;

                      G=(DATA[&0X07E0)>>5;

                       B=(DATA[&0X001F);

在对每个像素点进行RGB灰度值阈值分割处理后,计算本帧图像在进行RGB阈值分割后标志物的像素点的面积,再通过阈值分割,滤出一定噪声的干扰,于此同时对图像处理结果进行判断,判断标志物在不在本次图像中,如果标志物在本次图像中,判断其面积有没有超过微调的阈值。

在下图3-1中,是标志物识别与分割的流程设计图:

 

 

3.3.2 对标志物处理范围与LCD显示设计

 在本方案中,标志物设定为绿色,即标志物主要为G分量。摄像头模块所采用的像素为320*240,每个像素点RGB565,占用两个字节的空间,所以每张图片的所含的数据量有153600个字节。为了减少图像处理的计算量,且能保证图像处理的精准性,不影响自主导航的前提下,只对图像中心区域的数据进行处理,其他区域的数据视为无效数据,进行忽略,不进行任何处理。

这样一来,不但处理的数据量大量减少,还能利用中间区域对摄像视角进行软件上的限制,提高图像处理的准确性。在LCD上进行显示时,非处理区域显示红色,处理区域显示白色,标志物在处理区域显示其原来的颜色。

 

如果判定标志物在摄像头视野内,且在视野中央区域,即标志物在处理区域。在此基础上进一步判断,如果标志物在处理区域所占比例超过阈值,即标志物面积超过阈值,则说明自动充电装置已经离充电装置很近,进一步缩小图像图例的区域。

如果在缩小图像处理的区域后,发现标志物不在处理区域内,则在装置调整方向的同时也放大图像处理的区域。

下图3-5是图像处理区域和LCD显示的整体流程框架图:

 

 

3.4 本章所遇难点与解决方案

3.4.1 所遇难点

图像处理的信息量相对来说大,单纯图片的像素信息都超过了150KB,而STM32的最高频率只有72MHz。在STM32上进行图像处理,常规的算法和处理思路行不通,处理效果与实时性不能兼得。很多的图像算法受到STM32主频率和存储空间的限制不能在STM32上应用,比如边缘算法。连通过边缘算法去提取标志物形状的方法都行不通。要想在STM32上进行图像处理,并让其处理结果达到预期的导航目的,就要根据STM32的主频率和存储空间设计裁剪出适合的算法和图像处理方法。

3.4.2 解决方案

为解决图像处理方面的难点,本文设计采用了以下的解决方案:

  1. 在UCOS操作系统上将图像处理的任务优先级设为最高。让其在对CPU资源使用上具有一定的优先权。
  2. 图像处理总体处理方向上只对标志物的存在情况进行判断,并进行面积计算,不进行标志物的位置和方位计算。减少计算量。
  3. 在上一步的基础上,不进行图像信息的存储,直接读取摄像头FIFO中的图像像素数据进行处理,逐个像素读取然后进行处理。
  4. 在STM32中不进行图像格式的转换,直接采用对摄像头预先设定的格式,本文采用的是RGB格式。
  5. 限制图像处理的区域,只处理中间指定区域的图像信息数据,对其他区域的数据进行忽略。这样不但能在软件上缩小摄像头捕捉角度,提高自动导航的准确率,还能在很大程度上减少图像处理的计算量。
  6. 标志物面积的计算采用累积像素点的方法。
  7. 为尽量提高图像处理的准确性,在计算量不能太大的前提下,图像处理采用RGB阈值分割的算法,并且最优地选择G分量作为标志物的颜色特征。
  8. 以标志物面积为判断条件,对图像处理结果进行滤波,并作为判断标注物存在与否的标准。

 

 

 

 

 

 

猜你喜欢

转载自blog.csdn.net/Deren_lin/article/details/82215990