《智能机器人实验设计报告.doc》由会员分享,可在线阅读,更多相关《智能机器人实验设计报告.doc(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 数理与信息工程学院综合实验设计报告课程名称: 智能机器人 专业: 计算机科学与技术专升本 班级: 姓名: 学号: 教师: 综合性实验 群鸭过河一、任 务 以小组的形式展开比赛,机器人作小鸭,它们能够一个跟在一个后面,一起安全“游”过“河”。安全过“河”的机器人个数最多的队获胜。如图一所示图一 小鸭过河 二、任务分析鸭妈妈带着一队小鸭过河,那么就需要为小鸭妈妈编写“过河”程序,其他小鸭能够一个跟着一个,那么就要为它们编写“跟随”程序。1、活动准备a) 物品准备 能力风暴智能机器人 5台 计算机 1台b) 让机器人移动要用到库函数drive(a,b),在前面已经作过相应的介绍,在这里就不重复说明
2、了。c) 判断与循环语句的使用。While(1) 这个语句是一个无限循环语句。While语句不断对其后()中的内容进行判定。当判断的值为1时就将内的语句执行一遍,然后再接着对()中的值进行判断。而在这里while后面()里的内容为1,所以这个语句会无限循环下去。 If()else或者else if()也是比较常见的判断语句,这种语句能够将问题的多种情形都罗列出来,分别进行处理。d) 红外传感器可以检测到正前方、左前方、右前方是否有障碍物,调用一次库函数ir_detector(),红外传感器就进行一次检测,并有返回值。返回值具体意义为 0=没有障碍, 1=左边有障碍, 2=右边有障碍, 4=前方
3、有障碍;机器人的碰撞传感器,能够检测到前、后、左、右四个方向的碰撞,调用一次 bumper()函数,就进行一次碰撞检测,有返回值。其具体意义为: 1左前,2右前,4左后,8右后,3前,12后,5左,10右。2、方案设计方案的设计分为“过河”和“跟随”两个部分。a)“过河”过河的方案有很多,比如:直着过河、斜着过河、波浪式过河等,不同的过河方法,程序编写的难度有所不同,随后的小鸭“跟随”的难度也有所不同,波浪式过河,后面跟随的小鸭就比较容易跟丢,带小鸭成功过河的可能性就比较小。b) “跟随”1) 要让小鸭能够跟随,这就需要用到红外传感器,当小鸭“看到”前方有物体时,就会主动跟上前去。这时候,如果
4、小鸭的前进速度比较慢,它很可能就跟不上了,速度快又会撞到前面的小鸭,因此速度的设置比较重要。2) 如果小鸭撞到了前面的鸭子,该怎么办?可以让它停下来,再去检测前面有没有可以跟随的鸭子。3) 如果小鸭迷失了方向该怎么办呢?也让它停下来,在原地等着鸭妈妈。具体的方法由大家自己来设计,能够完成整个活动的方案就是好方案!3、画流程图母鸭流程图好下: 三、 实验记录方案设计(1) 母鸭过河程序设计 为便于实现,母鸭部分先用红外线传感器探测,以返回值判断前方是否有障碍物,若无,则前进:若有,则判断左前方向,左前方向无障碍物则左转前进,若有则再判断右前方向,右前方向无障碍物则右转前进,若有则停止运动。为避免
5、母鸭碰到障碍物停止造成小鸭碰在一起,本设计先对前方进行试探,若前方都有障碍物无法行走,则母鸭不动,避免带动小鸭撞成一堆。母鸭部分程序如下: void main() int ir = 0; int v_f =20; int v_t =15; ir = ir_detector(); while(1) if(ir=0)drive(v_f,0); else if(ir=4) if(ir=1) if(ir=2)stop(); else drive(v_f, v_t); drive(v_f,0); else drive(v_f, -(v_t); drive(v_f,0); else drive(v_f,0
6、); (2) 小鸭跟随程序设计 小鸭部分主要是跟随前面一只鸭子为主,基本设计思想是先用碰撞传感器检测是否与前一只鸭子连续发生碰撞,若是,则稍微停止片刻,若没有碰撞,则用红外传感器依次检测前方左方右方,检测到有物体的方向即为前面那只鸭子的运动方向,则转向该方向跟随运动。说明:每只小鸭的速度值都不一样,下面小鸭程序仅取母鸭后的第一只小鸭为例部分程序如下: void main() int ir = 0; int bmp = 0; int pre_bmp = 0; int v_f =25; int v_t =16; while (1) ir = ir_detector(); bmp = bumper(
7、) & 0b0011; if (pre_bmp & bmp) stop(); wait(0.5); else if (bmp) stop(); else if (ir = 0) stop(); else if (ir = 4) drive(v_f,0); else if (ir = 1) drive(v_f, (- v_t); else if (ir = 2) drive(v_f, v_t); wait(0.1); pre_bmp = bmp; 后面的3只小鸭的代码与第一只小鸭的代码基本一样,不同的是v_f与v_t这2个决定小鸭前进速度和转速的参数值。在对于小鸭的调试,基本也是在这2个值上做调
8、试。四、 实验所遇问题 表11 现象及调试序号出现的现象解决方法1后面小鸭速度过快顶开了母鸭 调整小鸭速度2碰撞后没有及时停止碰撞传感器有问题,换了一个机器人3母鸭路线弯曲不定路况问题,换地方调试4红外传感器返回值不变传感器问题,换机器人5机器人按下开启不运行电池没电,或者机器人有问题,换机器人实验感想:这次的实验的难度有点大,是前几次实验的总结,调试了很多次的代码,和同组的同学不断讨论,不断的调试,最终才调试成功。本次实验的难度主要有两点:1、母鸭和子鸭程序的设计;2、对于母鸭和子鸭速度参数的修改。我们小组分析出问题的所在后就对此做出合适的解决步骤:首先,有设计出母鸭和子鸭的程序。母鸭和子鸭的程序大致可以相同,但是有所差别。比如,母鸭是起带头作用,故我们就只是简单的设计母鸭为无脑前进,但是遇见前方有障碍物时要会转弯,这里就用到了红外检测。而子鸭就要会跟随,于是我们就用红外检测检测附近是否有障碍物,有就向障碍物前进;然后就是对母鸭和子鸭们的调试。由于我们只是简单的处理子鸭前进的判断(前方是否有障碍物),所以我们试验的地方放在空旷的地方。但是由于每次实验课调试的地方有所差异及机器人不同,我们每次都要对母鸭和子鸭的参数进行不同的调试,这也是本次实验难度最大的地方,也是我们得不到理想状态的主要原因之一。