科技创新3-M10组设计报告

计算机控制小车走迷宫


Introduction

Downloads


 

项目和小组成员简介

    这次科技创新3的主要内容是计算机控制小车走迷宫,前8周主要是学习图像处理的一些基础知识,期间开了三次讲座,分别关于图像处理、openCV和labview的应用。从第9周开始,要求各组自己制作迷宫,在完成图像处理之后通过中期考核能够领取小车,再利用软硬件的设备使得小车能够在计算机的指令下顺利走出迷宫。其主要的任务包括:图像预处理、硬件测试、迷宫算法、串口调试、小车单片机程序设计以及最终报告撰写等等。

    小组成员简介:

    组长

     鲁捷:负责图象处理部分、报告撰写。

    组员

     胡鹏:负责硬件部分的检测和调试、软件部分的调试。

     许良备:负责图象处理、迷宫算法、小车串口以及控制程序的编写和调试。

     刘畅:负责硬件部分的检测和调试。


项目完成情况

    我们把这个项目主要分成三个部分,分别是图像处理部分、迷宫处理部分和运动检测控制。以下是这三个部分的完成情况:

    图像处理部分

  1. 正确读取摄像头视频;

  2. 对视频截取下来的图像进行透视变换;

  3. 实现对图像的直方图均匀化,形态学滤波,二值化。

    迷宫处理部分

  1. 能从得到的二值化图像提取正确的迷宫;

  2. 根据模拟出来的迷宫找到正确的最短路径,并生成控制部分所需要的迷宫信息。

    运动检测控制

  1. pc机能与小车上的单片机通信,指令正确;

  2. 能检测到小车的位置以及方向;

  3. 根据迷宫信息以及小车位置方向,生成正确的指令,能控制向前,以及转弯,并最后走出迷宫。

    以下是我们小组的小车和迷宫照片:

小车和迷宫照片


项目整体结构说明

    这个项目为实现小车在计算机控制下走出迷宫的功能,首先通过摄像头采集到的图片,经过计算机图像处理来判断迷宫的信息以及小车与迷宫的相对位置,然后在计算机端计算最佳路径,通过有线的USB线指令控制小车动作走出迷宫。

       

“计算机控制小车走迷宫”示意图

    使用的硬件材料:89S52单片机控制的小车、RS232有线收发模块、USBRS232串口线、计算机、摄像头。

    要实现这样的功能,要分别实现以下的三个部分:

  1. 图像处理:摄像头采集图像,在经过计算机图像处理之后,发出控制指令。其中具体包括图像采集、图像预处理,小车跟踪,摄像机标定和最佳路径的生成。
  2. 串行通信:实现计算机与小车上单片机的通信(有线通信)。由摄像头(USB接口)实时捕捉迷宫内小车的位置情况,通过USB线缆传送至电脑里编写的上位机软件,软件通过图像识别找出当前小车的位置信息及迷宫的信息,经过计算,作出控制决策,生成控制信号,并经通讯模块发送至小车。
  3. 单片机部分:具体包括闭环控制算法,小车电机控制等。

硬件部分介绍

    硬件部分的介绍我分成两个部分,一是芯片功能介绍;二是我们实际在硬件检测调试过程中的情况说明。

    芯片功能介绍

    这次项目主要用到两块芯片,一块是CMOS8位微控制器AT89S52

AT89S52 PDIP

    它的主要功能有:

    AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash 存储器。AT89S52使用Atmel公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,AT89S52拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。AT89S52具有以下标准功能: 8k字节Flash,256字节RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。

    第二块芯片是L298N, 它的主要功能是控制两个电机。L298N是专用驱动集成电路,属于H桥集成电路,与L293D的差别是其输出电流增大,功率增强。其输出电流为2A,最高电流4A,最高工作电压50V,可以驱动感性负载,如大功率直流电机,步进电机,电磁阀等,特别是其输入端可以与单片机直接相联,从而很方便地受单片机控制。当驱动直流电机时,可以直接控制步进电机,并可以实现电机正转与反转,实现此功能只需改变输入端的逻辑电平。为了避免电机对单片机的干扰,本模块加入光耦,进行光电隔离,从而使系统能稳定可靠的工作。

