2015-9-22 17:58:58 [显示全部楼层]
17337浏览
查看: 17337|回复: 11

DIY海盗船机器人系列教程 第2话——红外开关避障功能

[复制链接]
DIY海盗船系列 第2话 --- 红外开关避障功能

在完成基础功能后,我们对机器人来个升级,给它增加避障功能。避障功能,是机器人最基础的功能之一,也是机器人体现自主意识的第一步。避障机器人能够识别前方的障碍物,并避开前方障碍物。这里,我们选用到的是红外数字避障传感器,这是一款相当容易上手的传感器,非常适合初学者使用。该传感器可帮助机器人看到前方的物体。

硬件材料:
  • 3-80cm红外数字避障传感器  × 3
DIY海盗船机器人系列教程 第2话——红外开关避障功能图1
  • 红外接近开关支架 × 3
DIY海盗船机器人系列教程 第2话——红外开关避障功能图2




组装步骤:
找到硬件材料后,就可以开始组装了,组装不难,更着操作就行。

STEP 1: 摆放材料
先找到固定红外开关传感器的3个支架,及需要使用的M3×6MM的螺丝和螺母若干。
DIY海盗船机器人系列教程 第2话——红外开关避障功能图3
STEP 2: 固定红外支架
这里只需将3个红外开关传感器的支架用螺丝拧在上层板上即可。需要注意的一点是,三个支架之间不要间隔太近。否则在检测的时候会造成接收错误信号。
DIY海盗船机器人系列教程 第2话——红外开关避障功能图4
STEP 3: 安装红外传感器
先将一个固定环装到传感器上,将传感器从红外支架里往外穿过,并用另一个固定环将其固定住。同样方法安装另外两个。
DIY海盗船机器人系列教程 第2话——红外开关避障功能图5
DIY海盗船机器人系列教程 第2话——红外开关避障功能图6


硬件连接:

传感器安装完成后,先不要急着把上层板接上去,需要将传感器与Romeo BLE控制器连接。左边这张图显示的是三个传感器ABC在小车上对应的位置,分别对应数字口的10,9,8。,连接时只需留意线序是否正确即可。 安装完成后,固定上层板。
黄色 - 信号线,红色 – VCC, 绿色 – GND。
DIY海盗船机器人系列教程 第2话——红外开关避障功能图7

DIY海盗船机器人系列教程 第2话——红外开关避障功能图8

传感器调试:

红外接近开关是一种集发射与接收于一体的光电开关传感器。如果有信号,也就是前方有障碍物,传感器后侧指示灯亮的亮灭,检测距离可随传感器后侧的电位器进行调节,可调范围3-80cm。
下载代码前,需要对三个传感器的做调整,先插上USB线,给板子供电。下图白色圈出的位置可见有个一字螺丝,这个就是可用来调整检测距离。拿个小盒子(模拟障碍物),放在传感器探头前,找到传感器的探测点,一旦找到传感器上的指示灯会亮起。此时,可以拧转螺丝,调到一个合适的距离,推荐在15~20cm左右。
同样方法调整另外两个红外传感器,通常建议左右两侧的检测距离略大于中间的检测距离。
DIY海盗船机器人系列教程 第2话——红外开关避障功能图9

输入代码:
由于代码较长,所以这里就不全部显示出来,你可在软件包中找到Avoidance_IRSwitch.ino的代码,下载进去后即可。

DIY海盗船机器人系列教程 第2话——红外开关避障功能图10

下载完成后,你就可以看到小车的避障效果了。当然,如果你觉得检测距离还不是很满意,也可以做一些微调。直到能正常工作。玩过之后,我们就来简单看下避障原理以及学习下代码,便于你能更好的改造你的机器人!


避障原理:
通过下面a,b,c,d来简单看下如何通过三个传感器来实现避障。在前方没有障碍物的时候,小车前行(图a),一旦检测到前方有障碍物,先让小车后退(图b),然后执行左转(图c),当然这里你也可以右转。如果小车前方一直存在障碍物,小车将会一直执行后退左转,直到前方没有障碍物,小车保持前进。

DIY海盗船机器人系列教程 第2话——红外开关避障功能图11

前面分析的这个场景是小车正前方有障碍物。思考下,如果小车左前方有障碍,或者小车右前方有障碍物,可让小车如何执行?清楚原理之后,我们来看下代码。
当然,这样的避障方式不是唯一的,你也可以有更好的避障方式,可由你自己设定,如果你的逻辑非常紧密,完全可以写出更出色的代码,毫无疑问的可以从你的代码中表现出来。何不试试用自己的思维来写一段控制代码。看完代码回顾,你就能游刃有余的改代码了。


代码回顾:

基础功能重复部分就不说了,只说下避障部分的。
  1. int RightValue;    //Right line tractor sensor on Pin 8
  2. int MiddleValue;   //Middle line tractor sensor on Pin 9
  3. int LeftValue;     //Left line tractor sensor on Pin 10
  4. //reading 3 pins values of Line Tracking Sensor
  5. RightValue=digitalRead(8);  
  6. MiddleValue=digitalRead(9);
  7. LeftValue=digitalRead(10);<span style="color: rgb(56, 86, 35); font-family: 'Courier New'; font-size: 10.5pt; line-height: 1.5; text-indent: 21pt; background-color: rgb(255, 255, 255);"> </span>
