如何构建避免机器人的障碍

在本教程中,您将学习如何使用Arduino和三个HC-SR04超声波传感器构建障碍物检测和避免机器人。机器人是一种低成本的移动平台,具有两个驱动轮和后脚轮。它包括三个传感器,使其意识到环境中的障碍。

机器人在不知道周围环境的详细地图的情况下导航。如果在其路径中检测到障碍物,则机器人适应其速度以避免碰撞。如果周围环境没有障碍物,则机器人直到向前移动,直到在传感器的范围内检测到障碍物。

主要组件列表:

首先,我们需要定义从机器人将信息带入其系统的位置的输入。这种检测和避免机器人将有两种类型的输入。

1.最简单的输入是开关按钮,电机驱动器将打开和关闭电机驱动器和电池组的电源开/关按钮,以为Arduino板和传感器供电。

2.机器人通过传感器看到世界,并且是将信息带入控制系统的方式。传感器是机器人的第二个输入。传感器让机器人检测并响应周围环境。传感器使机器人能够安全地操作,自动检测障碍物,并动态改变其路线。

机器人使用传感器来测量机器人与障碍物之间的距离。如您所知,在家中,在一个家庭中是不同的尺寸和从多种类型的材料构建的不同物体。机器人可以像木椅或沙发床一样检测来自不同材料的物体。

一旦机器人检测到障碍物,算法就基于传感器的最后一个输出来计算替代路径。如果物体位于平台的左侧,则机器人动态地将其方向移动到右侧,直到传感器不再检测到障碍物。当传感器检测到右侧的屏障时相同的行为。

如果传感器在机器人中间检测到障碍物’S路径,算法随机地将其方向随机改变到左侧或向右,直到传感器不再检测到障碍物。

我们完成了定义自主机器人的输入类型。输入是必不可少的,输出是必不可少的。

障碍物检测和避免机器人具有一种输出。

3.移动机器人使用两个直流电机,一个用于平台的每一侧。每个电动机都是单独编程的,可以在任何方向上移动机器人以便转动和枢转。

要完全控制DC电机,我们必须控制速度和旋转方向。这可以通过组合用于控制速度的PWM方法和用于控制方向旋转的H桥电子电路来实现。

一旦我们完成了定义输入和输出,我们就进一步进一步并将障碍物检测和避退机器人分成简单的碎片,并逐个工作。

警告:您需要有关电路的知识,如电气工程概念 - 原理图,数据表,伏特以及连接电源的某些经验。我对个人财产的任何损失或损害负责。

对于此机器人,我使用灵活的架构,这意味着允许用户:

  • 添加多个传感器和组件。
  • 可以用其他传感器更换实际传感器。
  • 写得简单的软件。

第1部分:检测系统

此部分是将从传感器的原始数据转换为导航中使用的准确测量。

第2部分:导航

在这一部分中,我们构建算法来计算转向,以便在移动机器人的周围环境中找到无碰撞路径。

第3部分:驱动系统

在这部分中,我们正在使用导航中的数据来转向机器人。

一旦我们知道我们要做什么,我们就进一步努力使事情简单易懂。我们将首先解释如何执行此操作,构建电路并编写程序。

第1部分:检测系统

在此步骤中,我们必须提供机器人传感能力。我们必须创建一个具有查看周围环境的能力的检测系统。这超声波传感器对在内部和外部世界中感测周围环境非常有效。

除了使用单个超声波传感器来解决传感问题而不是使用三个传感器,而不是使用三个传感器来引导机器人在复杂的环境中。我们将在近距离观察任务中使用所有传感器。这是因为机器人将在内部工作,机动空间有限。例如,HC-SR04提供2cm至400cm的非接触式测量功能。使用传感器的最大范围,机器人将始终在房间内的路径中检测到一个物体,并不会移动。

1.1安装Arduino和HC-SR04超声波传感器

根据规格,HC-SR04的工作电压为5V。 Arduino有一个提供5V输出的接口引脚。

一个超声波传感器的工作电流为15mA。三个传感器将消耗45mA,即使它连接到5V电池组的USB端口,也可以由Arduino支持。 Arduino UNO的5V输出销适用于USB上的〜400 mA,并且当它与外部电源适配器一起使用时,多于双(〜900 mA)。

对于传感器和Arduino之间的连接,我使用跳线。

从一个5V引脚为传感器供电是一项挑战,需要切割和焊接电线。作为解决方法,您可以使用面包板将5V和接地引脚从Arduino连接到传感器的5V和接地引脚。

这是我为传感器供电的最终设置。红色/橙色电线是5V,黑色/蓝线用于地面。

三个超声波传感器的电源设置

三个超声波传感器的电源设置

