您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 综合/其它 > 第5讲:第四章--单片机输入接口与机器人触觉导航
Slide1DEPUSH单片机输入接口与机器人触觉导航深圳市德普施科技有限公司SHENZHENDEPUSH.TECHLONOGYCO.,LTD单片机输入接口与机器人触觉导航第四章Slide2DEPUSH单片机输入接口与机器人触觉导航本讲摘要1.单片机输入接口简介2.触觉传感器的安装及测试与操作符、?操作符、if…else条件判断语句3.触觉导航策略实现if...else...if多分支选择语句、关系和逻辑运算符4.机器人进入死区后的智能决策if…else条件判断语句的嵌套Slide3DEPUSH单片机输入接口与机器人触觉导航单片机输入接口前两章:1.机器人的基本动作,一种被动式的运动,不能自主决策;2.单片机端口用作输出。本章及后续章节:1.单片机端口用作输入,存储传感器采集的信息;2.机器人自主导航。任何自动化系统均采用传感器采集信息。Slide4DEPUSH单片机输入接口与机器人触觉导航安装并测试机器人胡须安装胡须胡须硬件安装示意Slide5DEPUSH单片机输入接口与机器人触觉导航安装并测试机器人胡须搭建胡须电路胡须电路实物图胡须是一个机械式的、接地常开的单刀单掷开关。胡须接地(GND)是因为主板外围的镀金孔都连接到GND,而金属支架和螺丝钉提供电气连接给胡须。Slide6DEPUSH单片机输入接口与机器人触觉导航安装并测试机器人胡须获取胡须状态I/O口监测10K电阻上的电压变化:1.胡须没被触动,电压为5V,输入为12.胡须被触动,电压为0,输入0intP1_4state(void)//获取P1_4的状态,右胡须{return(P1&0x10)?1:0;}intP2_3state(void)//获取P2_3的状态,左胡须{return(P2&0x08)?1:0;}Slide7DEPUSH单片机输入接口与机器人触觉导航安装并测试机器人胡须与操作符&与运算符“&”的功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1,否则为0。如整数7与12相与:00000111(7的二进制)&00001100(12的二进制)=00000100(结果为4)P1&0x10:取P1.4P1P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.00x1000010000P2&0x08:取P2.3P2P2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.00x0800001000Slide8DEPUSH单片机输入接口与机器人触觉导航安装并测试机器人胡须?操作符一般形式:表达式1?表达式2:表达式3先求解表达式1,如果非0(真),则求解表达式2,并把表达式2的结果作为整个条件表达式的值;如果表达式1的值为0(假),则求解表达式3,并把表达式3的值作为整个条件表达式的值。return(P1&0x10)?1:0;if(P1&0x10)return1;elsereturn0;if…else语句是条件判断语句,它根据判定的结果(真或假)决定执行给出的两种操作之一。if(表达式)语句1;else语句2;Slide9DEPUSH单片机输入接口与机器人触觉导航安装并测试机器人胡须测试胡须while(1){printf(右边胡须的状态:%d,P1_4state());printf(左边胡须的状态:%d\n,P2_3state());delay_nms(150);}Slide10DEPUSH单片机输入接口与机器人触觉导航通过胡须信息导航在机器人行走过程中,导航程序需要接受胡须输入信息,判断它的意义,调用一系列使机器人倒退、旋转朝不同方向行走的动作子函数。if…else…if多分支选择语句if(表达式1)语句1;elseif(表达式2)语句2;…elseif(表达式m)语句m;else语句n;if((P1_4state()==0)&&(P2_3state()==0)){Backward();Left_Turn();Left_Turn();}elseif(P1_4state()==0){Backward();Left_Turn();}elseif(P2_3state()==0){Backward();Right_Turn();}elseForward();Slide11DEPUSH单片机输入接口与机器人触觉导航通过胡须信息导航关系和逻辑运算符关系和逻辑运算符概念中的关键是True(真)和Flase(假)。C语言中,非0为True,0为Flase。关系或逻辑运算符的表达式对Flase和True分别返回值0和1。关系和逻辑运算符含义大于=大于等于小于=小于等于==(与“=”区别)等于!=不等于&&(与“&”区别)与||或!非判断运算符两边表达式的值,真返回值1,假返回值0Slide12DEPUSH单片机输入接口与机器人触觉导航通过胡须信息导航例程:RoamingWithWhiskers.c#includeBoeBot.h#includeuart.hintP1_4state(void){return(P1&0x10)?1:0;}intP2_3state(void){return(P2&0x08)?1:0;}…………intmain(void){…………while(1){if((P1_4state()==0)&&(P2_3state()==0)){Backward();Left_Turn();Left_Turn();}elseif(P1_4state()==0){Backward();Left_Turn();}elseif(P2_3state()==0){Backward();Right_Turn();}elseForward();}}Slide13DEPUSH单片机输入接口与机器人触觉导航机器人进入死区后的人工智能决策假如机器人进入了墙角,它将如何动作?……elseif(P1_4state()==0){Backward();Left_Turn();}elseif(P2_3state()==0){Backward();Right_Turn();}……右须碰到,后退再左拐左须碰到,后退再右拐困在墙角解决方案:程序记住每个胡须的前一次触动状态,并和当前触动状态对比。如果状态相反,就在交替总数上加1。如果这个交替总数超过了程序中预先给定的阀值,那么就该做一个“U”型转弯,并且把胡须交替计数器复位。Slide14DEPUSH单片机输入接口与机器人触觉导航机器人进入死区后的人工智能决策if…else语句嵌套IF(condition1){Commandsforcondition1IF(condition2){Commandsforbothcondition2andcondition1}ELSE{Commandsforcondition1butnotcondition2}}ELSE{Commandsfornotcondition1}伪代码通常用来描述不依赖于计算机语言的算法。无论是哪种计算机语言,都必须能够描述人类知识的逻辑结构。在写条件判断算法时,经常用一种用于描述人类知识结构逻辑的伪代码来描述在计算机中如何实现这些逻辑算法,以使算法具有通用性。有了伪代码,用具体的语言来实现算法就很简单了。Slide15DEPUSH单片机输入接口与机器人触觉导航if(P1_4state()!=P2_3state()){if((old2!=P1_4state())&&(old3!=P2_3state())){counter=counter+1;old2=P1_4state();old3=P2_3state();if(counter4){counter=1;Backward();Left_Turn();Left_Turn();}}elsecounter=1;}机器人进入死区后的人工智能决策例程:EscapingCorners.c……intcounter;//存储交替探测的次数intold2=1;//存储右胡须旧状态值intold3=0;//存储左胡须旧状态值……counter=1;……为什么old2和old3赋的初值不一样?因为程序总是对比交替触动的部分,或者P1_4state()==0,或者P2_3state()==0。011001old2=0;old3=1counter=2100110counter=3old2=1;old3=0Slide16DEPUSH单片机输入接口与机器人触觉导航本章小结●接触型传感器作为输入反馈与C51单片机的编程实现;●C语言条件判断语句的使用;●C语言的各种运算符的使用,包括位运算符、关系逻辑运算符以及?运算符等;●机器人的触觉导航策略的实现;●条件判断语句的嵌套与机器人的人工智能决策等。
本文标题:第5讲:第四章--单片机输入接口与机器人触觉导航
链接地址:https://www.777doc.com/doc-47386 .html