一起玩儿物联网人工智能小车(ESP32)——33. 利用超声波传感器和舵机实现自动避障小车(一)

摘要:本文介绍如何使用超声波传感器和舵机实现小车的自动避障功能

智能小车之所以冠以“智能”的标签,就是因为它不应该是一个只能朝前行走的小车,而是要能够自主“决策”该怎么走,可以按照事先既定的规则,自主的行走。而实现自主行走的前提是要能“感知”周边的世界,根据周边世界的变化,做出下一步的行走决策。

从今天开始,就来借助超声波传感器实现一个可以自动躲避障碍物的智能小车。在前面的文章中已经介绍了超声波传感器,这个传感器的作用是可以测量前边障碍物与传感器之间的距离,本节正式利用了这个功能。但是,仅有这个功能还是不够的,还需要利用之前学习的舵机来控制超声波传感器的方向,这样就可以判断出周边各个方向障碍物的距离了。

使用超声波传感器来识别障碍物的距离,只是实现避障小车的一种方法。这种方法也有着其自身的缺点,就是当小车的超声波传感器与障碍物的反射面的夹角小于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轮相对于麦克纳姆轮小车来说驱动起来更容易些,调试起来也简单。在调试的时候,多些耐心,麦克纳姆轮小车一样可以实现自动避障的功能。

制作完成,并且接好导线的小车如下图所示:

好了,小车已经组装好了。接下来就该进行程序设计,实现功能了。

在OpenCV中实现小车避障通常会涉及到计算机视觉、机器学习和机器人控制技术。下面是一个简单的例子,展示了如何使用OpenCV进行障碍物检测,并基于此信息让小车做出避开障碍物的动作。这个过程通常包括以下几个步骤: 1. **环境感知**:通过摄像头获取实时视频流,然后对每一帧图像进行预处理,比如灰度化、二值化或者边缘检测。 ```python import cv2 cap = cv2.VideoCapture(0) # 使用内置摄像头 while True: ret, frame = cap.read() gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) ``` 2. **目标检测**:可以使用模板匹配、轮廓检测或是深度学习模型(如Haar cascades、HOG+SVM等)来识别障碍物。 ```python # 使用霍夫变换寻找圆形或矩形边缘 circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, dp=1, minDist=20, param1=50, param2=30, minRadius=0, maxRadius=0) ``` 3. **决策与动作规划**:根据检测到的障碍物位置,计算小车需要移动的距离或者方向。这可能需要用到PID控制器或者其他运动规划算法。 ```python if circles is not None: for circle in circles[0, :]: x, y, radius = circle, circle, circle # 如果检测到障碍物,计算避开路径并发送给电机控制模块 move_direction = avoid_obstacle(x, y) ``` 4. **电机控制**:将计算出的方向转换成电机驱动信号,通过硬件接口让小车实际移动。 注意这只是一个简化的示例,实际应用中还需要考虑噪声过滤、实时性、以及更复杂的避障策略。以下是几个相关的问题:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一起玩儿科技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值