电脑鼠走迷宫实验报告附程序_第1页
电脑鼠走迷宫实验报告附程序_第2页
电脑鼠走迷宫实验报告附程序_第3页
电脑鼠走迷宫实验报告附程序_第4页
电脑鼠走迷宫实验报告附程序_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

东南大学第二届IEEE标准电脑鼠走迷宫竞赛电脑鼠原理及其应用 机电动力试验平台第7页共9页第二届IEEE标准电脑鼠走迷宫竞赛论文目录一.软件程序框图………….3二.参赛软件研发过程…….4三.软硬件调试过程……….4四.各组员分工…………….4五.体会心得……………….5附录……………………...…..6参考书目……………….……9软件程序框图参赛软件研发过程在voidmain()函数中,采用压栈的方式进行电脑鼠搜索,数组uint8GmcCrossway[MAZETYPE*MAZETYPE]用于暂存未走过支路坐标。数组uint8GucMapBlock[MAZETYPE][MAZETYPE]记录每个点的地图信息,初始化为0x00。函数voidmouseGoahead(int8cNBlock)、voidmazeSearch(void)、voidmouseTurnleft(void)、voidmouseTurnright(void)、voidmouseTurnback(void)和voidobjectGoTo(int8cXdst,int8cYdst)控制电脑鼠的运动状态。voidmapStepEdit(int8cX,int8cY)为制作等高图函数,它把记录等高值的数组uint8GucMapStep[MAZETYPE][MAZETYPE](初始化为0xff)赋值。当电脑鼠搜索时无方向可走时就按照这个等高图的信息退回上个点,冲刺时也是一样的道理。另外,为了缩短转弯时间,并且保证电脑鼠的稳定性,采取转弯时整步,直走时半步。我们在Mouse_Drive.c文件中,加入全局变量int8maincheck,初始化为0(其中0为不转弯,1为转弯)。在__leftMotorContr()和__rightMotorContr()中根据maincheck的值来实现整步和半步的转换,maincheck的值在voidmouseTurnleft(void),voidmouseTurnback(void)和voidmouseTurnright(void)中被更改。软硬件调试过程首先我们对电脑鼠的传感器进行调节。根据程序中对传感器返回值的要求,首先我们降低了左前右三个方向远距红外检测频率,改为35500Hz。再在跑道上对传感器硬件的调节,当电脑鼠靠近墙时,近墙一侧斜角红外值为1,远墙一侧斜角红外值为0,近墙一侧正对红外值为3,远墙一侧正对红外值为1;当电脑鼠在跑道中央时,斜角红外值均为0,且两侧正对红外值为1;前方红外探测距离不得超过一格,由于提速的原因,尽量要远些。将速度提高,68的速度实在太慢。最开始尝试100和120,但是电脑鼠探索时前进不稳定,会晃,撞墙。所以放弃了高速,只将速度提高到80。速度提高了,就得更改转弯时得转动步数,速度的调节和步数的调节是同步的。根据转弯时的幅度来判断目前转弯步数是否合适。预赛完后,要想缩短搜索时间,就采用转弯时整步,直走时半步的驱动方法。首先步数减半,再像之前那样微调步数。组员分工程序的改编和程序的调试体会心得当初我选这门公选课,是我舍友告诉我的,他说他的朋友说上这门课有机会拿srtp学分,但是需要些编程基础。我的编程基础还好,就奔着srtp学分选了这门课。其实这次我上交的程序只在标准程序中更改了很少,更本没有多大的意义。对此我很遗憾。我们平时课程也有点多,琐碎的事情也多,就没多少时间来好好理解程序。我很早就写好了一个算法,但是我是在C++上写的,是很理论的。后来我就想用我自己的算法来写这个电脑鼠搜索程序,结果我遇到了很大的难题。我对电脑鼠的速度始终都控制不好,老是撞墙。后来听了好友的建议,把速度先减小,看看具体原因。结果我发现,我的程序有很多问题。虽然我修改了很多了,但是还是有漏洞。由于时间不够,没有将我的算法改好,就很舍不得地放弃了它。我将我自己编写的程序附在附录里。在整个过程中,我感触最深的是理论与实际的差异原来是很大的。比如说对半步驱动速度的控制,如果defineSEARCHSPEED68,在较长直道上速度太小,很慢,但是转弯就比较合适;但是如果defineSEARCHSPEED100,虽然在较长直道上速度足够,但是转弯很不稳定,很容易出现丢步现象。还有一点,我体会到有个老师说的那句话是对的,“现在的编程语言太多了,平台也很多,但是只要你努力学好一种语言,其他的语言可以很快学会”。他曾经十天学会一种语言,并且完成了一个项目。附录搜索算法:搜索过程中根据绝对方向信息前进,由递归函数voidSeekPath(int8x,int8y,int8x1,int8y1)实现的,其中(x,y)为电脑鼠当前所在点,(x1,y1)为上次探索的点,(x1,y1)是为了回溯而设立的参数。而且,在搜索过程中采用排除算法,可以避免走一些死路或不必走的路。其中排除算法是由函数voidmapchange(void)实现的,其算法为:在电脑鼠四周的四个点中,如果某个点的四个方向地图信息至少有三个方向已知,则不需要探索这个点,将这个点标记为已被探测过。电机驱动:Speed0=Speed1=整步驱动。整步驱动加速很快,尤其是后转弯很快。地图信息处理:地图信息在每次走了40步后进行获取,此时传感器正处于格子中央,获取的地图信息要准确些。记录地图信息的数组我改为maze[MAZETYPE*2+1][MAZETYPE+1],我设电脑鼠起点为(1,1),则地图上某个点(x,y)的墙壁信息为:上方向maze[2*x-1][y],下方向maze[2*x-1][y-1],左方向maze[2*x-2][y-1],右方向maze[2*x][y-1]。如下图,每个三角形为地图上的一个点,图中每个三角形的上顶点为上方向墙壁信息,左顶点为左方向墙壁信息,右顶点为右方向墙壁信息,中间的点为下方向墙壁信息。这样做有一个好处,比如说,地图上某个点(x,y),那么它下方向墙壁信息和这个点下面的点(x,y-1)的上方向墙壁信息是一致的,一旦改变其一,两者都变了,这很符合实际。但是,它有它的不足,就是开空间太大,而且还是全局变量,占内

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论