OpenCV实现机器人的单目寻线
2008-01-31 13:15
190 查看
OpenCV实现机器人的单目寻线
[align=center]BY 郭世龙[/align]
[align=left] [/align]
[align=left] 前一段时间实验室组队参加学校第一届机器人设计大赛。很有希望的前三甲因为场地灯光的原因没拿到,只[/align]
[align=left]获得了一个安慰心里的创意奖。[/align]
[align=left][/align]
[align=left];[/align]
[align=left][/align]
[align=left][/align]
[align=justify]1. 比赛内容、要求 [/align]
[align=justify] 以电子电路(含模拟和数字电路)应用设计为主要内容,可以涉及模-数混合电路、单片机、可编程器件、EDA软件工具和PC机(主要用于开发)等方面的应用。 [/align]
[align=justify]考察要点:电机控制、传感器的设计或使用、控制算法。 [/align]
[align=justify]参赛器材:一辆智能小车;主控MCU以及外围电路; 可以识别黑色和白色的传感器; 其它必要的设备。 [/align]
[align=justify]竞赛要求: [/align]
[align=justify](1)机器人从起跑线A处出发(车体不得超过起跑线),沿引导线运行。在始发点A处铺设的引导线下埋有1块宽度为10cm的薄铁片。机器人运行两圈后,检测到铁片,立即停止。 [/align]
[align=justify](2)机器人从起跑线A处出发,沿引导线运行轨道两圈,最后返回A处。 返回位置与出发位置误差应最小(出发位置A为机器人的中心点位置)。 [/align]
[align=justify](3)机器人完成上述任务后应立即停止但全程行驶时间不能大于5分钟。[/align]
[align=justify]场地示意图:[/align]
![](http://p.blog.csdn.net/images/p_blog_csdn_net/xylary/changdi.jpg)
[align=left] [/align]
总体感觉这次大赛中的小车设计没有有什么创意,尤其是探测黑线的传感器基本都是探测可见光传感一字或弧形阵列。于是有了这个用视觉寻线的机器人小车。
[align=justify]2.硬件结构[/align]
[align=justify]笔记本电脑1台:Core Duo T2350 1.86GHz , 896M 内存;[/align]
[align=justify]普通摄像头80万像素1个;[/align]
[align=justify]PIC单片机组成的控板1个;[/align]
![](http://p.blog.csdn.net/images/p_blog_csdn_net/xylary/S73.jpg)
3.寻线方法
首先我们看看机器人小车“眼”中的黑线
![](http://p.blog.csdn.net/images/p_blog_csdn_net/xylary/图片%20001.jpg)
![](http://p.blog.csdn.net/images/p_blog_csdn_net/xylary/图片%20004.jpg)
![](http://p.blog.csdn.net/images/p_blog_csdn_net/xylary/图片%20007.jpg)
以上三张图分别是“直行”,“右转”,“左转”的图像。
从图像上我们注意到实际上我们之需处理黑白两种颜色就可以了,所以我们首先将采集到的图像二值化,如何二值化就看你自己的选择了,简单的你可以自己定义一个阈值,复杂的可以使用自适应的阈值方法。阈值之后图像有可能或有些瑕点,可以通过腐蚀、膨胀的的图像处理方法去除。
4.指令形成
指令的形成有多种方法,其一就是将图像分成左中右三个部分,然后计算黑线的质心,质心在图像的右侧则右转,质心在左侧怎左转,质心在中间则直行。我采用的方法是将图像分为左右两部分,分别统计在图像左侧黑线像素的个数以及在图像右侧个个数,当左侧图像的个数明显多于右侧时,则左转,相反则右转,基本相当时则执行。为了方便处理将二指图像反转处理。
阈值反转后的图像如下
![](http://p.blog.csdn.net/images/p_blog_csdn_net/xylary/processImage.bmp)
5.寻线
![](http://p.blog.csdn.net/images/p_blog_csdn_net/xylary/S7300078.JPG)
![](http://p.blog.csdn.net/images/p_blog_csdn_net/xylary/S7300079.JPG)
![](http://p.blog.csdn.net/images/p_blog_csdn_net/xylary/S7300080.JPG)
注:如需要工程文件请留言
[align=center]BY 郭世龙[/align]
[align=left] [/align]
[align=left] 前一段时间实验室组队参加学校第一届机器人设计大赛。很有希望的前三甲因为场地灯光的原因没拿到,只[/align]
[align=left]获得了一个安慰心里的创意奖。[/align]
[align=left][/align]
[align=left];[/align]
[align=left][/align]
[align=left][/align]
[align=justify]1. 比赛内容、要求 [/align]
[align=justify] 以电子电路(含模拟和数字电路)应用设计为主要内容,可以涉及模-数混合电路、单片机、可编程器件、EDA软件工具和PC机(主要用于开发)等方面的应用。 [/align]
[align=justify]考察要点:电机控制、传感器的设计或使用、控制算法。 [/align]
[align=justify]参赛器材:一辆智能小车;主控MCU以及外围电路; 可以识别黑色和白色的传感器; 其它必要的设备。 [/align]
[align=justify]竞赛要求: [/align]
[align=justify](1)机器人从起跑线A处出发(车体不得超过起跑线),沿引导线运行。在始发点A处铺设的引导线下埋有1块宽度为10cm的薄铁片。机器人运行两圈后,检测到铁片,立即停止。 [/align]
[align=justify](2)机器人从起跑线A处出发,沿引导线运行轨道两圈,最后返回A处。 返回位置与出发位置误差应最小(出发位置A为机器人的中心点位置)。 [/align]
[align=justify](3)机器人完成上述任务后应立即停止但全程行驶时间不能大于5分钟。[/align]
[align=justify]场地示意图:[/align]
![](http://p.blog.csdn.net/images/p_blog_csdn_net/xylary/changdi.jpg)
[align=left] [/align]
总体感觉这次大赛中的小车设计没有有什么创意,尤其是探测黑线的传感器基本都是探测可见光传感一字或弧形阵列。于是有了这个用视觉寻线的机器人小车。
[align=justify]2.硬件结构[/align]
[align=justify]笔记本电脑1台:Core Duo T2350 1.86GHz , 896M 内存;[/align]
[align=justify]普通摄像头80万像素1个;[/align]
[align=justify]PIC单片机组成的控板1个;[/align]
![](http://p.blog.csdn.net/images/p_blog_csdn_net/xylary/S73.jpg)
3.寻线方法
首先我们看看机器人小车“眼”中的黑线
![](http://p.blog.csdn.net/images/p_blog_csdn_net/xylary/图片%20001.jpg)
![](http://p.blog.csdn.net/images/p_blog_csdn_net/xylary/图片%20004.jpg)
![](http://p.blog.csdn.net/images/p_blog_csdn_net/xylary/图片%20007.jpg)
以上三张图分别是“直行”,“右转”,“左转”的图像。
从图像上我们注意到实际上我们之需处理黑白两种颜色就可以了,所以我们首先将采集到的图像二值化,如何二值化就看你自己的选择了,简单的你可以自己定义一个阈值,复杂的可以使用自适应的阈值方法。阈值之后图像有可能或有些瑕点,可以通过腐蚀、膨胀的的图像处理方法去除。
4.指令形成
指令的形成有多种方法,其一就是将图像分成左中右三个部分,然后计算黑线的质心,质心在图像的右侧则右转,质心在左侧怎左转,质心在中间则直行。我采用的方法是将图像分为左右两部分,分别统计在图像左侧黑线像素的个数以及在图像右侧个个数,当左侧图像的个数明显多于右侧时,则左转,相反则右转,基本相当时则执行。为了方便处理将二指图像反转处理。
阈值反转后的图像如下
![](http://p.blog.csdn.net/images/p_blog_csdn_net/xylary/processImage.bmp)
5.寻线
注:如需要工程文件请留言
相关文章推荐
- OpenCV学习——物体跟踪的粒子滤波算法实现之计算选定区域直方图
- [机器学习]基于OpenCV实现最简单的数字识别
- [机器学习]基于OpenCV实现最简单的数字识别
- 【OpenCV】功能说明:Samples里的Python实现
- 基础学习笔记之opencv(6):实现将图片生成视频
- 双目定标及双目校正-opencv实现
- Opencv 向量的一阶差分函数封装实现 功能等价于Matlab的diff函数 附:显示CvMat的函数封装
- OpenCV:对XML和YAML文件实现I/O操作
- 双摄像头测距的OpenCV实现
- opencv3 实现模版匹配-鼠标事件
- Opencv实现图像的灰度处理,二值化,阀值选择
- OpenCV 实现的八种机器学习算法
- opencv开发笔记(八):利用感兴趣区域ROI实现图像叠加
- opencv开发笔记(九):利用addWeighted实现感兴趣区域图像混合
- Opencv之Kmeans算法实现
- OpenGL与OpenCV实现增强现实
- 特征提取方法(一):HOG原理及OpenCV实现
- 机器人项目部分数据本地化——工厂模式+策略模式实现
- OpenCV3计算机视觉Python语言实现(二):处理文件、摄像头和图形用户界面
- OpenCV 实践程序17——用C++实现ip camera的视频播放