OpenCV实现机器人的单目寻线

  OpenCV实现机器人的单目寻线

BY 郭世龙
   
      前一段时间实验室组队参加学校第一届机器人设计大赛。很有希望的前三甲因为场地灯光的原因没拿到,只
获得了一个安慰心里的创意奖。
;
1. 比赛内容、要求 
       以电子电路(含模拟和数字电路)应用设计为主要内容,可以涉及模 -数混合电路、单片机、可编程器件、 EDA软件工具和 PC机(主要用于开发)等方面的应用。 
考察要点:电机控制、传感器的设计或使用、控制算法。 
参赛器材:一辆智能小车;主控 MCU以及外围电路; 可以识别黑色和白色的传感器 其它必要的设备。 
竞赛要求:  
1)机器人从起跑线 A处出发(车体不得超过起跑线),沿引导线运行。在始发点 A处铺设的引导线下埋有 1块宽度为 10cm的薄铁片。机器人运行两圈后,检测到铁片,立即停止。 
2)机器人从起跑线 A处出发,沿引导线运行轨道两圈,最后返回 A处。 返回位置与出发位置误差应最小(出发位置 A为机器人的中心点位置)。 
3)机器人完成上述任务后应立即停止但全程行驶时间不能大于 5分钟。
场地示意图:
  OpenCV实现机器人的单目寻线_第1张图片
 
总体感觉这次大赛中的小车设计没有有什么创意,尤其是探测黑线的传感器基本都是探测可见光传感一字或弧形阵列。于是有了这个用视觉寻线的机器人小车。
2.硬件结构
笔记本电脑1台:Core Duo T2350 1.86GHz , 896M 内存;
普通摄像头80万像素1个;
PIC单片机组成的控板1个;
  OpenCV实现机器人的单目寻线_第2张图片
3.寻线方法
首先我们看看机器人小车“眼”中的黑线
OpenCV实现机器人的单目寻线_第3张图片
OpenCV实现机器人的单目寻线_第4张图片
OpenCV实现机器人的单目寻线_第5张图片
 
以上三张图分别是“直行”,“右转”,“左转”的图像。
 
从图像上我们注意到实际上我们之需处理黑白两种颜色就可以了,所以我们首先将采集到的图像二值化,如何二值化就看你自己的选择了,简单的你可以自己定义一个阈值,复杂的可以使用自适应的阈值方法。阈值之后图像有可能或有些瑕点,可以通过腐蚀、膨胀的的图像处理方法去除。
 
4.指令形成
 
指令的形成有多种方法,其一就是将图像分成左中右三个部分,然后计算黑线的质心,质心在图像的右侧则右转,质心在左侧怎左转,质心在中间则直行。我采用的方法是将图像分为左右两部分,分别统计在图像左侧黑线像素的个数以及在图像右侧个个数,当左侧图像的个数明显多于右侧时,则左转,相反则右转,基本相当时则执行。为了方便处理将二指图像反转处理。
 
阈值反转后的图像如下
OpenCV实现机器人的单目寻线_第6张图片
5.寻线
OpenCV实现机器人的单目寻线_第7张图片
OpenCV实现机器人的单目寻线_第8张图片
OpenCV实现机器人的单目寻线_第9张图片
注:如需要工程文件请留言

你可能感兴趣的:(C/C++,机器人与图像处理)