在连接电源线后,我们进一步进一步并使用母线跳线电线连接触发器和回波引脚。

传感器留下:
Echo -> pin 2 Arduino
Trig -> pin 3 Arduino
传感器中心:
Echo -> pin 4 Arduino
Trig -> pin 5 Arduino
传感器右:
Echo -> pin 6 Arduino
Trig -> pin 7 Arduino

传感器和Arduino的最终设置:

设置3xHC-SR04,Arduino和5V电池组

设置3xHC-SR04,Arduino和5V电池组

一旦我们拥有连接到Arduino的所有传感器,就可以从这些中读取输出信号并将输出信号转换为厘米。

暂时,Arduino通过USB电缆连接到我的笔记本电脑。通过这种方式,我们可以将草图上传到Arduino并测试一切是否适用于设计。

第100行至109: 我们’re using the 纽工图书馆。通过每个传感器循环,当传感器ping循环完成时,返回读数;
第114行至115:如果接收到ping,则添加到数组测量的距离;

1.2应用过滤器以删除嘈杂,跳跃或不稳定的读数

我们的任务过滤传感器的输出包括几个步骤。我们应用过滤器以删除一些不需要的读数并留下更平滑的结果。然后使用卡尔曼滤波器删除跳转或不稳定的传感器的读数。

第127行至131:检查传感器的输出,如果值为0,则返回与0不同的最后一个存储值。与0不同的值与0不同。

第136行至138: 申请 卡尔曼过滤器到所有三个传感器。通过这种方式,我们去除跳跃或不稳定的传感器的读数;

1.3安装传感器

我使用的2WD机器人底盘大约是16厘米的宽度。这意味着传感器应检测机器人前面至少16厘米的障碍物。要清楚,让我们检查下面的草图。

传感器检测素描

传感器检测素描

检测机器人宽度覆盖的区域内的障碍不是最好的方法。我们增加了底盘左右一个厘米的感兴趣区域–这意味着在机器人面前18厘米的宽度。这意味着每个传感器应在机器人前面覆盖至少6厘米的宽度。

几周前,我写了一个关于的教程HC-SR04和Arduino。在教程中,您可以在5到100cm范围内找到HC-SR04的操作检测范围。在100cm时,传感器的操作检测范围为8厘米,这比我们所需要的更重要。做一些数学,我们发现最多75厘米的范围是我们需要检测我们机器人前面的所有障碍。

我们还在机器人前面的0到5厘米之间的盲区。沿机器人的下部前部的保险杠可以是帮助保护它的解决方案。但这部分不是本教程的主题,也不会被覆盖。

传感器架

传感器架

这是HC-SR04超声波传感器的3D印刷三元传感器支架。它有一个简单的设计,组装和拆卸实际。传感器非常稳定,不需要任何螺钉或粘合它们。此外,持有人将保护传感器并使机器人更好。

传感器支架使用M3螺钉和M3螺母固定在底盘上。

我们完成了检测系统。我们将传感器连接到Arduino并设计3D打印的三重传感器支架。我们已准备好使用传感器来检测和避免障碍物。

第2部分:导航

如果它可以使障碍物脱离,我们的机器人将非常有用。好吧,因为它’对于一个小型机器人来说,我们不可能编程机器人寻找无碰撞路径。

现实世界含有物体,门,应该被机器人检测和避免的家具。控制机器人运动的算法应该决定遵循哪个课程并将其转向。

2.1算法

1.首先,我们必须定义传感器的最小和最大范围。我们必须编写能够识别障碍物和其在盲区之间的位置的算法和该项目可接受的最大范围。
2.如果没有传感器检测到障碍物,则以最大速度向前延伸。
3.如果至少一个传感器检测到障碍物,则降低速度。
4.如果传感器检测到障碍物,再次检查。
5.如果至少一个传感器仍然检测到障碍物,请转到传感器’s state.
6.如果左传感器检测到障碍物,则向右移动直到传感器不变’t检测障碍物。
7.如果中心传感器检测到障碍物,则随机向左或向右移动,直到中心和左/右传感器没有检测到障碍物。
8.如果右侧传感器检测到障碍物,请向左移动,直到传感器未能’t检测障碍物。
9.如果所有传感器检测到障碍物,请向左或向左转或向右转,直到检测到自由障碍路径。

这种简单的障碍避免算法包括九个状态。它是一种不需要重型计算负荷的解决方案,并且易于实现。

第54行至64:定义机器人根据其条件的方式定义一组值;

第143行 :定义传感器的最小值和最大范围,如果障碍在范围内,则返回TRUE。

