14
完完完完 2009 完 1 完 16 完 完完完完[3]完完完完 完完 完完 完完 完完 完完完完 张张张 F0503030 505030981 3 张张张张 OpenCV 张张张张; 张张张张张张张张张; 张张张张 张张张张张/张张张张/张张张张. 张张 Word 张张张. 13818865251 张张张 F0503020 505030955 4 张张张张 OpenCV 张张张张; 张张张张张张张张张; 张张张 张; 张张张张张 PC 张张张; 张张张张张张张张张. 13761131868 张张 F0503020 505030955 6 张张张张 OpenCV 张张张张; 张张张张张张张张张; 张张 PC 张张张张; 张张张张张张/张张张张张张张; 张张张张张张张. 13564530993 张张 F0503029 505030979 9 张张张张 OpenCV 张张张张; 张张张张张张张张张; 张张/张 张/张张张张张张; 张张张张张张张张张张张张张张张; 张张 Word 张张张张张. 13601850574 完完完完 完完完完完完完完完完 完完完完 M28 完完完完完完 完完完(完完) 完完完完 完完完 完完 、、、 完完完完完完 完完完完完完完完完完完

ice.sjtu.edu.cnice.sjtu.edu.cn/kc/2009/M28/download/M28Report.doc  · Web view有一台小车和一个PC,小车以ATMEL公司的AT89S52芯片为核心,计算机用VC++与OpenCV处理采集到的图片判断小车及迷宫的位置信息,计算并选择路线,通过接口指令控制小车动作,使小车沿所计算出的路径走到迷宫终点。

  • Upload
    others

  • View
    34

  • Download
    0

Embed Size (px)

Citation preview

完成时间:2009年1月16日

科技创新[3]设计报告

姓名

班级

学号

具体负责的工作

联系方式

张明禄

F0503030

5050309813

学习了解OpenCV程序设计; 讨论小车走迷宫算法; 编写小车单片机程序/测试样例/控制接口. 编写Word版报告.

13818865251

朱文毅

F0503020

5050309554

学习了解OpenCV程序设计; 讨论小车走迷宫算法; 搭建迷宫; 测试并改进PC端程序; 参与网页版报告制作.

13761131868

许帅

F0503020

5050309556

学习了解OpenCV程序设计; 讨论小车走迷宫算法; 编写PC端主程序; 实现图像采集/迷宫寻路等算法; 制作网页版报告.

13564530993

韦鹏

F0503029

5050309799

学习了解OpenCV程序设计; 讨论小车走迷宫算法; 装配/调试/修正小车硬件; 测试小车实际寻路性能并加以改进; 参与Word版报告编写.

13601850574

摘要:

本项目设计实现小车在计算机控制下走出迷宫的功能。有一台小车和一个PC,小车以ATMEL公司的AT89S52芯片为核心,计算机用VC++与OpenCV处理采集到的图片判断小车及迷宫的位置信息,计算并选择路线,通过接口指令控制小车动作,使小车沿所计算出的路径走到迷宫终点。

关键词:

OpenCV,迷宫寻径算法,串口通信。

目录

11. 整体介绍

2. 硬件部分3

2.1 硬件元件3

2.2 调试问题6

3. 软件部分7

3.1 图像处理7

3.1.1 原始图像7

3.1.2 透视变换7

3.1.3 最短路径算法8

3.1.4 小车定位8

3.2 小车实时调整9

4. 串口通讯10

4.1 硬件10

4.2 软件10

5. 项目总结与心得11

1. 整体介绍

系统功能实现流程概述:

1. 由摄像头(USB接口)实时捕捉迷宫内小车的位置情况,通过USB线缆传送至电脑里编写的上位机软件。

2. 软件通过图像识别找出当前小车的位置信息及迷宫的信息,经过计算,作出控制决策,生成控制信号。

3. 控制信号经通讯模块发送至小车。

4. 小车上的控制电路对控制信号作出相应反应,驱动电机,进行正确的运动。

2. 硬件部分2.1 硬件元件

这次科技创新三用到两块主要的芯片。

1、CMOS8位微控制器

其主要功能是:

· 兼容MCS-51指令系统

· 8k可反复擦写(>1000次)ISP FLASH ROM

· 1000次擦写周期

· 32个双向I/O口

· 4.5-5.5V工作电压

· 3个16位可编程定时/计数器

· 时钟频率0-33MHz

· 全双工UART串行中断口

· 128x8bit内部RAM

· 低功耗空闲和省电模式

· 中断唤醒省电模式

· 3级加密位

· 看门狗(WDT)电路

· 软件设置空闲和省电功能

· 灵活的ISP字节和分页编程

· 双数据寄存器指针

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内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。

AT89S52的PDIP图如下:

2、L298N

这块芯片用于控制两个电机。

管脚图如下:

每个管脚正常工作时的电参数如下:

2.2 调试问题

此次实验由于时间关系,没有完成调试,因此在这里仅稍微叙述一些考虑到的调试问题。

在小车硬件控制设计中,关键问题是确定小车进退转弯的速度参数。对此比分的调试,我们预想的是,先将小车进退、转弯的速度参数调至最大值,然后根据小车实际运行情况对小车行进速度进行调整。另外,为了保证小车行进正常,我设定了不同的前进速度,即全速前进和慢速前进,且慢速前进是为了能够平稳调整到转弯速度,这样可以降低由于小车惯性而造成的卡住问题。执行这些行进速度的条件可以在计算机上的控制程序中加以限制,以保证小车连续行进。

