雷竞技注册
项目

如何制作一个随墙机器人

2015年12月01日通过特拉维斯Fagerness

这是关于制造机器人的系列文章的最后一部分,机器人可以沿着线或墙走并避开障碍物!

让你的机器人沿着墙走!

相关文章

如何制作机器人:

第1部分:设计和原理图

第2部分:PCB设计

第3部分:测试硬件

第4部分:行追随者

第5部分:避免障碍

概述

这是关于我制造能做各种事情的机器人的经验的系列文章的第6部分。我想,如果能创造出一个只用一个烙铁就能轻松组装起来的机器人,那就太棒了。我对我的机器人做了以下要求:

  • 许多套件都很贵,所以它一定相对便宜。
  • 它必须易于组装,不需要特殊设备。
  • 它必须易于编程,无需复杂的IDE或程序员。
  • 它必须足够强大,具有可扩展性。
  • 用简单的电源就可以了。
  • 它应该能够沿着一条线或一堵墙,并避开障碍物。

在本文中,我将讨论如何对机器人进行编程,使其能够沿着墙走。

后壁

为了顺着墙走,你至少需要两个传感器(2比特信息)来处理机器人可能会遇到的四种情况。一个传感器必须在机器人的前面,第二个可以在机器人的左边或右边。你使用的传感器越多,你掌握的信息就越多,这样你就能更好地判断发生了什么。在这个例子中,我只使用了两个。机器人找不到墙,所以你必须把机器人放在墙旁边。如果你把它放在房间中间,它就会转个圈。

真值表

前面的传感器 正确的传感器 情况 行动
机器人正驶离墙壁。 回到墙边,向右转。
机器人离墙较远,但朝着墙或障碍物前进。 向左转,向后与墙平行。
机器人沿着墙走。 开车前进。
机器人在角落里。 转左。

为了工作,我必须添加代码,以硬左转。左急意味着我只转动右方向盘,所以机器人基本上原地转动,而不是一边转动一边继续前进。我不能像的追随者因为你不知道机器人离墙有多近。这是我选择的传感器的一个局限性,因为传感器根据表面的不同反射不同。此外,由于无法根据传感器来判断距离,因此逻辑设置为二进制。如果你知道距离,你可以添加额外的逻辑来根据距离改变速度,让机器人在房间里走得更快。实际上,我无法让传感器反射黑色表面,所以在视频中,你会看到我不得不在洗碗机前放置白色表面。基于音频的传感器就不会有这个问题。

编程

下面的草图执行逻辑:

  • 启动机器人驾驶员,等待5秒。这样你就有时间在机器人开始移动之前把它放在墙边。
  • 读取传感器
  • 使用if语句实现上面的真值表。
  • 每个语句执行与传感器配置相关联的操作。
  • 我让机器人比正常情况下更快地右转,这样机器人转弯时可以更急转弯。大多数墙角都是90度,所以快速转弯是有道理的。
robot_wall_follower
#include "robot.h" void setup() {Serial.begin(38400);以“引导”);rbt_init ();延迟(5000);rbt_move(前轮驱动,100);} uint16_t lleft、lmid lright;布尔wleft wmid,怀特;uint16_t avoid_count = 0;Void loop() {rbt_sns(&lleft,&lmid,&lright,&wleft,&wmid,&wright);/*if the wall is sensing, go forward * the wall is sensing if the right sensor is on but the mid * sensor is off. /*if the wall is sensing, if the right sensor is on but the mid * sensor is off。 */ if(wright && !wmid) { rbt_move(FWD,100); } /*likely going towards the wall * not sure how close so turn as fast * as we can */ if(wright && wmid) { rbt_move(HARD_LEFT,100); } /*going away from the wall * slowly turn back towards the wall */ if(!wright && !wmid) { rbt_move(RIGHT,130); } /*likely at a corner or coming in at an angle to the wall*/ if(!wright && wmid) { rbt_move(HARD_LEFT,100); } }

对hard left to robot.h和robot的更改。

robot.h

将HARD_LEFT添加到枚举中以确定方向。

/*机器人接口*/ typedef enum{LEFT, RIGHT, FWD, REV, BRAKE, HARD_LEFT,}direction_t;
robot.ino

在rbt_move()中为HARD_LEFT添加一个case。

案例HARD_LEFT: digitalWrite (BPHASE MOTOR_FWD);digitalWrite (APHASE MOTOR_FWD);analogWrite(为、速度);analogWrite (BEN, 0);打破;

厨房里的墙:

结论

在本文中,我展示了如何使用接近传感器来跟踪墙壁,以便在房间中导航。关于制造机器人的系列文章到此结束!该机器人能够自主地沿着一条线、一堵墙并避开障碍物。你能把它们组合成一个机器人来完成所有的工作吗?你也可以通过添加一个BLE模块来控制机器人,并从你的手机控制它!

robot_wall_follower.zip

3评论
  • zaintech 2016年1月15日,

    好…好努力工作。

    喜欢的。 回复
  • 年代
    SAMYAK 2018年6月04

    我如何能了解更多关于你的代码,因为我正试图建立类似的机器人

    喜欢的。 回复
    • RK37 2018年6月5日
      我们已经和本文的作者没有联系了,所以如果你的机器人项目需要一些帮助,我建议你在AAC论坛上发布你的问题。https://forum.allaboutcircuits.com/
      喜欢的。 回复