所有关于电路
项目

如何建立一个wall - follow - up机器人

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(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); } }

改变需要硬左机器人。h和机器人。

robot.h

向enum中添加HARD_LEFT。

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

在rbt_move()中添加HARD_LEFT的大小写。

案例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/
      喜欢的。 回复