计算机控制小车走迷宫.docx
- 文档编号:5286299
- 上传时间:2022-12-14
- 格式:DOCX
- 页数:11
- 大小:472.18KB
计算机控制小车走迷宫.docx
《计算机控制小车走迷宫.docx》由会员分享,可在线阅读,更多相关《计算机控制小车走迷宫.docx(11页珍藏版)》请在冰豆网上搜索。
计算机控制小车走迷宫
姓名
班级
学号
具体负责的工作
联系方式
陈敏
F0602005
5060309174
负责方案设计,图像处理,路径算法
batxgt@
俞坚才
F0602005
5060209163
负责迷宫算法设计与调试,串口通信,单片机程序设计
fishyjc@
谭宏冰
F0602009
5060209319
负责小车的硬件调试,小车外形设计,串口调试
hbtan@
梁家欣
F0602009
5060209318
负责资料查找与收集,小车硬件调试
aspirin@
摘要:
本项目采用ATMEL公司的AT89S52芯片为核心设计,实现小车在计算机控制下走出迷宫的功能。
有一台小车和一个pc端,利用计算机处理采集到的图片判断小车及迷宫的相对位置,迷宫信息,在计算机端计算并选择路线,通过无线指令控制小车动作,使之依最佳路径离开迷宫。
关键词:
迷宫算法、无线通信、计算机、单片机
目录
1.整体介绍1
2.硬件部分3
2.1硬件元器件3
2.2调试过程7
3.软件部分8
3.1图像处理9
3.2迷宫算法9
3.3小车实时调整10
3.4串口通讯10
4.项目心得12
4.1系统的不足或可改进部分12
4.2感受及收获12
5.致谢14
6.参考文献……………………...…………………………………………………….15
1.整体介绍
由摄像头(USB接口)实时捕捉迷宫内小车的位置情况,通过USB线缆传送至电脑里编写的上位机软件,软件通过图像识别找出当前小车的位置信息及迷宫的信息,经过计算,作出控制决策,生成控制信号,并经通讯模块发送至小车。
小车上的控制电路对控制信号作出相应反应,驱动电机。
2.硬件部分
2.1硬件元器件
这次科创3实验,用到两块主要的芯片,一块是CMOS8位微控制器,其主要功能是:
·兼容MCS-51指令系统
·8k可反复擦写(>1000次)ISPFLASHROM
·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内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
其PDIP图如下:
另一块芯片是L298N,用它来控制两个电机。
管脚图如下:
每个管脚正常工作时的电参数如下:
2.2调试过程
我组的小车驱动使用的是外接USB5V电源,这样在有线通讯情况下就可以使用单根USB线传送通讯数据和5V电量,节省了导线,也免去了多余的电源设备,但5V的电量对于小车来说明显偏低,以致小车的行驶速度只有1cm/s左右,不过这只是时间上的问题,对整体性能发挥并无大碍。
小车的有线通讯基本没什么问题,只需要注意在原有的电路板基础上除去底板的两个三极管,并且要将数据线中的TXD接线接到小车顶板的RXD接点上就可以了。
但是小车的无线通讯并没有那么顺利,我组用了一个下午调试小车的无线模块,结果发现在有足够强的天线辅助情况下无线通讯仍然很不稳定,接收到的信号中仍然会产生不少噪音显著影响通讯质量,由于我组人员对于硬件调试并不熟悉,无法改善这一状况,故最终检测使用的还是有线通讯。
3.软件部分
编程语言:
G语言
编译环境:
LabVIEW8.5
所使用的外加函数库:
NIvision8.5,WebCam(USB视频捕捉函数库)
主要流程:
1.摄像头获取迷宫图片,做整个过程的背景
2.人工标记入口,得到入口坐标
3.人工标记出口,得到出口坐标
4.通过迷宫算法由计算机找到一条可行的路径,保存关键坐标点
5.小车放置入口处,开始行进
6.摄像头实时捕捉小车位置,与计算路径相比较,并通过串口自动向小车发送调整指令
7.小车最终到达出口
程序构成:
我组将“计算机控制小车走迷宫”整个过程集成在一个LabVIEW程序代码中,总共分为三大部分:
迷宫处理、路径算法、小车实时捕捉与控制。
第一部分将捕捉到的迷宫图像转化为01代码;第二部分从第一部分的迷宫代码中计算出最佳路径;第三部分以第二部分的迷宫路径为输入,实时捕捉小车位置坐标,调整控制小车沿最佳路径行走。
3.1迷宫处理:
利用外部函数WebcamtoVision将捕捉到的图像转换为24位图片数据格式,再调整阈值(214=16777216)使迷宫的墙最亮(数值为1)道路最暗(数值为0)便得2位黑白图像,再利用RemoveParticle函数去除多余的杂点。
其中的阈值处理使用数组形式,所以ArrayToImage和ImageToArray进行数组-图像转换。
这样所得的迷宫数据了已经足够用于路径算法的处理。
3.2迷宫算法:
该算法的实现使用的是C语言代码,利用LabVIEW的“调用库函数节点”作相应的设置即可调用外部C代码。
该算法首先的关键点是将第一部分所得的迷宫图像中不定宽度道路转换成单宽度,然后搜索确定寻找迷宫出入口,最后将出入口以外的死角区和多余分叉路删除,即得最佳路径。
3.3小车实时捕捉与控制:
我组小车外观为亮黄色(相应的24位色彩值约为12000000),故捕捉小车程序只需将12000000色彩值附近的色彩转换为1,将其他色彩值转换为0即可得小车的大致范围,再利用重心法获得小车的重心坐标值,此坐标可近似作为小车的当前位置。
小车按前左后右四个方向轮流行驶,若当前行驶方向使得小车位置偏离最佳路径指定的距离时,则命令小车返回到路径上,再改变为下一个方向继续行驶,直到走到出口为止。
3.4串口通讯:
主要基于LabVIEW自带的串口函数类VISA设置相应的串口号和发送协议,即可实现对小车指定串口的指令发送。
关键函数说明:
VISA打开:
打开指定的VISA串口。
VISA配置串口:
相关协议内容的设置。
VISA写入:
向指定的VISA串口写入内容。
VISA关闭:
关闭VISA串口。
4.项目心得
4.1系统的不足或可改进部分
本次实验并不是很成功,我组最终没法顺利走出迷宫,其中有不少处小车都是直接撞到墙上了,此系统中还有许多值得思考和改进的地方,比如捕捉迷宫图像时对环境的要求比较高(迷宫摆放不能过于倾斜,环境亮度必须较均匀),而不是迷宫的特点来记录迷宫的形状;路径算法中要求入口必须在下方,出口必须在上方;小车转弯弧度有时较大有时较小;等等。
4.2感受及收获
总的来说,本课程对我组是非常有意义的,因为它给了我们一次体验实践与自我发挥的机会。
在本课程中我们真正体会到完完全全靠自己的力量实现团队目标的那一份自信、勇气与耐心。
虽然不能成功地走出迷宫,但我们觉得这并不是最重要的一点,我们相信在这一过程中我们所体现出来的顽强拼搏的精神远远比结果重要得多。
我们能够在这里充分感受到从无到有的那一份喜悦:
一开始我们连什么是计算机控制小车走迷宫是怎么一回事,怎么样捕捉视频,如何处理视频,用什么软件能控制小车这一些简单的知识都毫无绪;后来我们开始泡图书馆,开始几个人聚在一起讨论各自的设想;后来我们开始安装相应的软件,开始对于书本一字一句学着处理图像;再后来我们开始拿起电铬铁,开始实实际际地使用示波器,开始知道单片机原来如此智能;最后,我们自己摆了迷宫,看着小车在第一个拐弯处帅气地漂移,那时多么地自豪;在第二个拐弯处直接往墙上狠狠一撞,那时又是多么地沮丧。
一切都让我们感觉如此新奇而又有挑战性,如此有压力而又如此有动力。
当回首往事的时候,我们惊奇地发现,原来成长就是学习生活中不知不觉和享受啊!
5.致谢
在本次试验中,由于以下单位和个人的大力帮助而顺利进行并完成,在此向以下单位和个人表示衷心感谢!
上海交通大学电子信息与电气工程学院
“电院科技创新3”课程老师张士文老师
帮助进行调试的各位助教
以及给于我们帮助的所有同学
6.参考文献
科技创新[3]-M29设计报告.doc,鞠峰等,2007年6月6日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机控制 小车 迷宫
![提示](https://static.bdocx.com/images/bang_tan.gif)