电脑鼠走迷宫实验报告附程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
东南大学第二届IEEE标准电脑鼠走迷宫竞赛电脑鼠原理及其应用机电动力试验平台
第二届IEEE标准电脑鼠走迷宫竞赛
论文
东南大学第二届IEEE标准电脑鼠走迷宫竞赛电脑鼠原理及其应用机电动力试验平台
目录
一.软件程序框图 (3)
二.参赛软件研发过程 (4)
三.软硬件调试过程 (4)
四.各组员分工 (4)
五.体会心得 (5)
附录 (6)
参考书目 (9)
软件程序框图
东南大学第二届IEEE标准电脑鼠走迷宫竞赛电脑鼠原理及其应用机电动力试验平台
参赛软件研发过程
在void main()函数中,采用压栈的方式进行电脑鼠搜索,数组uint8 GmcCrossway[MAZETYPE*MAZETYPE]用于暂存未走过支路坐标。
数组uint8 GucMapBlock[MAZETYPE][MAZETYPE]记录每个点的地图信息,初始化为0x00。
函数void mouseGoahead(int8 cNBlock)、void mazeSearch(void)、void mouseTurnleft(void)、
东南大学第二届IEEE标准电脑鼠走迷宫竞赛电脑鼠原理及其应用机电动力试验平台void mouseTurnright(void)、void mouseTurnback(void)和void objectGoTo(int8 cXdst, int8 cYdst)控制电脑鼠的运动状态。
void mapStepEdit(int8 cX, int8 cY)为制作等高图函数,它把记录等高值的数组uint8 GucMapStep[MAZETYPE][MAZETYPE](初始化为0xff)赋值。
当电脑鼠搜索时无方向可走时就按照这个等高图的信息退回上个点,冲刺时也是一样的道理。
另外,为了缩短转弯时间,并且保证电脑鼠的稳定性,采取转弯时整步,直走时半步。
我们在Mouse_Drive.c文件中,加入全局变量int8 maincheck,初始化为0(其中0为不转弯,1为转弯)。
在__leftMotorContr()和__rightMotorContr()中根据maincheck的值来实现整步和半步的转换,maincheck的值在void mouseTurnleft(void),void mouseTurnback(void)和void mouseTurnright(void)中被更改。
✧软硬件调试过程
首先我们对电脑鼠的传感器进行调节。
根据程序中对传感器返回值的要求,首先我们降低了左前右三个方向远距红外检测频率,改为35500Hz。
再在跑道上对传感器硬件的调节,当电脑鼠靠近墙时,近墙一侧斜角红外值为1,远墙一侧斜角红外值为0,近墙一侧正对红外值为3,远墙一侧正对红外值为1;当电脑鼠在跑道中央时,斜角红外值均为0,且两侧正对红外值为1;前方红外探测距离不得超过一格,由于提速的原因,尽量要远些。
将速度提高,68的速度实在太慢。
最开始尝试100和120,但是电脑鼠探索时前进不稳定,会晃,撞墙。
所以放弃了高速,只将速度提高到80。
速度提高了,就得更改转弯时得转动步数,速度的调节和步数的调节是同步的。
根据转弯时的幅度来判断目前转弯步数是否合适。
预赛完后,要想缩短搜索时间,就采用转弯时整步,直走时半步的驱动方法。
首先步数减半,再像之前那样微调步数。
✧组员分工
程序的改编和程序的调试
东南大学第二届IEEE标准电脑鼠走迷宫竞赛电脑鼠原理及其应用机电动力试验平台 体会心得
当初我选这门公选课,是我舍友告诉我的,他说他的朋友说上这门课有机会拿srtp学分,但是需要些编程基础。
我的编程基础还好,就奔着srtp学分选了这门课。
其实这次我上交的程序只在标准程序中更改了很少,更本没有多大的意义。
对此我很遗憾。
我们平时课程也有点多,琐碎的事情也多,就没多少时间来好好理解程序。
我很早就写好了一个算法,但是我是在C++上写的,是很理论的。
后来我就想用我自己的算法来写这个电脑鼠搜索程序,结果我遇到了很大的难题。
我对电脑鼠的速度始终都控制不好,老是撞墙。
后来听了好友的建议,把速度先减小,看看具体原因。
结果我发现,我的程序有很多问题。
虽然我修改了很多了,但是还是有漏洞。
由于时间不够,没有将我的算法改好,就很舍不得地放弃了它。
我将我自己编写的程序附在附录里。
在整个过程中,我感触最深的是理论与实际的差异原来是很大的。
比如说对半步驱动速度的控制,如果define SEARCHSPEED 68,在较长直道上速度太小,很慢,但是转弯就比较合适;但是如果define SEARCHSPEED 100,虽然在较长直道上速度足够,但是转弯很不稳定,很容易出现丢步现象。
还有一点,我体会到有个老师说的那句话是对的,“现在的编程语言太多了,平台也很多,但是只要你努力学好一种语言,其他的语言可以很快学会”。
他曾经十天学会一种语言,并且完成了一个项目。
东南大学第二届IEEE标准电脑鼠走迷宫竞赛电脑鼠原理及其应用机电动力试验平台✧附录
⏹搜索算法:
搜索过程中根据绝对方向信息前进,由递归函数void SeekPath(int8 x,int8 y,int8 x1,int8 y1)实现的,其中(x,y)为电脑鼠当前所在点,(x1,y1)为上次探索的点,(x1,y1)是为了回溯而设立的参数。
而且,在搜索过程中采用排除算法,可以避免走一些死路或不必走
东南大学第二届IEEE标准电脑鼠走迷宫竞赛电脑鼠原理及其应用机电动力试验平台的路。
其中排除算法是由函数void mapchange(void)实现的,其算法为:在电脑鼠四周的四个点中,如果某个点的四个方向地图信息至少有三个方向已知,则不需要探索这个点,将这个点标记为已被探测过。
电机驱动:
Speed0=
()
2
2
c2
6
_
2c
2
_
3
speed
ctr
tr
speed
speed
d
ctr
tr
speed
speed
d
+
+
-
+
Speed1=
()
2
2
c2
6
_
5
2c
2
_
3
speed
ctr
tr
speed
speed
d
ctr
tr
speed
speed
d
+
+
+
+
-
整步驱动。
整步驱动加速很快,尤其是后转弯很快。
东南大学第二届IEEE标准电脑鼠走迷宫竞赛电脑鼠原理及其应用机电动力试验平台
地图信息处理:
地图信息在每次走了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]。
如下图,每个三角形为
东南大学第二届IEEE标准电脑鼠走迷宫竞赛电脑鼠原理及其应用机电动力试验平台地图上的一个点,图中每个三角形的上顶点为上方向墙壁信息,左顶点为左方向墙壁信息,右顶点为右方向墙壁信息,中间的点为下方向墙壁信息。
这样做有一个好处,比如说,地图上某个点(x,y),那么它下方向墙壁信息和这个点下面的点(x,y-1)的上方向墙壁信息是一致的,一旦改变其一,两者都变了,这很符合实际。
但是,它有它的不足,就是开空间太大,而且还是全局变量,占内存。
参考书目
1.IAR EWARM V5嵌入式系统应用编程与开发徐爱钧编著北京航空航天大学出版社2009
2. /sc2006 2006年IEEE学会公布2006年电脑鼠走迷宫竞
赛规则的网址
3. 单片机及应用系统设计原理与实践刘海成编著北京航空航天大学出版社 2009。