3. 软件部分

环境:

Visual C++、OpenCV

主要流程:

1.摄像头获取原始图像。

2.透视变换得到迷宫俯视图。

3.分析迷宫结构。

4.指定入口出口,计算最短路径。

(以上内容本次实验已经达到,但是下面的小车实际行进调试没有完成)

5.摄像头实时捕捉小车位置,按照计算路径自动向小车发送行进指令。

6.小车最终到达出口。

3.1 图像处理

3.1.1 原始图像

利用OpenCV的cvQueryFrame函数从摄像头获取原始图像,虽然效率不高,但考虑到小车控制中各个环节的精度与效率,此处可以接受。

3.1.2 透视变换

迷宫路线计算和小车位置判断都基于透视变换后的俯视图,OpenCV提供了透视变换的函数WarpPerspective,该函数按照指定变换矩阵进行变换,而变换矩阵由GetPerspectiveTransform从变换前后两个图像中的4个对应点计算出来。

3.1.3 最短路径算法

最短路径的计算使用floodfill算法,是BFS的一种。这种算法顾名思义,即假设水流匀速流动,自由分叉汇合,并且会受到墙壁阻挡。假设在迷宫起点打开水龙头,最先到达出口的水流过的路径一定是最短的。具体的实现为:对迷宫方格位置添加标号,以迷宫入口为起点,以迷宫出口为终点,进行广度优先搜索,第一次搜索到出口时,搜索树的层数是最小的。此外,在搜索中尽量保持搜索方向一致性。这样就可以在多条最短路径中选择出转向次数最少的一条,易于小车行进控制。

离线调试情况如图所示

3.1.4 小车定位

由于小车实际行进的调试在这次实验中没有进行,因此,在这里仅简要描述预期的方法。

为了排除迷宫壁与迷宫地面的干扰,小车需要用单色来表示,即用单色纸包起来,这样就可以通过OpenCV的CalcBackProject函数得到小车在实时图像中的反向投影,小车的图像在迷宫中出现概率最大的地方就是小车当前在迷宫中的位置,小车定位最终确定小车在8*8的迷宫中某一格,从而与路径信息比对。

3.2 小车实时调整

由于小车实际行进的调试在这次实验中没有进行,因此,在这里同样简要描述预期的方法。

小车基本行进方式为大步向前、小步向前、小步后退、左转、右转以及停止。在各状态下,两个电机的速度事先设置好,实际过程中只需调用预设值即可。

由于走迷宫的路径已计算出,且小车的实时位置由摄像头已捕捉确定,所以程序将控制小车向目的位置行进。

具体控制情况只基于目前位置与下一步位置之间的方向:

当小车下一步方向不变时,大步前进。

当小车下一步方向改变时,调慢前进速度,判断并发送左转/右转指令。

当小车当前位置与预定位置有较大出入,利用小步前进与小步后退进行微调。

利用此算法,一直控制小车行进直到到达出口为止。

4. 串口通讯

小车和电脑之间通过串口通信,利用有线连接进行通信。

4.1 硬件

首先要在计算机上使用一个虚拟串口驱动程序将USB端口虚拟出一个串口,再用线联到小车对应端口就完成了。

4.2 软件

串口程序有许多种写法,在C里也有对应的库函数,但由于我们要发送的消息结构比较简单,因此就不需要这些专用的库函数了,直接使用windows.h中的函数即可。对于小车单片机程序,只需要编写对应的串口接收程序,即可完成计算机与小车之间的通信。

在有线的阶段,整个程序比较简单,因为计算机端每次发送,小车都能稳定正确地收到。

5. 项目总结与心得

在这次实验中,从过程来讲,我们的收获很多。在学习了OpenCV的原理和使用方法之后,我们完成了对图像的实时获取、处理、分析等功能,并且利用合适的算法,达到了迷宫寻径的功能。人机接口为在实时图像上进行可视化交互,简单直观准确。这部分作为实验的最主要功能,可以说完成的还是比较成功的。同时,小车控制设想得比较,期望能够保证每一步的正确位置与方向后再走下一步,以保证小车行进的成功率。虽然这部分没有经过实际测试,但是思想上还是比较成熟的。

这次实验由于小组4个人的时间问题,最终没有完成调试,可以说,这是非常大的一个遗憾,许多调试过程中才能积累的经验我们都没有得到,而且整个实验草草结束也使得我们很惭愧。但是,我们在这次实验的过程中还是有很多的收获,大家在一起发扬了群策群力的精神,整个实验过程是在不断地克服困难中度过的。总之,这次实验虽然结果不能令人满意,但是其中的过程还是一段难忘的经历。

项目名称:

计算机控制小车走迷宫

小组编号:

M28

设计小组名单:张明禄(组长)、朱文毅、许帅、韦鹏

上海交通大学 电子信息与电气工程学院

上海交通大学 电子信息与电气工程学院

地址:上海市华山路1954号

邮政编码:200030

上海交通大学 电子信息与电气工程学院

地 址:东川路800号

邮 编:200240