北京邮电大学机械工程机电综合实训课程设计 15级最高分_第1页
北京邮电大学机械工程机电综合实训课程设计 15级最高分_第2页
北京邮电大学机械工程机电综合实训课程设计 15级最高分_第3页
北京邮电大学机械工程机电综合实训课程设计 15级最高分_第4页
北京邮电大学机械工程机电综合实训课程设计 15级最高分_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

题目: 四足仿生机器人姓 名 张丁予 陈思奇 学 院 自 动 化 专 业 机械工程 班 级 2015211402 学 号 2015211753 2015211742 指导教师 宋原 郭磊 2018年4月 四足仿生机器人一、实验目的 采用功能齐全的“创意之星”机器人套件组建出各式各样的机器人; 熟悉:多自由度机器人的设计过程; 掌握:机器人实体建模与仿真; 编程与控制(基于AVR单片机);二、实验任务 利用Solidworks装配机器人,并进行运动仿真; 利用已给零件及传感器搭建设计机器人; 运用UP-Commander在线调试机器人运动; 运用AVR Studio编程环境编写C语言下载至AVR单片机中完成指定动作;三、实验套件实验套件(创意之星) 机械结构:基本结构件、舵机动力关节、可转向轮子、机械爪等; 控制系统:控制器、舵机、直流电机、各类传感器、电源等; 控制软件:NorthSTAR 图形化开发环境 四、实验步骤1、确定设计方案根据设计指导书及预想实现的功能进行组内讨论,提出多种设计方案,最终确定了能实现机器人的方案。2、机构设计整个机器人由大致三个模块组成:1) 由8个舵机组成四足机器人的4条腿模块;2) 由1个舵机组成四足机器人尾部部分;3) 由2个红外接近传感器和1个舵机组成的头部模块;4) 由1个声音传感器,1个避障传感器和2个红外接近传感器组成的控制感应模块。3、基本功能的设计:1) 机器人由两种模式,由声音控制启停,一种是停止等待模式,一种是运行模式。等待模式下,我们设置机器人为卧倒姿态并模拟狗的样子,来回摇动尾巴,等待指令,使用者可通过声音传感器发出启动指令,机器人进入运行模式。运行模式下,机器人实现正常的前进,同时头部及其下方的三个传感器来检测前方障碍物,便于及时调整运行动作,避开障碍物。并且一旦使用者再次发出指令,机器人会立刻停止运动,原地卧倒恢复初始姿态。2) 平地上的行走通过步态的设计来实现。步态设计模仿自然界中的四足动物的行走方式并加以改进,利用静态平衡来保持行走时的重心,可以正常迈步行走。3) 当左侧红外线传感器检测到障碍物,右侧红外线传感器检测不到障碍物时,调整机器人运行步态,控制机器人左后退五步直至检测不到障碍物,并实现机器人前进方向的右转,避开障碍物。右侧发现障碍物后用同样的原理控制机器人右后退并实现机器人前进方向的左转。4) 当两侧均检测到障碍物时,调整步态,控制机器人右后退五步直至检测不到障碍物,并实现机器人前进方向的左转,直至检测不到障碍物时,再控制前进。5) 由于障碍物形状高度各不相同,对于较低障碍物,红外传感器可能无法有效检测到,因此机器人前方加装有专门检测较低障碍物的碰撞传感器,当与较低障碍物碰撞后,碰撞传感器启动,我们设置了一个两秒的时间,机器人会在这接下来的两秒内继续当前步态,如果障碍物质地柔软,则会被推开,不妨碍机器人原本的步态:如果机器人质地坚硬,则机器人这两秒内无法推开障碍物而原地不动,碰撞传感器持续触发,则两秒后机器人会就地卧倒,恢复初始姿态。4、舵机测试及其设置1.首先我们需要测试分配给我们的舵机是否正常,同时为其编号,用以编制程序。由于在舵机模式下,有效的角度控制范围是0-300,对应控制量为0-1023。转换公式如下:理论控制量上限理论转角上限目标控制量目标转角xy=3001023在实际运用中,必须先将每个舵机的角度测出并调整好,否则可能出现无法实现预期运动卡死的情况。比如如果我们机器人尾部的舵机以1023即300的控制量安装,那么该舵机只能向角度减小的方向旋转,刚开始运动时尾巴则不能向另一个角度增大的方向摆动,只能单一方向摆动,而如果我们没注意到这一点,编程序时仍使其角度增加,则舵机会卡死而可能出现损坏。对于腿部的舵机更是如此,如果不测量好角度,并让舵机以满足我们运动的角度范围安装,那么机器人的步态将无法实现,甚至造成卡死损坏舵机的严重后果。我们的测试结果如下:(注:无括号数字为舵机号,矩形区域代表躯干,9号头部舵机,10号尾部舵机,2,1,6,3为大腿舵机,靠近头部括号内数字为对应舵机向头部转动角度限值,靠近尾部括号内数字为对应舵机向尾部转动角度限值,中间为舵机居中对应角度值;8,7,4,5为小腿舵机,上方括号内数字为对应舵机向上转动角度限值,下方括号内数字为对应舵机向下方转动角度限值,中间为舵机垂直地面对应角度值。)上述问题还有一种解决办法是安装完成后,可以通过舵机驱动软件也改变其初始角度,但是由于软件问题驱动无法安装因此只能采取上述办法手动测试并安装。2.其次由于舵机速度有高有低,但如果长时间处于高速状态下会发热,可能损坏舵机。因此我们要限制舵机的参数。一方面保护所使用器件的性能,防止过载或错误操作而将其损坏;另一方面也为我们进行各种复杂的调试做好的准备,能够顺利的完成设计任务。5、传感器的测试 传感器也需要测试其功能正常后才能安装,红外传感器测试较为简单,只需要上电后用手遮挡即可测试其功能。对于声音和碰撞传感器,需要我们自己重新写一个小程序来测试,一个简单的办法是用传感器控制一个舵机,程序设置为传感器无触发时,舵机正常工作并来回反复改变一个角度,触发时舵机停止运行。测试时只需触发传感器观察舵机工作情况是否发生相应变化即可。6、机构的装配整个四足避障机器人由1个舵机和2个红外接近传感器组成可转动头部,8个舵机组成主要的4条机械腿,由1个舵机构成尾部。整个四足机器人共由10个舵机、2个红外接近传感器,1个碰撞传感器,1个声音传感器,1个控制器及“创意之星”机器人零部件组成。安装可分为SOLIDWORKS软件装配,零件的安装,部件的组装以及最后的总装过程。根据预先设计好的机器人结构方案,我们先在电脑上用SOLIDWORKS模拟装配仿真并验证结构合理性,之后实际操作时,我们各自拼装了四条腿的部件、头部、尾部以及机器人主体部分,最后组装到一起,形成完整的整体结构。装配图如下:组装步骤如下:7、连接电线由于我们此次使用的是创意之星的标准套件,舵机接线、传感器模拟与数字端口的连接都及其方便简单。8、机器人步态设计及调试四足机器人的关键是设计其步态。因为对于足型机器人来说,行走过程中的平衡是至为关键的,要时刻保证重心处于着地腿所构成多边形的范围内,才能保持平衡。我们采用了仿生学的知识,模仿四足动物的行走方式并根据我们机器人的实际情况加以改善。具体原理如下:1.在设计步态之前,我们先设置好约束条件:1) 机器人在任一个时刻必须有不少于3 个着地支撑足。2) 机器人的重心的投影必须在3 或4 个支持点所围成的多边形内。如下图,我们先来看看机器人上电静止时的状态:2.可以看到,重心处于4 个支点的正中心,这意味着失去任何一个支点,构型的重心都将处于其他三个支点所构成的三角形的一条边上,构型会有向一侧倾覆的危险。所以为了让构型能够平稳的抬起一支脚需要先让重心移动。当然,我们无法改变构型的配重状态,所以我们先控制所有的足向后方平移,在摩擦力的作用下,躯干将向前探出。如下图:3.前移后的重心位于ABC 区域和ABD 区域中,所以现在可以移动C 或D 两个支撑足中的一个了。我们选择移动。如图5.11,落地后的D 足与A、C 足形成的ACD 区域包含重心,B 足被解放出来,可以开始移动了。4.右侧的B、D 足向前迈出的动作做完后,开始向后蹬的动作,使重心向左前方移动并恢复移动前的状态。每个大腿移动时,为了避免与地面摩擦而产生摩擦力阻碍运动,都要先将小腿抬起一个角度,然后再移动大腿,大腿到达指定位置后再放下小腿, B、D向前迈出这个动作均如此实现。5.机器人回到刚开始重心前移后的状态,但是头的朝向偏向了左边。为了弥补方向的偏移,如图5.13,左侧的C 足开始向前迈出。C 足落地后,重心在BCD 区域内。A 足得到解放,向前迈出。6.左侧的A、C 足向前迈出完毕,开始向后蹬的动作,使重心向右前方移动。机器人的头部回正。7.至此一个前进运动周期就完成了,按照这样的方法循环下去,机器人就会向前一左一右地前进了。8.机器人的后退以及左右转,均是基于以上原理。后退只需将大腿前移并后蹬改为后移并前蹬即可。左(右)转向只需重复左(右)前进即可。9.机器人在红外传感器检测到障碍物后,会向检测到传感器的方向后退五步,然后继续前进,即机器人实现向障碍物相反方向的前进,从而避障。我们在UP-commander下调试机器人的预期动作,通过调节舵机转角、转速来完成预期机器人的动作,包括机器人的直行,转弯后退等动作,过程中应注意MultiFLEX2-PXA270控制器的工作模式。在在线调试环境中,完成各个动作的细节数值,包括转角,转速及运动时间等。由于UP-commander环境下无法读取IO口的数值,所以要完成传感器部分的设计必须在NorthStar2.2.10.511_Setup这个程序环境下进行调试。9、绘制程序流程图10、AVR Studio的程序书写与调试在该编译环境下,图形化的编程界面极大的方便和提高的了我们编写一系列动作的程序,而且可以更直观的观测到所有输出与输入端口,很好的完成对机器人的控制。下面是图形化的程序语言:源程序见报告最后第八部分(附页)五、问题及其解决整个过程中,我们遇到了很多问题,包括最初设计方案上的,结构上的,程序上的等等可以说各个方面都有或大或小的问题出现。有些是我们疏忽细节导致的,有些则是我们对于机器人的改进。下面列出一些比较重要的问题,这些问题的解决对于我们整个机器人最终功能的实现起了至关重要的作用。1.我们首先要考虑的是选择做一个什么机器人。“创意之星”套件里各种零部件都很齐全,能搭建的机器人有很多种。我们认为四足机器人看似简单,实际上对比轮式机器人,在设计行走方式上的难度就已经大了很多了,尤其是我们模仿借鉴了四足动物的步态,这是一个很需要细心和耐心的任务。同时我们也使用了三种传感器,时间也有限,在这段时间内设计出这个机器人我们认为已经是一个比较高难度的任务了。同时,由于实验器材有限,而且有相当一部分是存在问题的,尤其是舵机,要想实现更复杂的功能就必须有足够的舵机,而我们每组只有10个,好在我们的都是好的,我们也恰好用了十个,这才刚好够,如果想做再复杂的机构,那么我们舵机必然不够,可能就得删减结构无法完成预期目标。声音传感器我们也是差点用不了,好在我们找到了一个好的(极其稀有)。2.其次还是之前机器人步态设计的改进。由于静态平衡这种步态并不是最理想的,因为在重心前移的过程中总是4 个支持足同时着地,这样足的位置变化会在地面上发生滑动,而滑动的结果是使大量的能量浪费掉了。所以,我们改进了这种步态,即一只机械足大腿移动前,让该机械足小腿完成一个抬起运动,此时3 个足着地,由之前步态分析,重心仍在剩余三足组成的三角形内,因此仍然平衡,然后再移动大腿,等大腿完成运动后,小腿放下恢复原位,这样就会节省更多的能量。同时我们还考虑到实验室地面可能很容易打滑,因此备选方案是用小腿后蹬实现前进,不过事实证明,最初的设计方案基本可以在实验室地面上行走。3.接下来是对于机器人避障的实现,我们也综合考虑了许多情况,设计了多种判断逻辑。对于红外传感器检测到障碍物后的避障,我们最初的想法是转弯,可是验证后发现,四足机器人不同于轮式机器人可以差速,差速只要差速比够大那么就可以实现较小的转弯半径,这样就可以在撞上之前完成避障,而我们的机器人是依靠摩擦力来前进转弯,要想转90可能得前进一个身位才能实现,这样转弯半径过大,极有可能撞上障碍物无法实现避障。因此我们想出了一个更巧妙的办法,就是后退转向。机器人后退的同时尾部会向障碍物一侧转弯,这样头部就实现向障碍物相反方向的调转,继续前进时就避开了障碍物。事实上,乌龟如果在前进时受到惊吓,就是依靠这种方式来“逃跑”。对于较低的障碍物,我们也设计了底部的碰撞传感器来尽可能实现全方位避障。当与较低障碍物碰撞后,碰撞传感器启动,我们设置了一个两秒的时间,机器人会在这接下来的两秒内继续当前步态,如果障碍物质地柔软,则会被推开,不妨碍机器人原本的步态:如果机器人质地坚硬,则机器人这两秒内无法推开障碍物而原地不动,碰撞传感器持续触发,则两秒后机器人会就地卧倒,恢复初始姿态。4.由于我们整个机器人的步态设计以及避障都考虑了许多情况,因此这也使得我们的程序将会十分复杂。由于每一个指令之后都要加一个Delay延迟程序,以防止上一个指令未执行完毕下一个就开始的情况发生。这个Delay程序几乎在每一步后面都需要,这使得我们的框图会更加庞杂,对编程者来说极其不利,很可能造成逻辑混乱,因此我们想出了一个更好的解决办法。同时还添加了一个新功能,即声控停止。具体方法如下:实际上Delay就是一个循环次数很多的空循环,那么我们其实可以自己写这个循环,只要循环次数也能达到延时的效果即可,经过测试这个次数一般在25000次左右时,基本可以实现和Delay相同的效果,有些本身就执行很快的指令只需要13000次。如下图同时我们可以在循环里加入一个二次语音控制的功能,由于这个循环几乎每完成一个指令都要执行,那么我们再次加入声音传感器的判定,如果在运行模式下,机器人再次听到声音输入,则立刻卧倒进入等待模式。这样我们就使得原本只是起延时作用的空循环,现在变得不空,几乎做到了可以实时检测声音从而实现语音再控制,使得我们机器人的趣味性得以提升。六、 心得总结张丁予 这三周的机电课对于我专业知识运用和团队合作能力都是一个巨大的提升。首先从一开始的选定题目,到最终验收结束,尽管我们经历了很多挫折困难,但最终的结果还是让我十分有成就感。我们的机器人从一开始由于步态不合理只能原地行走,到最后成功地达到了所有的预期目标,这整个过程都让我受益匪浅。 选题过程中,我们组选择了四足机器人,就是因为我和陈思奇同学都希望挑战自己。四足机器人的步态设计看似简单实则需要我们花费很多的耐心去调整舵机的角度,找到那个最合适的姿态。设计过程中,我也想到了去借鉴那些伟大发明家向自然界“取经”的办法,我经常一个人在实验室盯着手机里乌龟行走的GIF看上半天。当看到其他同学的电机驱动的小车都已经开始跑,而我们的机器人仍然在原地打转,实话说心里真的有一种小失落和着急。好在还有老师、助教还有我的队友,在他们的帮助下,在一次一次尝试过后,终于我们设计出了改进版的静态平衡步态。当看到我们的机器人终于像一只乌龟一样开始行走后,内心真的充满了成就感。 整个过程下来,我感觉自己对于SOLIDWORKS装配这个功能的确有了更进一步的掌握,以前大一工图课上着重练习画图,装配只是试用了几次,经过这次实训对于装配的方法以及可能出现的各种问题有了一个基本的认识,这对我的未来将大有帮助。 更重要的是对于舵机的认识。以前经常听老师或身边的同学讲起舵机,只知道它是机器人的关节,是机器人能够实现各种运动的基石,但自己从来没有亲自使用过。经过这次实训,我才算真正体会了舵机的强大功能。 实训过程中,我们小组碰到了许多棘手的问题,我们也对一些问题产生了分歧,这里要特别感谢队友的支持和包容,最终我们还是精诚合作完成了这个机器人。我也真正明白了从设计到实际出结果是一个很复杂多变的过程,会时不时出现各种意外,比如最初我们不知道舵机要调整到合理的角度才能安装,于是我们重新拆了又装耗费了许多时间,这些问题都需要我们有绝对的决心,耐心才能克服。 最后要感谢老师和助教学长对于我的提问不厌其烦的解答!老师和学长帮助我们解决了很多问题,少走了许多弯路并最终成功完成预期目标。陈思奇 经过了三周的机电综合实训,我组成功完成了实训作品,达到了预期要求。在整个过程中,既有想法的顺利实现,也有意料之外的波折;既有已学知识的充分运用,也有思维定势形成的梏桎;既有团队精神的自然体现,也有思想冲突的正面碰撞。总之,这是收获颇丰的三周。实训一开始,我们组的分工安排得并不是十分明确,我们想当然地认为同一项工作两人共同完成会有效率上的提升,但是这样其实无形中大大增加了沟通的时间成本和精力消耗,尤其当两人的默契并没有经训练达到相当高的程度的时候,共同完成同一项复杂工作在时间紧张的任务周期中无疑是个灾难,所以对于一项任务整体,根据团队成员不同的特点合理拆分任务分配任务是一项十分重要也有一定难度的工作。设计和装配的过程总体来说还是比较有趣的,并且在使用SolidWorks模拟装配时我们配合地比较默契,很多实际装配时可能遇到的问题我们都提前想到并且尽量避免了,但也由于对新版本SolidWorks的不熟悉而遇到了一些问题,造成了时间的浪费,这正应了那句“工欲善其事,必先利其器”。在后续的编程过程中,我最大的体会就是图形化编程的确很不方便,虽然图形化模块集成了一些功能,但是实际编程过程中总是会遇到更多逻辑更复杂的细节问题,这些时候图形化编程在灵活性上的不足就充分暴露了出来,就整个编程过程而言我还是更倾向于传统代码编程。通过此次机电综合实训,加深了我对机电控制方面的兴趣,也让我的设计和编程能力得到了一定的锻炼,在此表达我对提供实训机会的自动化学院、认真指导我们的郭磊老师和宋原老师以及各位助教学长衷心的感谢。七、机器人现场运行截图八、 源程序#include Apps/SystemTask.huint8 SERVO_MAPPING10 = 2,8,1,7,6,4,3,5,9,10;int main() bool hw1 = 0; int i = 0; bool hit2 = 0; int a = 0; int b = 0; bool db = 0; bool hw0 = 0; MFInit(); MFInitServoMapping(&SERVO_MAPPING0,10); MFSetPortDirect(0x00000FE0); MFSetServoMode(2,0); MFSetServoMode(8,0); MFSetServoMode(1,0); MFSetServoMode(7,0); MFSetServoMode(6,0); MFSetServoMode(4,0); MFSetServoMode(3,0); MFSetServoMode(5,0); MFSetServoMode(9,0); MFSetServoMode(10,0); DelayMS(1000); /初态1 MFSetServoPos(2,687,350); MFSetServoPos(8,621,350); MFSetServoPos(1,171,350); MFSetServoPos(7,134,350); MFSetServoPos(6,730,350); MFSetServoPos(4,870,350); MFSetServoPos(3,350,350); MFSetServoPos(5,87,350); MFSetServoPos(9,526,350); MFSetServoPos(10,526,350); MFServoAction(); DelayMS(1000); while (db=0)&(b=0) /声音 db = MFGetDigiInput(4); /初态1 MFSetServoPos(2,687,1000); MFSetServoPos(8,621,1000); MFSetServoPos(1,171,1000); MFSetServoPos(7,134,1000); MFSetServoPos(6,730,1000); MFSetServoPos(4,870,1000); MFSetServoPos(3,350,1000); MFSetServoPos(5,87,1000); MFSetServoPos(9,526,1000); MFSetServoPos(10,626,1000); MFServoAction(); for (a=0;a13000;a+) /声音 db = MFGetDigiInput(4); /声音结果 if (db=1) /b+; b+; /初态1 MFSetServoPos(2,687,1000); MFSetServoPos(8,621,1000); MFSetServoPos(1,171,1000); MFSetServoPos(7,134,1000); MFSetServoPos(6,730,1000); MFSetServoPos(4,870,1000); MFSetServoPos(3,350,1000); MFSetServoPos(5,87,1000); MFSetServoPos(9,526,1000); MFSetServoPos(10,426,1000); MFServoAction(); for (a=0;a13000;a+) /声音 db = MFGetDigiInput(4); /声音结果 if (db=1) /b+; b+; DelayMS(330); /初态2 MFSetServoPos(2,483,512); MFSetServoPos(8,314,512); MFSetServoPos(1,375,512); MFSetServoPos(7,441,512); MFSetServoPos(6,526,512); MFSetServoPos(4,563,512); MFSetServoPos(3,554,512); MFSetServoPos(5,394,512); MFSetServoPos(9,526,512); MFSetServoPos(10,526,512); MFServoAction(); DelayMS(1000); for (a=0;a25000;a+) /声音 db = MFGetDigiInput(4); /声音结果 if (db=1) break ; /红外1输入 hw1 = MFGetDigiInput(1); /红外0输入 hw0 = MFGetDigiInput(0); /碰撞2输入 hit2 = MFGetDigiInput(2); /两红外均无障碍循环前进 while (hw0=1)&(hw1=1)&(db=0)&(hit2=1) /四足后移(右侧后蹬) MFSetServoPos(2,333,1000); MFSetServoPos(8,314,1000); MFSetServoPos(1,225,1000); MFSetServoPos(7,441,1000); MFSetServoPos(6,676,1000); MFSetServoPos(4,563,1000); MFSetServoPos(3,704,1000); MFSetServoPos(5,394,1000); MFSetServoPos(9,526,1000); MFSetServoPos(10,526,1000); MFServoAction(); for (a=0;a13000;a+) /声音 db = MFGetDigiInput(4); /声音结果 if (db=1) break ; /左后前迈1 MFSetServoPos(2,333,1000); MFSetServoPos(8,314,1000); MFSetServoPos(1,525,1000); MFSetServoPos(7,341,1000); MFSetServoPos(6,676,1000); MFSetServoPos(4,563,1000); MFSetServoPos(3,704,1000); MFSetServoPos(5,394,1000); MFSetServoPos(9,526,1000); MFSetServoPos(10,526,1000); MFServoAction(); for (a=0;a13000;a+) /声音 db = MFGetDigiInput(4); /声音结果 if (db=1) break ; /左后前迈2 MFSetServoPos(2,333,1000); MFSetServoPos(8,314,1000); MFSetServoPos(1,525,1000); MFSetServoPos(7,441,1000); MFSetServoPos(6,676,1000); MFSetServoPos(4,563,1000); MFSetServoPos(3,704,1000); MFSetServoPos(5,394,1000); MFSetServoPos(9,526,1000); MFSetServoPos(10,526,1000); MFServoAction(); for (a=0;a13000;a+) /声音 db = MFGetDigiInput(4); /声音结果 if (db=1) break ; /左前前迈1 MFSetServoPos(2,633,1000); MFSetServoPos(8,414,1000); MFSetServoPos(1,525,1000); MFSetServoPos(7,441,1000); MFSetServoPos(6,676,1000); MFSetServoPos(4,563,1000); MFSetServoPos(3,704,1000); MFSetServoPos(5,394,1000); MFSetServoPos(9,526,1000); MFSetServoPos(10,526,1000); MFServoAction(); for (a=0;a13000;a+) /声音 db = MFGetDigiInput(4); /声音结果 if (db=1) break ; /左前前迈2 MFSetServoPos(2,633,1000); MFSetServoPos(8,314,1000); MFSetServoPos(1,525,1000); MFSetServoPos(7,441,1000); MFSetServoPos(6,676,1000); MFSetServoPos(4,563,1000); MFSetServoPos(3,704,1000); MFSetServoPos(5,394,1000); MFSetServoPos(9,526,1000); MFSetServoPos(10,526,1000); MFServoAction(); for (a=0;a13000;a+) /声音 db = MFGetDigiInput(4); /声音结果 if (db=1) break ; /左侧后蹬复位打滑可尝试降速 MFSetServoPos(2,333,1000); MFSetServoPos(8,314,1000); MFSetServoPos(1,225,1000); MFSetServoPos(7,441,1000); MFSetServoPos(6,676,1000); MFSetServoPos(4,563,1000); MFSetServoPos(3,704,1000); MFSetServoPos(5,394,1000); MFSetServoPos(9,526,1000); MFSetServoPos(10,526,1000); MFServoAction(); for (a=0;a13000;a+) /声音 db = MFGetDigiInput(4); /声音结果 if (db=1) break ; /右后前迈1 MFSetServoPos(2,333,1000); MFSetServoPos(8,314,1000); MFSetServoPos(1,225,1000); MFSetServoPos(7,441,1000); MFSetServoPos(6,376,1000); MFSetServoPos(4,663,1000); MFSetServoPos(3,704,1000); MFSetServoPos(5,394,1000); MFSetServoPos(9,526,1000); MFSetServoPos(10,526,1000); MFServoAction(); for (a=0;a13000;a+) /声音 db = MFGetDigiInput(4); /声音结果 if (db=1) break ; /右后前迈2 MFSetServoPos(2,333,1000); MFSetServoPos(8,314,1000); MFSetServoPos(1,225,1000); MFSetServoPos(7,441,1000); MFSetServoPos(6,376,1000); MFSetServoPos(4,563,1000); MFSetServoPos(3,704,1000); MFSetServoPos(5,394,1000); MFSetServoPos(9,526,1000); MFSetServoPos(10,526,1000); MFServoAction(); for (a=0;a13000;a+) /声音 db = MFGetDigiInput(4); /声音结果 if (db=1) break ; /右前前迈1 MFSetServoPos(2,333,1000); MFSetServoPos(8,314,1000); MFSetServoPos(1,225,1000); MFSetServoPos(7,441,1000); MFSetServoPos(6,376,1000); MFSetServoPos(4,563,1000); MFSetServoPos(3,404,1000); MFSetServoPos(5,294,1000); MFSetServoPos(9,526,1000); MFSetServoPos(10,526,1000); MFServoAction(); for (a=0;a13000;a+) /声音 db = MFGetDigiInput(4); /声音结果 if (db=1) break ; /右前前迈2 MFSetServoPos(2,333,1000); MFSetServoPos(8,314,1000); MFSetServoPos(1,225,1000); MFSetServoPos(7,441,1000); MFSetServoPos(6,376,1000); MFSetServoPos(4,563,1000); MFSetServoPos(3,404,1000); MFSetServoPos(5,394,1000); MFSetServoPos(9,526,1000); MFSetServoPos(10,526,1000); MFServoAction(); for (a=0;a13000;a+) /声音 db = MFGetDigiInput(4); /声音结果 if (db=1) break ; /红外0输入 hw0 = MFGetDigiInput(0); /红外1输入 hw1 = MFGetDigiInput(1); /碰撞2输入 hit2 = MFGetDigiInput(2); /检测 while (hw1!=1)|(hw0!=1)&(db=0)&(hit2=1) /四足后移(右侧后蹬) MFSetServoPo

温馨提示

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

评论

0/150

提交评论