小组简介

我们组由两名信工和两名电气的同学组成,从左至右依次为潘凌壮、李昕辉、王科宇、冯凌。

 

小组分工

 
姓名
分工
潘凌壮
报告撰写、器材
李昕辉
算法实现、软件调试
王科宇
硬件编程、串口通信
冯凌
网页、硬件调试、器材

 


 

项目介绍

项目目的:
1.学习电子电路硬件的设计,熟悉电路板的识别和焊接。
   2.初步认识单片机及其使用。
   3.学习计算机图像处理的方法。
   4.通过团队间的合作和协调,培养团队合作能力。

项目要求:
利用计算机处理摄像头采集到的小车和迷宫信息,通过蓝牙控制小车的运行,使其按正确路线通过迷宫。

项目完成情况:
根据老师课上提出的要求,我们完成了各个模块的实现,并且基本达到了最高要求。具体完成了:

1.用摄像头采集图像信息,并传输到计算机上。
     2.利用Open CV完成图像信息的处理,根据小车位置的实时信息生成控制信号。
     3.小车和计算机之间的蓝牙传输。
     4.小车完成控制字对应的指令。

自我评价:

科创2B相对其他科创项目来说是很有挑战性的。我们从领到小车开始,一直到完成项目,花费了大量的

时间和精力。这个过程中我们遇到了许多困难,通过独立思考,查找资料,请教同学等方法一一将困难

克服。软件上的每一行代码,小车上各个部位的电路都在同学们的努力下完成,成功之后的喜悦令人心

怀畅快。通过这个项目,我们每个人都收获了很多。

硬件部分介绍

 

硬件整体结构

小车上的控制电路上的单片机接收控制指令,作出应答信号传送给上位机,

并且根据控制指令驱动相应的电机,实现小车前进、后退、左转、右转、停止五种状态。

小车电路板

小车总共有三块电路板,分别是单片机电路板、电源板和电机控制板。电源板负责接受5V流电源,

并向小车其他各电路板提供5V电源。电机控制板负责接受核心板控制信号,放大后控制两个电机。

单片机电路板搭载STC11L02单片机及蓝牙模块,并使用LM1117集成芯片进行电压转换(观察电路图似为如此),负责控制小车。

蓝牙模块
工作在3.3V电压下,为单片机与计算机进行通讯的串口设备。

STC11L02单片机
指令完全兼容8051的单片机,工作在3.3V电压下。有独立的串口通讯波特率生成器,能工作在12倍速下。受核心板控制信号,放大后控制两个电机。

晶振模块

由于STC11L02单片机内部自带的RC振荡器无法产生稳定的频率以实现串口通信9600的波特率,我们采用焊接外部晶振的方法。

我们焊接的是7.9296875MHz的晶振,经过分频等可稳定产生9600的波特率。

 

 

 

软件部分介绍

开发环境      

上位机软件的开发环境是C++ (Platform: Microsoft Visual Studio 2010)与OpenCV 2.3。

迷宫抽象与最优路径生成

程序开始时先通过摄像头捕捉跑道图像,提示调整摄像头,这时应将整个迷宫收入摄像头,

并将小车打开电源放在迷宫入口处(不是迷宫上),按任意键捕获图像。

用鼠标左键以“左上、右上、左下、右下”的顺序点击选择迷宫的的四个角。

 

完成选择后,软件将对迷宫进行透视变换,并记录下透视变换矩阵。该矩阵将一直保留到程序退出,这里用到

OpenCV的库函数getPerspectiveTransform和warpPerspective函数。在后面实时采集小车图像时,

都将先利用这里产生的固定的变换矩阵对图像进行变换,统一坐标系。

对透视变换后的图像进行二值化和膨胀处理,将迷宫墙壁变为白色,其他变为黑色,膨胀处理是为了使迷宫更加连续。

其中用到了cvtColor进行色彩空间变换(我们的迷宫是蓝色的,所以先进行这一步可以提高提取准确性),

用到了inRange函数进行二值化处理,最后用getStructuringElement和dilate函数进行形态学膨胀处理,

使迷宫墙壁更加连续平滑。这些过程都是软件自行完成的,之后迷宫将被简化,抽象为一个30*30的矩阵。

 

按任意键认可抽象的迷宫。软件将自动控制小车前进并在整体进入迷宫后停止,并识别出小车的位置

(识别方法将在下一部分叙述)作为起点,搜索生成最佳路线(一组坐标的组合)。

 

 

小车识别与控制

先利用cvtColor,将获得的图像从RGB空间转换到HSV空间上,再利用inRange(用于提取绿色图像)

和erode(形态学腐蚀,用于减少摄像头噪声的干扰)函数对图像进行处理,得到绿色的图像,即车头。在经过处理的图像上,

借助moments函数计算出车头的几何重心。利用rectangle将计算的重心在图像中画出,可以让操作者确认软件是否正确

小车上的控制电路上的单片机接收控制指令,作出应答信号传送给上位机,并且根据控制指令驱动相应的电机,