复制代码
用三个变量RightValue,MiddleValue,LeftValue分别记录3个传感器读到的值,digitalRead(pin)函数就是用来读取数字口的值,不明白的可以查看下语法手册
红外数字避障传感器数字量传感器,当探头前方有障碍时输出低电平,无障碍物时输出高电平。
下面这段代码描述的就是避障原理中所说的那张情况 –- 正前方有障碍。三个传感器同时都检测到障碍物了,也就是输出值都为LOW时,小车先执行后退,再执行左转,前进。
  1. if(LeftValue==LOW && MiddleValue==LOW && RightValue==LOW ) {   
  2.     Robot.Speed (-200,-200);         //back off
  3.     delay(800);
  4.     Robot.Speed (-200,200);          //turn left
  5.     delay(400);
  6.     Robot.Speed (100,100);           //move forward
  7.   }
复制代码
  如果只有左侧传感器检测到障碍物,那么小车执行,后退,左转。
  1. if(LeftValue == LOW) {    //obstacle on the left side
  2.     Robot.Speed (-200,-200);    //back off
  3.     delay(400);
  4.     Robot.Speed (200,-200);    //turn right
  5.     delay(250);
  6.     Robot.Speed (100,100);    //move forward
  7.   }
复制代码
同样,如果只有右侧传感器检测到障碍物,那么小车执行,后退,右转。
  1. if(RightValue == LOW ){       //obstacle on the right side
  2.     Robot.Speed (-200,-200);     //back off
  3.     delay(400);
  4.     Robot.Speed (-200,200);     //turn left
  5.     delay(250);
  6.     Robot.Speed (100,100);      //move forward
  7. }
复制代码

最后,如果前面没有障碍物的话,小车正常前进。
  1. if(LeftValue==HIGH && MiddleValue==HIGH && RightValue==HIGH ) {   
  2.     Robot.Speed (150,150);           //move forward
  3. }
复制代码

代码中还有这么一段。
  1. if( MiddleValue == LOW){     //obstacle in middle
  2.     Robot.Speed (-150,-150);     //back off
  3.     delay(400);
  4.     Robot.Speed (-200,200);      //turn left
  5.     delay(300);
  6.     Robot.Speed (100,100);    //move forward
  7. }
复制代码

同样是前方有障碍物,和我们一开始说的三个传感器同时检测到的区别在于,这种情况下,前方障碍物相对远一点,小车后退的速度慢一点。
  1. Robot.Speed (-150,-150);     //back off
复制代码

这里,我们就用到通过Speed函数来调整速度了。根据代码的说明,能否自己尝试变换一下小车的速度,行动方向等等。


大改造:

代码就讲到这里,我们这里做的是一个避障机器人。其实,同样的传感器,改造一下就能成为跟踪机器人了。只是方式相反,这里是,检测到物体后避开,跟踪的话,则是检测到物体后,向物体方向靠近。想一下,给自己做个跟踪机器人。

PS:更多开源文件见附件Code啦~希望你能跟我一样做出一套自己的海盗船

丄帝De咗臂  高级技匠

发表于 2015-9-22 20:07:10

有空把我的海盗船也装起来写个贴子,哈哈
回复

使用道具 举报

hnyzcj  版主

发表于 2015-9-22 21:08:54

Jane的教程写的真好,以后来当老师吧
回复

使用道具 举报

hnyzcj  版主

发表于 2015-9-24 11:18:19

丄帝De咗臂 发表于 2015-9-22 20:07
有空把我的海盗船也装起来写个贴子,哈哈

借我玩玩。我真没有海盗船。
回复

使用道具 举报

丄帝De咗臂  高级技匠

发表于 2015-9-24 13:13:35

hnyzcj 发表于 2015-9-24 11:18
借我玩玩。我真没有海盗船。

我已经组装起来了
回复

使用道具 举报

Jane  高级技匠
 楼主|

发表于 2015-9-24 16:44:26

hnyzcj 发表于 2015-9-22 21:08
Jane的教程写的真好,以后来当老师吧

哈哈哈,好呀~你带我吗?
回复

使用道具 举报

Geemi  初级技匠

发表于 2015-12-30 16:10:26

jane老大爷写帖子,,观摩观摩
回复

使用道具 举报

Grey  中级技匠

发表于 2016-9-13 17:00:32

代码是不是有问题啊!点开是一个Htm文件
回复

使用道具 举报

vegeba  学徒

发表于 2017-11-30 09:32:52

好详细,还没开始装,现在有底了
回复

使用道具 举报

zjy_wg3613  学徒

发表于 2019-2-22 12:47:03

挺好玩的,不错的设计
回复

使用道具 举报

gada888  版主

发表于 2019-4-1 13:53:31

技术贴呀
回复

使用道具 举报

jzzgb  见习技师

发表于 2019-10-31 21:11:27

有趣哈
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail