您好,欢迎访问三七文档
当前位置:首页 > 中学教育 > 高中教育 > 第4讲:第三章--C语言函数与机器人巡航控制
Slide1DEPUSHC语言函数与机器人巡航控制深圳市德普施科技有限公司SHENZHENDEPUSH.TECHLONOGYCO.,LTDC语言函数与机器人巡航控制第三章Slide2DEPUSHC语言函数与机器人巡航控制本讲摘要●对单片机编程使机器人做一些基本的巡航动作:向前,向后,左转,右转和原地旋转●编写程序使机器人由突然启动或停止变为逐步加速或减速运动●写一些执行基本巡航动作的函数,每一个函数都能够被多次调用●将复杂巡航运动记录在数组中,编写程序执行这些巡航运动Slide3DEPUSHC语言函数与机器人巡航控制基本巡航动作机器人及其前进方向的定义如果按照左图前进方向的定义,机器人向前走时:从机器人的左边看,它向前走时轮子是逆时针旋转的;从右边看另一个轮子则是顺时针旋转的。机器人方向定义Slide4DEPUSHC语言函数与机器人巡航控制基本巡航动作机器人向前巡航:RobotForwardThreeSeconds.c#includeBoeBot.h#includeuart.hintmain(void){intcounter;uart_Init();printf(ProgramRunning\n);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)串口初始化Slide5DEPUSHC语言函数与机器人巡航控制基本巡航动作其它巡航动作将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);Slide6DEPUSHC语言函数与机器人巡航控制基本巡航动作其它巡航动作——以某一轮子为支点旋转从前面向左旋转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);Slide7DEPUSHC语言函数与机器人巡航控制匀加速/减速运动现象:机器人每次启动和停止时,动作太快,几乎倾倒。原因:运动学——物体从零加速到最大运动速度时,时间越短,所需加速度就越大;牛顿定律——加速度越大,物体所爱的惯性力就越大。解决方法:采用匀加速/减速运动,让机器人速度渐渐增加/减小。作用:机器人运动更平稳,电机使用寿命更长。for(pulseCount=10;pulseCount=200;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);}for(pulseCount=200;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);}Slide8DEPUSHC语言函数与机器人巡航控制用函数调用简化运动程序机器人向前、向左、向右、向后运动——ForwardLeftRightBackward.c#includeBoeBot.h#includeuart.hintmain(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);}}Slide9DEPUSHC语言函数与机器人巡航控制用函数调用简化运动程序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=200{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);}}Slide10DEPUSHC语言函数与机器人巡航控制用函数调用简化运动程序函数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);}}Slide11DEPUSHC语言函数与机器人巡航控制用函数调用简化运动程序函数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);}Slide12DEPUSHC语言函数与机器人巡航控制用函数调用简化运动程序从函数定义角度:标准函数用户自定义函数从有无返回值角度:有返回值函数无返回值函数从主调函数与被调函数数据传送角度:无参函数有参函数intmain(void)voidForward(intPulseCount,intVelocity)printf(“…”)Slide13DEPUSHC语言函数与机器人巡航控制用函数调用简化运动程序只用一个函数简化程序由于机器人由两个轮子驱动,实际上两个轮子的不同速度组合控制着机器人的运动速度和方向,因此可以直接用两个车轮的速度作为参数,就可以将所有的机器人运动用一个函数来实现。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);}}Slide14DEPUSHC语言函数与机器人巡航控制用函数调用简化运动程序例程:MovementsWithOneFuntion.c#includeBoeBot.h#includeuart.hvoidMove(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);}Slide15DEPUSHC语言函数与机器人巡航控制高级主题――用数组建立复杂运动如果你要让机器人执行一个更长,更复杂的动作时用前面方法都很麻烦。下面要介绍的例子将用子函数中来实现每个简单的动作,将复杂的运动存储在数组中,然后在程序执行过程中读出并解码。避免了重复执行一长串子函数。1.字符常量字符常量是指用一对单引号括起来的一个字符。如‘a’,‘9’,‘!’。字符常量中的单引号只起定界作用并不表示字符本身。单引号中的字符不能是单引号(’)和反斜杠(\),它们特有的表示法在转义字符中介绍。字符型数据2.转义字符转义字符是一种特殊的字符常量,以反斜杠“\”开头,后跟一个或几个
本文标题:第4讲:第三章--C语言函数与机器人巡航控制
链接地址:https://www.777doc.com/doc-3987835 .html