第5讲:第四章-单片机输入接口与机器人触觉导航_第1页
第5讲:第四章-单片机输入接口与机器人触觉导航_第2页
第5讲:第四章-单片机输入接口与机器人触觉导航_第3页
第5讲:第四章-单片机输入接口与机器人触觉导航_第4页
第5讲:第四章-单片机输入接口与机器人触觉导航_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

SHENZHENDEPUSH.TECHLONOGYCO.,LTD单片机输入接口与机器人触觉导航第四章DEPUSH本讲1.单片机输入接口简介2.触觉传感器的安装及测试 与操作符、?操作符、if…else条件判断语句3.触觉导航策略实现 if...else...if多分支选择语句、关系和逻辑运算符4.机器人进入死区后的智能决策 if…else条件判断语句的嵌套DEPUSH单片机输入接口前两章:

1.机器人的根本动作,一种被动式的运动,不能自主决策;

2.单片机端口用作输出。本章及后续章节:

1.单片机端口用作输入,存储传感器采集的信息;

2.机器人自主导航。任何自动化系统均采用传感器采集信息。DEPUSH安装并测试机器人胡须安装胡须胡须硬件安装示意DEPUSH安装并测试机器人胡须搭建胡须电路胡须电路实物图胡须是一个机械式的、接地常开的单刀单掷开关。胡须接地〔GND〕是因为主板外围的镀金孔都连接到GND,而金属支架和螺丝钉提供电气连接给胡须。DEPUSH安装并测试机器人胡须获取胡须状态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;}DEPUSH安装并测试机器人胡须与操作符&与运算符“&〞的功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为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.00x0800001000DEPUSH安装并测试机器人胡须?操作符一般形式:表达式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;DEPUSH安装并测试机器人胡须测试胡须while(1){printf("右边胡须的状态:%d",P1_4state());printf("左边胡须的状态:%d\n",P2_3state());delay_nms(150);}DEPUSH通过胡须信息导航在机器人行走过程中,导航程序需要接受胡须输入信息,判断它的意义,调用一系列使机器人倒退、旋转朝不同方向行走的动作子函数。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();DEPUSH通过胡须信息导航关系和逻辑运算符关系和逻辑运算符概念中的关键是True〔真〕和Flase〔假〕。C语言中,非0为True,0为Flase。关系或逻辑运算符的表达式对Flase和True分别返回值0和1。关系和逻辑运算符含义>大于>=大于等于<小于<=小于等于==(与“=〞区别)等于!=不等于&&(与“&〞区别)与||或!非判断运算符两边表达式的值,真返回值1,假返回值0DEPUSH通过胡须信息导航例程:RoamingWithWhiskers.c

#include<BoeBot.h>#include<uart.h>intP1_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();}}DEPUSH机器人进入死区后的人工智能决策假设机器人进入了墙角,它将如何动作?……elseif(P1_4state()==0){Backward();Left_Turn();}elseif(P2_3state()==0){Backward();Right_Turn();}……右须碰到,后退再左拐左须碰到,后退再右拐困在墙角解决方案:程序记住每个胡须的前一次触动状态,并和当前触动状态比照。如果状态相反,就在交替总数上加1。如果这个交替总数超过了程序中预先给定的阀值,那么就该做一个“U〞型转弯,并且把胡须交替计数器复位。DEPUSH机器人进入死区后的人工智能决策if…else语句嵌套IF(condition1){Commandsforcondition1IF(condition2){Commandsforbothcondition2andcondition1}ELSE{Commandsforcondition1butnotcondition2}}ELSE{Commandsfornotcondition1}伪代码通常用来描述不依赖于计算机语言的算法。无论是哪种计算机语言,都必须能够描述人类知识的逻辑结构。在写条件判断算法时,经常用一种用于描述人类知识结构逻辑的伪代码来描述在计算机中如何实现这些逻辑算法,以使算法具有通用性。有了伪代码,用具体的语言来实现算法就很简单了。DEPUSHif(P1_4state()!=P2_3state()){if((old2!=P1_4state())&&(old3!=P2_3state())){counter=counter+1;old2=P1_4state();old3=P2_3state();if(counter>4){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;o

温馨提示

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

评论

0/150

提交评论