实现小车前进、后退、左转、右转、停止五种状态。识别了小车车头的位置。对于车尾(红色,在界面中显示为黄色)做类似的处理。

软件的核心部分是路径比较和小车行驶方向的控制,我们在这部分曾尝试了不同的方案,最终确定的方案是:

1.通过当前小车的位置在最佳路线上搜索,找到小车的下一个目标点

2.用车头坐标减去车尾坐标,得到小车当前姿态矢量,进而求出姿态矢量的幅角

3.用小车的下一个目标点减去车尾(因为主动轮在车尾)坐标,得到小车目标方向矢量,进而求出其幅角

4.用目标方向矢量的幅角减去姿态矢量幅角(见下图),确定小车前进、后退还是左转、右转,发送控制字控制小车改变运动方向

 

当小车走到迷宫终点时,程序控制小车停止,并自动退出。

 

  成果展示

 

?????????????? Adobe Flash Player?

?? Adobe Flash Player

 

 

系统测试情况

 

在最终的检测中,我们达到了1级要求,即软件全自动,设置时近点击个别按钮即可实现,无

需对车、底板做任何操作、图像处理参数自动识别或可以选择某种已固化的模式。硬

件运行流畅,灵巧。系统具有通用性,可安装在其他电脑中。

 

                                                                                                                                                       

 

     成员感受     

李昕辉
虽然早已听说OpenCV的大名,但是应用这个软件包去处理图像,完成一个任务还是第一次。科创IIB的任务很有趣,但我们做起来也十分曲折,

软件是几乎从零开始编写,查文档、写程序初稿、调试、修改、再调试…终于小车顺利地走出了迷宫,我们也获得了应有的回报。科创IIB可以

说是我的图像处理入门课,可以说在探索的过程中学到了不少有用的东西吧~

冯凌

科创2B这门课程让我对计算机图像处理有了初步的了解,对单片机编程有了更深层次的掌握和应用,锻炼了我的团队合作精神以及发现问题、解

决问题的能力。作为第四小组的组长,我主要负责的是保障我们组四个人之间的联系交流和相互合作,包括及时查看网上的通知,领取器材,装

饰小车,制作迷宫等后勤工作,在最初拿到小车时帮助王科宇进行了一些硬件方面的调试。在完成任务的过程中,我感受到最重要的莫过于团结

合作,就像我们编程序的同学在调试的时候,我们其它的同学也应该在场,让他感受到并不是孤军奋战。我觉得科创2B不仅仅锻炼了我对单片机、

通信、图像处理等技术知识,更锻炼了我碰到问题时的心态以及怎样解决问题的策略。比如说我们在调试的后期出现了一个情况——小车轮胎打

滑不能有效地转弯,为了解决这个问题我们提出了很多解决方案,其中包括:把轮胎和转轴固定住;在轮胎外面包一层布或者是粘一层双面胶;

在小车的后半部分加重物;找老师换轮子等等。这样类似的问题还有很多,像迷宫颜色和地板颜色太接近、迷宫宽度太窄等等,随着项目的进行,

新的麻烦总是层出不穷,这也就考验了我们应对问题的能力,通过寻求对这些问题的解决方法,学会的更多的是以一个怎样的心态去面对它们、

如何用有效的办法去解决问题。

 

王科宇:
在本次科创2B的课程中,我主要负责小车的维修(小车刚借来的时候是坏的,修理花了很长时间)、电路的焊接、下位机程序的编写、上位机

串口通信和迷宫算法。刚开始做的时候什么都不会,小车也是坏的,我就从最基础的研究小车的电路做起,一点一点修复小车上的硬件故障,在

此非常感谢张老师,在我修理小车的时候给予细心地指导。小车修复后我花了很长时间研究串口通信,发现单片机内部的RC晶振很不稳定,在串

口通信的过程中无法产生准确的波特率,以至于总是产生误码。于是我采用焊接外部晶振的方法,在单片机电路版上焊接了7.9296875MHz的晶振,

并且在程序中做出相应的设置,终于实现了准确无误的串口通信。在做迷宫算法方面,我参考了很多资料,经过调试终于实现了算出迷宫最短路

径的功能。在此非常感谢同学的技术支持。

潘凌壮:
科创2B的难度太大了,比起2A完全上了一个档次。对于我这样一个编程不好的电气学生来说尤其如此。课程中我主要负责小车的调试,装饰和写报

告的工作。说实话,工作的难点都交给了两位大神,而我只是负责比较轻松的工作。但是从中我也收获了不少。这需要感谢李昕辉同学和王科宇同

学的帮助,在很多我不懂的地方不厌其烦地为我讲解。有人说,一次科创就像攀登是一座山峰,登山前高耸入云的山顶使人望而却步,登山的每一

步都夹杂着汗水,我们失望过,厌烦过,但当我们立足顶峰,一切的困难都化成了风轻云淡的感慨。本次科创我不仅学到了电路结构和软件等知识,

也更加了解了团队合作的意义,再一次对给予我帮助的老师和同学表示感谢。

 

联系方式

winterloop@163.com