实验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.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,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。