L298N Pin Connections

    硬件检测调试心得

    首先,领到小车后,我们用老师提供的"selftest"小车自检程序测试我们的小车质量,我们用是9V电池供电。小车能够正常行走,但非常不稳定,马达时转时不转。通过查询网上资料,我们发现小车需要8V以上电压才能正常行走,于是我们开始用电压表检测各种电压参数,发现电池提供的电压只有6V了,于是我们改用直流稳压电源,才顺利完成小车的质检。

    完成小车的质检后,我们按照网上提供资料焊接了我们的串口通讯线,想检测我们小车能否正常通讯。我们通过手动发送控制命令对小车进行控制。刚开始的时候,小车能按照我们发送命令,正常的向前、后、左、右运行。为了方便走迷宫,我们想到对串口线进行延长,但随后我们向小车发送命令,小车毫无反应。我们只好去掉延长的部分,但发现仍然无法对小车控制。我们查阅资料了解到,小车接受到的控制命令为一正向电压脉冲,于是我们想到用示波器检测串口线的电压。我们发现,当我们向小车发送命令时,串口电压并未发生任何变化。我们判断有两种可能原因:一、发送命令的程序有问题;二、串口线有问题。我们仔细检查了我们的程序,在确定我们的控制程序无问题后,我们初步判断是串口线有问题。我们借来其他小组的串口线焊接到我们得小车上,发现我们能正常对小车进行控制。我们迅速记下各种参数,在连接电源的情况下,串口连接小车端电压为5V,不连接电源,只将串口线连接到电脑上,串口在小车端电压为2.5V左右。这两个参数就成了我们调试串口的主要参照。当我们重新连上我们自己的串口线,发现第二个参数只有0.3V,由此我们确定我们的串口线坏了。调试串口通讯部分前前后后花了我们一周时间,成了我们整个项目过程中最大的障碍。

    当串口问题解决后,我们开始用我们组的程序对小车进行控制,走迷宫。在计算机控制小车走迷宫的过程中,我们发现小车在转弯过程中容易打滑,我们通过对小车增加重量,增大摩擦,使小车能够顺利转弯,随后我们的小车便能够顺利地走完迷宫。在检测前的一次调试过程中,我们发现我们的小车再次无法接受控制命令,我们再次检测电压,发现在无外接电压源的情况下,串口小车端又只有0.3V左右,此次我们果断的找老师换通讯线,焊接上新线后,于是我们顺利地完成了检测。


软件部分介绍

我们使用的工具:VC++、openCV

  1. 摄像头获取原始图像;
  2. 透视变换得到迷宫俯视图;
  3. 分析迷宫结构;
  4. 指定入口出口,计算最短路径;
  5. 摄像头实时捕捉小车位置,与计算路径相比较,并通过串口自动向小车发送调整指令;
  6. 小车最终到达出口。

软件主要流程示意图

    我组将“计算机控制小车走迷宫”整个过程分为三大部分:图像处理、迷宫处理和运动检测部分。因为摄像头拍摄到的图像往往是倾斜的,第一部分首先将捕捉到的迷宫图像透视变换,然后对图像的直方图均匀化,形态学滤波,二值化得到01代码;第二部分从第一部分的迷宫代码中提取正确的迷宫,并计算出可行的最短路径,生成控制部分所需要的迷宫信息;第三部分首先通过摄像头实时捕捉小车位置和方向,并使PC机与小车的单片机实时通信,发出正确的指令,控制小车向前、转弯等调整使其沿最佳路径行走,最终走出迷宫。