第150行至157:我们在Check_all案例中,我们检查障碍是否在传感器的范围内。如果没有传感器检测到障碍物,则以最大速度向前前进。如果至少一个传感器检测到障碍物,则开始计算用于降低机器人速度的毫秒,然后移动到Speed_decrease案例;

行160和161:我们以最大速度向前移动,检查所有传感器是否没有障碍物;

第165行至167:机器人在一定时间内以较低的速度向前移动。当时间传递时,在check_obstacle_position中输入。

第172行至191:如果路径是自由的,这意味着传感器有错误的读数,我们可以回到最大速度的导航。
如果其中一个传感器仍然检测到障碍物,那么我们检查所有传感器以确定障碍物相对于机器人的位置。如果来自机器人左侧的传感器检测到障碍物,那么我们就在左侧情况下。如果位于机器人中心的传感器正在检测到障碍物,那么我们就在中心盒中。如果正确的传感器检测到障碍物,我们就在正确的情况下。如果所有传感器检测到障碍物,那么机器人无法前进并进入,以便回来。

第194行至198:机器人以最小速度向左移动,以进行特定的时间。时间通过时,我们重新检查左传感器。如果传感器返回障碍物,则我们将留在左侧情况下并再次移动到左侧。如果传感器没有障碍物,则我们转到Check_all阶段。

第202行 :随机选择机器人进入的下一个案例之一。它可以左或右。

第206行至210:机器人以最小速度移动到右侧的特定时间。时间通过时,我们重新检查右传感器。如果传感器返回障碍物,那么我们将保持在正确的情况下并再次移动到右侧。如果传感器没有障碍物,则我们转到Check_all阶段。

第214行至217:所有传感器都返回障碍物。在这种情况下,机器人以较低的速度向后移动一定的时间,然后随机地移动到左或右。

第3部分:驱动系统

驱动系统应能够使机器人移动,具有由DC电动机产生的最大功率。两种直流电动机通常适用于在所有方向上驱动机器人。

由于这是一个2WD平台,通过滑动转向转动比4WD机器人更容易。使用差动驱动器(两个轮子加上一把脚轮),我们被允许通过在相反方向上转动电机来编程机器人以左或右转。

直流电动机具有调节电动机速度的齿轮机构,导致它们以最多100 rpm旋转车轮。电动机的工作电压范围为3至6V。 6V是DC电动机应该最佳地运行的标称电压。

两个轮子直径65毫米,并压配到DC电动机上的3mm D轴上。黑轮胎由软橡胶制成,用于增加牵引力。

使用L298N驱动器控制两个直流电动机。它是一种双全桥驱动器,可控制直流电机的速度和方向。电动机可以同时或一个接一个地驱动。我们采取了这种优势来在任何方向上驾驶机器人,以最小的努力为驱动系统。

L298N可以在5到35V的标称电压下驱动DC电动机,峰值电流高达2A。

电动机驱动器的输出是PWM信号(脉冲宽度调制),其快速切换输出电源,以减小供应到电动机的平均电压,精确控制电动机的旋转。

3.1将电机驱动器连接到电机和Arduino

驱动板有两个用于电机A和B的螺钉接线端子。我们将使用这两个端子连接直流电机。此外,我们将使用另一个螺钉接线端子,用于接地销和VM作为电机的电源。 GND和VMS端子应连接到6V电池组。

使用女性到男性跳线电线将驱动器引脚连接到Arduino引脚。
ENA -> pin 9
IN1 -> pin 8
IN2 -> pin 11
IN3 -> pin 12
IN4 -> pin 13
ENB -> pin 10
Ground screw terminal block -> pin Gnd Arduino (we use two power supply sources, and we have to share the ground between them)

根据您的驾驶板,引脚的放置之间可能存在较小的差异。

3.2转向机器人

一旦直流电动机连接到电机驱动器,并将电机驱动器连接到Arduino,让我们开始写草图以控制机器人的转向。

根据控制机器人的算法,我们需要降低电机的速度,将机器人向前移动,向后,左右移动。在我们的程序中,是每个操作的函数。

下载源代码

概括

我们完成了很长的教程。在本教程中,您学习了如何定义机器人的输入和输出,如何编写控制操作和机器人转向的算法。

在教程的第一部分,我们涵盖了机器人的功能规范。我们定义了两个输入和机器人的输出。然后我们通过安装传感器并以厘米以厘米转换读数来给机器人传感功能。应用过滤器,我们设法稳定并删除跳转或不稳定的传感器读数。

然后我们进一步进一步,在第二部分中,我们编写了控制机器人如何响应环境中的障碍的算法。

在第三部分中,我们通过减少电动机速度并根据算法的决定在一定方向上移动机器人来实现机器人的转向。

4评论» Write a comment

发表评论

您的电子邮件地址不会被公开。必需的地方已做标记*