已阅读5页,还剩18页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
DEPUSH,C语言函数与机器人巡航控制,深圳市德普施科技有限公司SHENZHENDEPUSH.TECHLONOGYCO.,LTD,C语言函数与机器人巡航控制,第三章,DEPUSH,C语言函数与机器人巡航控制,本讲摘要,对单片机编程使机器人做一些基本的巡航动作:向前,向后,左转,右转和原地旋转编写程序使机器人由突然启动或停止变为逐步加速或减速运动写一些执行基本巡航动作的函数,每一个函数都能够被多次调用将复杂巡航运动记录在数组中,编写程序执行这些巡航运动,DEPUSH,C语言函数与机器人巡航控制,基本巡航动作,机器人及其前进方向的定义,如果按照左图前进方向的定义,机器人向前走时:从机器人的左边看,它向前走时轮子是逆时针旋转的;从右边看另一个轮子则是顺时针旋转的。,机器人方向定义,DEPUSH,C语言函数与机器人巡航控制,基本巡航动作,机器人向前巡航:RobotForwardThreeSeconds.c,#include#includeintmain(void)intcounter;uart_Init();printf(ProgramRunningn);for(counter=0;counter130;counter+)/运行3秒;循环控制条件决定机器人运行时间。P1_1=1;delay_nus(1700);P1_1=0;/左轮逆时针,全速。P1_0=1;delay_nus(1300);P1_0=0;/右轮顺时针,全速。delay_nms(20);,delay_nus(unsignedintn)delay_nms(snsignedintn),串口初始化,DEPUSH,C语言函数与机器人巡航控制,基本巡航动作,其它巡航动作,将delay_nus函数的参数n以不同的值组合就可以使机器人以其它的方式运行,向后行走,P1_1=1;delay_nus(1300);P1_1=0;/左轮顺时针P1_0=1;delay_nus(1700);P1_0=0;/右轮逆时针delay_nms(20);,原地左转,P1_1=1;delay_nus(1300);P1_1=0;/左轮顺时针P1_0=1;delay_nus(1300);P1_0=0;/右轮顺时针delay_nms(20);,原地右转,P1_1=1;delay_nus(1700);P1_1=0;/左轮逆时针P1_0=1;delay_nus(1700);P1_0=0;/右轮逆时针delay_nms(20);,DEPUSH,C语言函数与机器人巡航控制,基本巡航动作,其它巡航动作以某一轮子为支点旋转,从前面向左旋转,P1_1=1;delay_nus(1500);P1_1=0;/左轮静止P1_0=1;delay_nus(1300);P1_0=0;/右轮顺时针delay_nms(20);,从前面向右旋转,P1_1=1;delay_nus(1700);P1_1=0;/左轮逆时针P1_0=1;delay_nus(1500);P1_0=0;/右轮静止delay_nms(20);,从后面向左旋转,P1_1=1;delay_nus(1500);P1_1=0;/左轮静止P1_0=1;delay_nus(1700);P1_0=0;/右轮逆时针delay_nms(20);,从后面向右旋转,P1_1=1;delay_nus(1300);P1_1=0;/左轮顺时针P1_0=1;delay_nus(1500);P1_0=0;/右轮静止delay_nms(20);,DEPUSH,C语言函数与机器人巡航控制,匀加速/减速运动,现象:机器人每次启动和停止时,动作太快,几乎倾倒。,原因:运动学物体从零加速到最大运动速度时,时间越短,所需加速度就越大;牛顿定律加速度越大,物体所爱的惯性力就越大。,解决方法:采用匀加速/减速运动,让机器人速度渐渐增加/减小。,作用:机器人运动更平稳,电机使用寿命更长。,for(pulseCount=10;pulseCount=0;pulseCount=pulseCount-10)P1_1=1;delay_nus(1500+pulseCount);P1_1=0;P1_0=1;delay_nus(1500-pulseCount);P1_0=0;delay_nms(20);,DEPUSH,C语言函数与机器人巡航控制,用函数调用简化运动程序,机器人向前、向左、向右、向后运动ForwardLeftRightBackward.c,#include#includeintmain(void)intcounter;printf(ProgramRunning!n);for(counter=1;counter=65;counter+)/前进P1_1=1;delay_nus(1700);P1_1=0;P1_0=1;delay_nus(1300);P1_0=0;delay_nms(20);for(counter=1;counter=26;counter+)/左转P1_1=1;delay_nus(1300);P1_1=0;P1_0=1;delay_nus(1300);P1_0=0;delay_nms(20);,for(counter=1;counter=26;counter+)/右转P1_1=1;delay_nus(1700);P1_1=0;P1_0=1;delay_nus(1700);P1_0=0;delay_nms(20);for(counter=1;counter=65;counter+)/后退P1_1=1;delay_nus(1300);P1_1=0;P1_0=1;delay_nus(1700);P1_0=0;delay_nms(20);,DEPUSH,C语言函数与机器人巡航控制,用函数调用简化运动程序,voidForward(void)inti;for(i=1;i=65;i+)P1_1=1;delay_nus(1700);P1_1=0;P1_0=1;delay_nus(1300);P1_0=0;delay_nms(20);,函数voidForward(void),voidForward(intPulseCount,intVelocity)/0Velocity=200inti;for(i=1;i=PulseCount;i+)P1_1=1;delay_nus(1500+Velocity);P1_1=0;P1_0=1;delay_nus(1500-Velocity);P1_0=0;delay_nms(20);,DEPUSH,C语言函数与机器人巡航控制,用函数调用简化运动程序,函数voidLeft(intPulseCount,intVelocity),voidLeft(intPulseCount,intVelocity)inti;for(i=1;i=PulseCount;i+)P1_1=1;delay_nus(1500-Velocity);P1_1=0;P1_0=1;delay_nus(1500-Velocity);P1_0=0;delay_nms(20);,函数voidRight(intPulseCount,intVelocity),voidRight(intPulseCount,intVelocity)inti;for(i=1;i=PulseCount;i+)P1_1=1;delay_nus(1500+Velocity);P1_1=0;P1_0=1;delay_nus(1500+Velocity);P1_0=0;delay_nms(20);,DEPUSH,C语言函数与机器人巡航控制,用函数调用简化运动程序,函数voidBackward(intPulseCount,intVelocity),voidBackward(intPulseCount,intVelocity)inti;for(i=1;i=PulseCount;i+)P1_1=1;delay_nus(1500-Velocity);P1_1=0;P1_0=1;delay_nus(1500+Velocity);P1_0=0;delay_nms(20);,主函数intmain(void),intmain(void)uart_Init();printf(ProgramRunning!n);Forward(65,200);Left(26,200);Right(26,200);Backward(65,200);,DEPUSH,C语言函数与机器人巡航控制,用函数调用简化运动程序,从函数定义角度:标准函数用户自定义函数,从有无返回值角度:有返回值函数无返回值函数,从主调函数与被调函数数据传送角度:无参函数有参函数,intmain(void)voidForward(intPulseCount,intVelocity)printf(“”),DEPUSH,C语言函数与机器人巡航控制,用函数调用简化运动程序,只用一个函数简化程序,由于机器人由两个轮子驱动,实际上两个轮子的不同速度组合控制着机器人的运动速度和方向,因此可以直接用两个车轮的速度作为参数,就可以将所有的机器人运动用一个函数来实现。,Forward(65,200);Left(26,200);Right(26,200);Backward(65,200);,voidMove(intcounter,intPC1_pulseWide,intPC0_pulseWide)inti;for(i=1;i=counter;i+)P1_1=1;delay_nus(PC1_pulseWide);P1_1=0;P1_0=1;delay_nus(PC0_pulseWide);P1_0=0;delay_nms(20);,DEPUSH,C语言函数与机器人巡航控制,用函数调用简化运动程序,例程:MovementsWithOneFuntion.c,#include#includevoidMove(intcounter,intPC1_pulseWide,intPC0_pulseWide)inti;for(i=1;i=counter;i+)P1_1=1;delay_nus(PC1_pulseWide);P1_1=0;P1_0=1;delay_nus(PC0_pulseWide);P1_0=0;delay_nms(20);,intmain(void)uart_Init();printf(ProgramRunning!n);Move(65,1700,1300);Move(26,1300,1300);Move(26,1700,1700);Move(65,1300,1700);,DEPUSH,C语言函数与机器人巡航控制,高级主题用数组建立复杂运动,如果你要让机器人执行一个更长,更复杂的动作时用前面方法都很麻烦。下面要介绍的例子将用子函数中来实现每个简单的动作,将复杂的运动存储在数组中,然后在程序执行过程中读出并解码。避免了重复执行一长串子函数。,1.字符常量,字符常量是指用一对单引号括起来的一个字符。如a,9,!。字符常量中的单引号只起定界作用并不表示字符本身。单引号中的字符不能是单引号()和反斜杠(),它们特有的表示法在转义字符中介绍。,字符型数据,2.转义字符,转义字符是一种特殊的字符常量,以反斜杠“”开头,后跟一个或几个字符。通常使用转义字符表示ASCII码字符集中不可打印的控制字符和特定功能的字符,如用于表示字符常量的单撇号(),用于表示字符串常量的双撇号(“)和反斜杠()等。,DEPUSH,C语言函数与机器人巡航控制,高级主题用数组建立复杂运动,ASCII是美国标准信息交换码(AmericanStandardCodeforInformationInterchange)的缩写,用来制订计算机中每个符号对应的代码,这也叫做计算机的内码(code)。广义地讲,语言字符集中的任何一个字符均可用转义字符来表示,例如大写A的ASCII码是65(101,x41),小写a则是97(141,x61)。,4.字符变量,字符变量用来存放字符变量,注意只能存放一个字符。字符变量的定义形式如下:charc1,c2;它表示c1和c2为字符变量,各放入一个字符。因此可以用下面的语句对它们赋值:c1=a;c2=A;,DEPUSH,C语言函数与机器人巡航控制,高级主题用数组建立复杂运动,数组,在程序设计中,为了处理方便,可以把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。一维数组的定义方式:类型说明符数组名常量表达式;初始化数组:类型说明符数组名常量表达式=值,值,值charNavigation10=F,L,F,F,R,B,L,B,B,Q;数组元素引用:数组名下标Navigation0、Navigation1Navigation9,字符串和字符串结束标志,字符串常量是指用一对双引号括起来的一串字符。如“CHINA”,“DEPUSH”。双引号只起定界作用。双引号中的字符串不能是双引号(“)和反斜杠(),它们特有的表示法在转义字符中介绍。在语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串。存储时,系统自动在字符串的末尾自动加一个“串结束标志”“0”,因此,长度为n字符的字符串常量在内存中占有n+1个字节的存储空间。用字符串的方式初始化数组:charNavigation10=“FLFFRBLBBQ”;或charNavigation10=“FLFFRBLBBQ”,DEPUSH,C语言函数与机器人巡航控制,高级主题用数组建立复杂运动,例程:NavigationWithSwitch.c,intmain(void)charNavigation10=F,L,F,F,R,B,L,B,B,Q;intaddress=0;uart_Init();printf(ProgramRunning!n);,while(Navigationaddress!=Q)switch(Navigationaddress)caseF:Forward();break;caseL:Left_Turn();break;caseR:Right_Turn();break;caseB:Backward();break;address+;,用字符数组存储运动动作用switch语句解释这些动作,DEPUSH,C语言函数与机器人巡航控制,高级主题用数组建立复杂运动,switch语句条件控制语句,多分支选择语句,一般形式为:switch(表达式)case常量表达式1:语句1;break;case常量表达式2:语句2;break;case常量表达式n:语句n;break;default:语句n+1;break;,常量表达式的值必须是整型或字符型各语句序列允许有多条语句,switch(Navigationaddress)caseF:Forward();break;caseL:Left_Turn();break;caseR:Right_Turn();break;caseB:Backward();break;,DEPUSH,C语言函数与机器人巡航控制,高级主题用数组建立复杂运动,程序执行过程,第一次循环:address=0Navigationaddress=Navigation0=Fwhile(Navigationaddress!=Q)/F!=Qswitch(Navigationaddress)/switch(F)caseF:Forward();break;address+;/address=1,charNavigation10=F,L,F,F,R,B,L,B,B,Q;,第二次循环:address=1Navigationaddress=Navigation1=Lwhile(Navigationaddress!=Q)/L!=Qswitch(Navigationaddress)/switch(L)caseL:Left_Turn();break;address+;/address=2,DEPUSH,C语言函数与机器人巡航控制,高级主题用数组建立复杂运动,程序执行过程,charNavigation10=F,L,F,F,R,B,L,B,B,Q;,第九次循环:address=8Navigationaddress
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年在线视频直播平台开发项目可行性研究报告及总结分析
- 2025年健康食品市场趋势与产品开发可行性研究报告及总结分析
- 2025年智慧能源管理系统建设可行性研究报告及总结分析
- 2025年数字化营销平台研发项目可行性研究报告及总结分析
- 2025年河北省职业院校(高职)智能电梯装配调试与检验技能大赛考试题库 含答案
- 2025年粮食产销合同
- 无人机驾驶员驾照考试题库审定版
- 2025年(高级)连锁经营管理师资格考试复习试题 含答案
- 2025年乡村振兴与生态农业项目可行性研究报告及总结分析
- 2025年低碳出行方案推广可行性研究报告及总结分析
- JTT 633-2005 汽车悬架转向系间隙检查仪标准
- 叠氮化钠-化学品安全技术说明书中文MSDS(完整版)
- 药物外渗的应急预案及处理
- 改性聚苯醚行业发展预测分析
- 中国各民族建筑风格英文介绍
- 六年级上册科学全册知识点(新改版苏教版)
- 大力弘扬新时代斗争精神PPT怎样弘扬新时代斗争精神PPT课件(带内容)
- 超市店长工作计划总结 超市店长年度工作计划
- 2023学年完整公开课版闽菜1
- 设备采购技术服务方案
- 安全监督先进个人主要事迹范文七篇
评论
0/150
提交评论