为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

实验5 机器人触觉导航

2013-12-07 19页 pdf 190KB 26阅读

用户头像

is_392776

暂无简介

举报
实验5 机器人触觉导航 实验五、机器人触觉导航 内容: •安装并测试机器人的触须。 • 触须导航 • 逃离“死区” 5.1.1 元件清单及装配 • 元件清单: (1).须状金属丝 (2).平头M4-40螺丝钉 (3).½″圆形套管 (4).尼龙垫圈 (5).3-pin公-公接头 (6).220Ω电阻(红-红-棕) (7).10kΩ电阻(棕-黑-橙) 5.1 安装并测试机器人的触须 安装示意图 触须电路 #include #include int P1_6state(void) //获取 P1_6 的状态 { ret...
实验5 机器人触觉导航
实验五、机器人触觉导航 内容: •安装并测试机器人的触须。 • 触须导航 • 逃离“死区” 5.1.1 元件清单及装配 • 元件清单: (1).须状金属丝 (2).平头M4-40螺丝钉 (3).½″圆形套管 (4).尼龙垫圈 (5).3-pin公-公接头 (6).220Ω电阻(红-红-棕) (7).10kΩ电阻(棕-黑-橙) 5.1 安装并测试机器人的触须 安装示意图 触须电路 #include #include int P1_6state(void) //获取 P1_6 的状态 { return (P1&0x40)? 1:0; } int P2_3state(void) //获取 P2_3 的状态 { return (P2&0x08)? 1:0; } int main(void) { 5.1.2 例程: TestWhiskers.c uart_Init(); printf("WHISKER STARTES\n"); while(1) { printf("左边胡须的状态:%d ",P1_5state()); printf("右边胡须的状态:%d\n",P2_3state()); delay_nms(150); } } // the end of the main 5.1.3 实地测试 • 假设你以后不得不脱机测试胡须。由于调 试终端利用不到,你怎么办? ‡一种解决的办法是通过编程,让它发送一些 和其接收到的输入信号相符合的输出信号。我 们可以利用含有一对LED的电路和基于胡须的 输入让LED亮或灭的程序来实现。 LED指示电路 • 注意,在LED实验中,如果你测试过上图的连接方法,你 会发现LED亮度不那么让人满意,你可以采用另一种电路 。 5.2 触须导航 • 在前面的实验中,编程来检测胡须是否被触动。 在本实验中,利用这些信息对宝贝车导航。在宝 贝车行走过程中,如果有胡须被触动,那就意味 着碰到了什么。导航程序需要接受这些输入信息 ,判断它的意义,调用一系列使宝贝车倒退、旋 转并朝不同的方向行走的动作子函数。 †注意动作的先后顺序,比如,左侧触须碰到障碍物, 相应的I/O检测到低电平,此时应先后退,然后右转 †根据实地的测试情况,可以灵活改变左转、右转、后 退、前进的距离 可能的情况 • 左右皆等于零(“=0”示触墙); • 左=0&&右≠0; • 左≠ 0&&右= 0; • 其他 例程:RoamingWithWhiskers.c • 为了实现这些,宝贝车需要编程来做出选择。C语 言中有个条件判断语句,其句法是: if(condition) {…} else if(condition) {…} else {…} 句中“…”的意思是,你可以在关键词之间放置一个 代码段(由一条或多条语句组成)。 下面的例程会基于胡须的输入做出选择,然后调用 相关子程序使宝贝车采取行动。子程序同你在实 验三中用到的类似。 if((P1_5state()==0)&&(P2_3state()==0)) //两个胡须同时检测到障碍物时,后退,再向左180度 { Back_Up(); Turn_Left(); Turn_Left(); } else if(P1_5state()==0) //左边胡须检测到障碍物时,后退,再向右转 90 度 { Back_Up(); Turn_Right(); } else if(P2_3state()==0) //右边胡须检测到障碍物时,后退,再向左转 90 度 { Back_Up(); Turn_Left(); } else //没有胡须检测到障碍物时,向前走 Forward(); 5.3 当小车卡住时的人工智能和判断 • 现在来预想这种情况:宝贝车进入墙角时 会如何动作---假设左胡须触墙,于是它右 转。当小车再向前行走,右胡须触墙,于 是左转。然后它又前进又会碰到左墙,再 次碰到右墙…等,你会发现这是一个死循 环。 †小车在无人干预的情况下能够走出这个困境 吗? • 这种情况下,如果小车有“记忆”的能力,能够记 住前面几次的探测情况,那么,就可以判断是否 陷入死角了。 • 对于人来讲,这是很容易的,比如,不在同一个 地方跌倒两次,不被同一块石头绊倒两次…等等 ,人能够记住以前发生的事情,并作为经验或资 料,指导自己现在或将来的行为。 • 好了,小车可以做到吗? 小车可以“存储”信息! • 可以修改RoamingWithWhiskers.c来解决这个问题 。技巧是计下胡须交替触动的总次数。 • 技巧的重要的一点是程序必须记住每个胡须在上 次触动时处于什么状态。它必须和当前触动时的 状态对比。如果状态相反,就在总数上加1。如果 这个总数超过了程序中预先给定的阀值,那么就 该做一个“U”型转弯,并且把胡须交替计数器复位 。 • 下面这个例程依赖于if…else嵌套语句来实现。换 句话说,程序检查一种条件,如果该条件成立( 条件为真),则再检查包含于这个条件之内的另 一个条件。这是一个伪码例程说明嵌套语句用法 。 IF (condition1) { Commands for condition1; IF(condition2) { Commands for both condition2 and condition1; } ELSE { Commands for condition1 but not condition2; } } ELSE { Commands for not condition1; } if(P1_5state()!=P2_3state()) { if((old2!=P1_5state())&&(old3!=P2_3state())) { counter=counter+1; old2=P1_5state(); old3=P2_3state(); if(counter>4) { counter=1; Backward();//向后 Left_Turn();//向左 Left_Turn();//向左 } } else counter=1; } 实验五、机器人触觉导航 5.1.1 元件清单及装配 幻灯片编号 3 幻灯片编号 4 幻灯片编号 5 5.1.3 实地测试 LED指示电路 5.2 触须导航 可能的情况 例程:RoamingWithWhiskers.c 幻灯片编号 11 幻灯片编号 12 5.3 当小车卡住时的人工智能和判断 幻灯片编号 14 幻灯片编号 15 幻灯片编号 16 幻灯片编号 17 幻灯片编号 18 幻灯片编号 19
/
本文档为【实验5 机器人触觉导航】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索