DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1492|回复: 0
打印 上一主题 下一主题

[待整理] 基于PIC32实现的智能球类回收车,软硬件协同

[复制链接]
跳转到指定楼层
楼主
发表于 2015-4-27 23:18:37 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
                前言

        软件流程:
          我们的项目涉及到的软件模块主要由三个部分组成:
           
          一、摄像头定位模块:摄像头结合I2C连接到单片机上。主要进行图像收集,计算定位判断,为下层小车控制提供运行控制字。
           
          二、小车控制模块:根据上层提供的控制字,控制步进电机进行左转,右转,前进的运动。这里考虑到小车是在运行过程中,通过摄像头收集到的数据进行运动判断,因此小车运行的时间用定时中断严格控制。每次小车转弯精度为3度,前进距离为12cm。
           
          三、机械臂控制模块:机械臂的控制模块采用中断控制,当小车的u型槽前部判断小球已进入槽后,进入机械臂中断,控制机械臂向下运动,套入小球后,再让机械臂回到原处。接下来回到主程序继续执行下部操作。
           
          下面,通过流程图具体介绍软件的运行流程:
          首先是主函数:主函数是一个while的无限循环:
          接下来对上面的各个部分进行说明:
           
          (1)
       

         

          摄像头拍照模块采用查询方式,摄像头拍下照片,等待所有数据都传给单片机后,标志位flagd置1。这里摄像头与单片机是运用I2C进行连接。流程图如下:
           
       

         

         

          (2)
       

         

          对摄像头采集进来的图片进行轮廓分析,判断小球的位置。未看到小球时,小车原地旋转,然后再次进行拍摄。当看到多个小球时,根据远近关系照成的平面上大小的不同,将最大的一个锁定为目标。然后根据小球的位置,向小车的控制模块发送控制字,流程图:
           
       

         

          (3)
       

         

          根据上一步送下来的控制字control对小车的运动进行控制,小车的驱动模块接单片机的不同IO口,对IO给出不同的输出分别控制小车向左旋转,向右旋转以及前进。旋转以及前进的精度通过定时中断精确控制;流程图如下:
           
       

         

          (4)
       

         

          有两片塑料片做成的类似人体静脉瓣的装置,当小球进入U型槽后,由于该结构使得小球不会再从槽中脱离出去,并且再槽壁装有传感器,一旦小球入槽,则进入下一步的中断子程序,从而进入捡球状态。流程图如下:
           
       

         

          (5)
       

         

          当检测到小球入槽后,就进入该中断。中断首先将IO清零,防止小车仍然在运动。然后控制机械臂的电机转动,实现升降。机械臂的筒口也是采用塑料片做成的类似人体静脉瓣的装置,只用筒罩住球就能保证球不再掉出来。流程图如下所示:
           
       

        工作原理
           
  •                 视频处理与自动目标识别模块工作原理
          1.1原理概述
          摄像头拍照模块采用查询方式,摄像头拍下照片,等待所有数据都传给单片机后,标志位flagd置1。这里摄像头与单片机是运用I2C进行连接。对摄像头采集进来的图片进行轮廓分析,判断小球的位置。未看到小球时,小车原地旋转,然后再次进行拍摄。当看到多个小球时,根据远近关系照成的平面上大小的不同,将最大的一个锁定为目标。然后根据小球的位置,向小车的控制模块发送控制字。
           
          1.2 设计细节
          本设计采用一种基于球色的球类检测方案。
           
          球类检测是指: 在输入图像中确定是否有球体存在,如果有则确定其位置、大小的过程。球体检测问题的提出基于人脸识别,人脸识别的第一步就是要从图像中检测并定位出人脸的位置,随着模式识别技术的发展以及自动化程度的提高, 人脸检测开始作为一个独立的领域进行研究。
           
          球体检测方法主要有基于几何特征的方法:基于球色模型的方法和基于统计理论的方法。本文将主要介绍一种基于球色的球体检测算法!
           
          1.2.1  色彩空间的选择
          为了对球色进行分割, 把球体区域从背景中分离出来, 需要使用适合不同光照条件下的可靠的球色模型!研究显示:尽管不同种类、不同材质的球色看上去不同,但这种不同主要集中在亮度上, 在去除亮度的色彩空间里,不同球体的颜色分布具有聚类性。本文中的球色模型就是在这样的色彩空间里建立的。通常所用的表现彩色图像的方法是R G B , 但是在这里, R G B 空间不再适合用来作为球色模型的色度空间,因为在R G B 图中, (r,g,b) 这三个分量不但代表着图像的色彩分布, 而月还表示着图像的亮度(图像中每个像素的亮度等于其R G B 三个分量之和),而亮度是一个非常不稳定的参量, 它很容易受到周围环境的影响而导致分离球色区域的失败。因此采用把亮度分离的色度空间能够减小亮度的影响。
           
          Y Cb Cr 色彩空间中的球色分布聚集在色度空间中一个较小的区域中, 它具有以下几个优点:(1)具有与人类视觉感知过程相类似的构成原理;(2) Y Cb Cr色彩空间格式广泛地应用在电视显示等领域中, 也是许多视频编码, 如MPEG、JPEG 等标准中普遍采用的颜色表示格式;(3)Y Cb Cr色彩空间格式月有与HSI等其它一些色彩空间格式相类似的将色彩中的亮度分量分离出来的优点。
           
          因此,本文最终选择了Y Cb Cr色彩空间进行球色建模。
           
          1.2.2  球色的相似度计算
          依据球体颜色在Y Cb Cr空间的概率分布特性,建立一个高斯球色模型,其概率密度函数用式(1)表示:
            (1)
          其中C 为协方差矩阵
         
           
          (2)在前面建立的球色模型的基础上, 通过球色相似度计算公式:
         
           
          (3)
          可以计算单个像素的球色相似度值, 并且很容易得到整幅图像的最大球色相似度值。每
          一点像素的球色相似度值除以最大球色相似度值,作为i亥缘素点的灰度值,从而得到球色相似度。
           
          由于我们传输的图片属于RGB模式,因此需要进行颜色空间变化。
        Y = 0.257*R + 0.504*G +0.098*B + 16;

        Cr = 0.439*R - 0.368*G - 0.071*B + 128;

          Cb = -0.148*R -0.291*G + 0.439*B +128;
        1.2.3  图像的二值化分割
          二值图像是指图像中的每个像素只取两个离散的值之一(如0, l) ,用数学公式表示为:
         
           
          (4)
          上式中, f 认刃表示一幅数字图像, x,y是该图像中某个像素点的坐标值,0 和1 表示该像素的像素取值。0 和1是个抽象的表示,并非实际像素值,它可以代表不同的颜色,在这里0代表黑色, 1代表白色, 所得到的图就是一个黑白二值图。将图二值化是因为,二值图像中的许多运算是逻辑运算而不是算术运算, 所需的处理时间很短,计算速度快,而且算法也容易理解和实现。
           
          二值化图像可以通过选取适当的阀值获得。选择合适的阀值是图像二值化分割效果好坏的关键。通过对球体灰度图像进行分析可以发现,真正的球色像素相比于非球色像素往往拥有更高的亮度,所以可以设定一个阀值,当该点像素的近似度高于这个阀值则认为该点为球色像素并置1,反之若低于该阀值则置0。
           
          1.2.4  候选球体的确定
          经过平滑滤波处理后, 二值化图中的部分噪声可以被去除,但由于背景较复杂,受影响的因素很多, 图中仍然会存在许多面积较小的非球体区域。为了减少算法的工二作量,需要进一步排除这些不含球体的区域。因此对二值分割图中的这些区域进行比例结构的分析,过滤掉不可能的球体区域,以确定最终的候选球体区域。
           
          本文将用以下两个方法对候选球体区域进行筛选:
          (1)区域的面积:去掉面积较小区域,即删除面积小于30 以下的区域, 其面积为该区域中的白色像素点的个数。
           
          (2) 区域的长宽比:一般来说球体(以网球为例)的直径介于6.35cm至6.67cm之间,考虑到其他球体直径可能大于网球, 故选取的范围的上限可以适当放大,经过多次实验发现, 当把球体的选取范围定在直径为8cm的时候,真正的球体区域一般都能包含在内,不会被删除。这个条件考虑到了真正包含球体区域的范围大小, 排除了一些类似球类颜色但直径不合要求的区域。
           
          1.2.5  总结
          综上所述, 基于球色的球体检测方法能较好的分割出可能的球体区域, 把接近于球体颜色的区域从图像中分离出来, 使得目标区域能较好地提取。由于此算法首先筛选掉了一部分背景,减小了球体搜索范围,故可以大幅度提高检测的速度。对分割出来的可能球色区域几何直径的筛选, 进一步排除了较为明显的干扰区域, 在一定程度上减少了后续模板匹配过程的工作量。
           
          2、小车驱动工作模块工作原理
          该模块充分应用了pic32单片机存储容量大, 运算速度快,数据传输迅速的特点,成功将Y Cb Cr色彩空间进行球色建模的算法移植到单片机上实现,大大缩减了成本。
           
          单片机首先通过串口(38400Baud)接受摄像头拍摄获得的R G B图像(70*70),然后将每个像素点的R,G,B转成Y,Cr,Cb。接下来执行上述所提“根据Y ,Cb,Cr色彩空间进行球色建模”的算法(算法具体实现见附录代码,已做详细注释),实现对小球的空间定位,判断小球的重心与摄像头中心的位置关系。再根据得到的位置关系,对单片机的IOA口赋值(0:停止,1:左转,2:右转,3:直行),从而驱动小车的电机实现小车的运作。
           
          这里关于精度的判断至关重要。我们经过反复验证。最终选定:对于左转,右转延时10个毫秒,从而实现X轴2个刻度的改变。对于前进延时20个毫秒,从而实现Y轴3个刻度的变化。之所以选择上面的转弯以及前进步长,是考虑到计算得到的重心与摄像头中心可能存在的误差,经过我们的试验证明,上述误差是不会影响最终结果的。
           
          3、机械臂捡球模块工作原理
          有两片塑料片做成的类似人体静脉瓣的装置,当小球进入U型槽后,由于该结构使得小球不会再从槽中脱离出去,并且再槽壁装有传感器,一旦小球入槽,则进入下一步的中断子程序,从而进入捡球状态。
           
          当检测到小球入槽后,就进入该中断。中断首先将IO清零,防止小车仍然在运动。然后控制机械臂的电机转动,实现升降。机械臂的筒口也是采用塑料片做成的类似人体静脉瓣的装置,只用筒罩住球就能保证球不再掉出来。
           
          4、应用前景分析
          本智能球类回收车是未来体育运动中电子系统的重要组成部分的基本模型。本系统将实现在复杂球场环境中自动寻找、识别、跟踪符合既定要求的目标并回收的功能。
           
          如果将来投入实地应用,可采用更加专用的控制系统及硬件系统,即可实现更高效率的工作,不仅可以捡拾网球等小球还可以捡拾篮球、排球等相对较大的球体以及甚至其他形状的运动器材,使参加运动的人能全身心沉浸到运动带来的欢乐中而不用管捡球等一些繁琐且费时费力的工作。运动员可以进行更加高效有序的训练,取得更好的成绩,体现本系统的设计初衷,彰显本系统的社会、经济效益。
           
          同时,还可以扩展到人脸识别判断的领域。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-12-25 21:44 , 耗时 0.089289 秒, 22 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表