PC端运行照片

  1. 使用vc6.0以上版本打开工程文件,vc6.0装有opencv,并设置好环境变量,具体可到http://www.opencv.org.cn查询;

  2. Pc机上已安装USB转串口程序,课程网站上有;

  3. 安装摄像头;

  4. 一切硬件设备都已经准备完成;小车能转弯,小车有有区别周围的颜色;

  5. 打开工程后,程序处于等待状态,根据屏幕提示进行相应的操作。A.分别按1,2,3,4键在原图像“Back_origin”选取透视变换用的四个相应源点,然后再次按1,2,3,4键在目标“Maze”显示透视变换后的目标图像,按0退出透视变换。注意源点,目标点的摄取可重复进行。B.按enter进入背景模式,得到截取的背景,再次按enter执行二值化前的图像预处理,出现滑条“thresh”时可以设置阈值进行图像二值化处理,按‘q’退出;然后就可以计算相应的迷宫以及路径,并在窗口显示出来。C.待小车放上迷宫,按g可进入运动检测模式,按d在“Maze”窗口进行camshift检测圈定,此时可即时调节“Backproject”窗口中的滑条,直至椭圆刚好框中小车。此时按q即可开始发送指令,小车可自动走迷宫。

    图像处理

    RGB模型是最常用的一种颜色空间,自然界中任何颜色均有R、G、B三种基色组成,构成三维的向量空间,任一颜色的R、G、B三个分量均在[0,1]中取值。将拍到的图象直接数据化,其中高8位为红,其次是绿,最后为蓝。数据化后筛选出高8位为红,经过一个筛选的功能把大于200的筛选出来,这样迷宫的图象就能处理出来。再用另一比较器把小于150的筛选出来,再把拍摄与处理模块连在一起,这样就能跟踪目标小车。经实际测试发现光 强的变化容易导致R、G、B三个分量值均发生变化,所以测试的时候需要用板子遮一下光。

    串口通信

    计算机与小车之间的通信为有线的串行通信,实现PC与单片机的通信。由USB接口的摄像头实时捕捉迷宫内小车的位置情况,通过USB线缆传送至电脑里编写的上位机软件,软件通过图像识别找出当前小车的位置信息及迷宫的信息,经过计算,作出控制决策,生成控制信号,并经通讯模块发送至小车。

 
    单片机部分

    具体包括闭环控制算法,小车电机控制。实现对小车电机的控制,可通过改变参数控制小车表现。经实际测试发现小车的电机用电池难以驱动,最好使用直流稳压电源进行驱动。


系统演示录象

系统演示录象.avi


系统不足以及可改进部分

  1. 图像处理:我们组做的走迷宫的算法比较依赖于图像处理的结果。但是在光线对迷宫影响较大,处理结果可能无法有效分辨迷宫的路径,这样对后续的路径计算也会产生影响。此外,在实时通信时,由于光线影响对于迷宫和小车也可能会分辨得很模糊,尤其在路口拐弯处会有较大误差;

  2. 小车行驶检测的时候小车会有些打滑,我们已经加了橡皮筋等加以防滑的处理,但是自己做的迷宫还是太滑了,并且中途会被电源线绊到;

  3. 迷宫情况我们设计的迷宫还是过于简单,在最终测试时仅仅是成功过了一个拐弯而已,基于测试当天迷宫比较紧张,我们未能挑一个比较有难度的迷宫来演示。


自我评价以及收获建议

    实验之初,我们什么也不懂,实验之后我们收获很多,有新软件的应用方法,也有对创新活动的一种新的认知。这是一个完全自主的具有创新性的实践活动,他锻炼了我们的动手动脑能力,更是对我们今后进行创新事业的一种磨练。开始,我们接到这个科创任务的时候,显得很迷茫,不知道该从哪下手,但是通过老师对一些新软件的应用介绍,例如OpenCV、串口调试等,我们逐渐有了自己的创作思路,循着自己的思路去设计程序,到网上查询相关软件的应用方法,然后再一步一步的调试、排除错误、利用新的方法解决一些未想到的问题(如摄像的视角问题利用透视变换解决)等等,最终得出我们满意的结果。期间由于硬件问题(小车与电脑接线USB口有问题)耽误不少时间,这个问题应该我们早发现早清除。不管怎样我们达到了要求,并且学会了如何去创新,如何综合思考问题,如何利用合作完成为止的问题。最后要感谢老师对我们的指导与帮助,以及提供一个让我们锻炼创新能力的机会。


致谢

    在这次科技创新三的过程中,我们从刚开始茫然到后来渐渐有思路,再到后来遇到并解决许多困难,整个过程得到了很多人的帮助。在此,我们感谢张士文老师、助教老师的认真指导和周围很多同学的热情帮助,同时也感谢往年修读过这门课程的同学,他们报告中的很多相关内容也让我们受益良多,才能让我们顺利完成这门课程。这门课程的确很难,但是从中的收获让我们难以忘怀!


参考资料

  1. OpenCV_ObjectDetection_HowTo.Pdf Florian Adolf著;

  2. OpenCV-slides Introduction-gucas OpenCV_tutorial 电子资料;

  3. 《OpenCV教程——基础篇》 于仕祺著;

  4. ICV.sch OpenCV的帮助文档;

  5. 往届的报告以及程序;

  6. 张士文老师以及金博博士的课件。