摘要:本文介绍如何使用超声波传感器和舵机实现小车的自动避障功能
智能小车之所以冠以“智能”的标签,就是因为它不应该是一个只能朝前行走的小车,而是要能够自主“决策”该怎么走,可以按照事先既定的规则,自主的行走。而实现自主行走的前提是要能“感知”周边的世界,根据周边世界的变化,做出下一步的行走决策。
从今天开始,就来借助超声波传感器实现一个可以自动躲避障碍物的智能小车。在前面的文章中已经介绍了超声波传感器,这个传感器的作用是可以测量前边障碍物与传感器之间的距离,本节正式利用了这个功能。但是,仅有这个功能还是不够的,还需要利用之前学习的舵机来控制超声波传感器的方向,这样就可以判断出周边各个方向障碍物的距离了。
使用超声波传感器来识别障碍物的距离,只是实现避障小车的一种方法。这种方法也有着其自身的缺点,就是当小车的超声波传感器与障碍物的反射面的夹角小于45度的时候,测量距离的功能就不那么灵敏了,这就导致小车会出现判断错误的情况。同样的,如果障碍物的反射面过小,也会导致无法获得足够的反射声波而无法得到正确的障碍物距离。这两点在布置测量环境和调试小车的过程中要特别的注意。
针对以上的缺陷,除了在程序上进行一些响应的容错处理外,后边也会增加一些其他的传感器来辅助避障功能的实现,例如常用的红外传感器、激光测距传感器等。
下面就来总结一下智能避障小车的基本原理。首先,利用安装在车头的超声波传感器测量前方障碍物的距离,如果距离大于停止距离,那么就驱动小车向前行走,在行走的同时,不断的测量前方障碍物的距离,一旦与前方障碍物的距离小于停车距离,那么立刻停止小车的运动,然后再测量左右两侧障碍物的距离,然后转向距离远的一侧继续行走,并重复之前的测量前方障碍物的动作,直至距离前方障碍物的距离小于了停止距离……周而复始,小车就可以按照这个简单的原则实现自动避障行驶了。
下面先来看一下这个自动避障小车所需要的材料:
材料 | 说明 |
小车底盘 | 带TT电机的玩具小车。可以是之前所作的麦克纳姆轮的四轮小车,也可以是其他形式的小车,要求能够控制前后行驶及转向。 |
电池 | 为小车提供动力 |
电机驱动模块 | 可以使用前边介绍过的L298N或者其他类似功能的模块 |
ESP32开发板 | 还是采用开发板加扩展版的组合 |
舵机 | 180度小型舵机——MG90S |
超声波模块及支架 | 带舵机支架的超声波模块 |
小车的基本组装方法和注意事项在前面都介绍过了,这里就不在赘述了。需要注意的就是舵机和超声波支架要装在小车的头部正中央,并在舵机的90度位置时,超声波传感器朝向正前方,这样在舵机的0度和180度的位置时,超声波传感器分别朝向左侧和右侧。
超声波舵机云台有很多,下图为常见的几种,根据自己的喜好选择就可以了。
接下来看一下各个功能模块的连接方法。下表为这次实现的小车各个模块的连接方法。如果使用不同的GPIO引脚,那么在后边开发程序的时候,要记得将程序做相应的修改。
模块 | 引脚 | 连接对象 |
L298N模块 | IN1 | ESP32的P18 |
IN2 | ESP32的P23 | |
IN3 | ESP32的P32 | |
IN4 | ESP32的P33 | |
OUT1、OUT2 | 右前轮TT电动机 | |
OUT3、OUT4 | 左前轮TT电动机 | |
+12V | 电池的正极 | |
GND | 电池的负极和ESP32的GND(分别连接) | |
+5V | ESP32的+5V(开发时不需要连接,运行时连接) | |
舵机 | PWM信号线 | ESP32的P19 |
+5V | ESP32的+5V | |
GND | ESP32的GND | |
超声波模块 | Vcc | ESP32的+5V |
Trig | ESP32的P25 | |
Echo | ESP32的P26 | |
GND | ESP32的GND |
需要说明一下,在这个实验中,本人并没有选用之前四轮驱动的麦克纳姆轮的小车,而是选用了一个2轮驱动的3轮小车,之所以选择这个小车是应为2轮相对于麦克纳姆轮小车来说驱动起来更容易些,调试起来也简单。在调试的时候,多些耐心,麦克纳姆轮小车一样可以实现自动避障的功能。
制作完成,并且接好导线的小车如下图所示:
好了,小车已经组装好了。接下来就该进行程序设计,实现功能了。