具有基于视觉的避障功能的移动机器人
摘要:
本报告的目的是讨论和演示设计和实现能够使用 USB 网络摄像头视觉检测和避开障碍物的移动机器人的概念。该系统被移植到 Raspberry Pi 硬件,这是一台基于 Linux 的 35 美元计算机。本博客将重点介绍成功实现能够在室内环境中导航的移动机器人所需的重要概念。所提议的解决方案旨在在仓库环境中使用,无需人工操作即可将货物从一个位置运输到另一个位置。
简介:
市场上已经存在机器人,但这些机器人的购买价格昂贵,并且专门设计用于在仓库、战场或家庭等单一环境中工作。这些机器人能够使用被动传感器(例如超声波传感器和红外传感器)检测障碍物,并且由于其在地面上的移动性,有时也被称为自动驾驶汽车。传统上,这些自主系统通常配备无源传感器,如超声波距离传感器、红外传感器或 GPS 以感知其位置和环境。这些传感器的存在使机器人在放置障碍物时能够避免与障碍物发生碰撞(Wang J. et al, 2011)。然而,随着具有高处理能力的低成本嵌入式计算机系统技术的进步,可以使用更可靠和更具成本效益的方法来设计能够检测障碍物的自主机器人。一种可能的方法是利用计算机视觉算法,该算法在视觉上能够检测和避开障碍物。基于传感器的障碍物检测方法仅限于障碍物相对于机器人距离的接近程度,而基于视觉的方法可以在避开障碍物之前检测和识别障碍物。
提议的解决方案和人工制品:
本报告的目的是设计一种能够使用连接到 Raspberry Pi 的 USB 网络摄像头检测和避开障碍物的自主机器人。本报告将介绍移动机器人的基本概念以及目前在室内环境中使用的技术。为了实现建议系统,执行了以下步骤:
- 使用可以检测障碍物的计算机视觉框架(例如 SimpleCV)设计算法。
- 在树莓派上实现算法
- 使用 Python 编程语言在 Raspberry Pi 上实现电机控制
- 使用 Raspberry Pi 测试和评估所提议系统的性能
此外,为了充分实现所提出的系统,满足以下目标:
- 可以根据需要修改算法来确定障碍物检测的范围。
- 将在障碍物上放置大小恒定的几何形状(即圆形)进行检测
- SimpleCV 库与 Raspberry Pi 通信以控制两个直流电机
- 通过修改代码和检测不同距离的障碍物来测试和评估系统
硬件和软件列表:
提议的系统是在 Raspberry Pi 上实现的,使用 USB 网络摄像头来捕获图像。以下是完全实现所提出的自主机器人所需的硬件和软件列表。
硬件:
- 树莓派套件
- USB 网络摄像头,
- 两个直流电机,
- H 桥(控制电机方向),
- 机箱,
- 电缆
- 面包板
软件包:
- SimpleCV python 库,
- Ubuntu 操作系统,
- Raspberry 操作系统(Raspbian),
- Python2.7
所提出的系统能够检测各种范围内的障碍物。这是受视觉若隐若现算法的启发,通过在测量相机和障碍物之间的距离的同时定义代码内的最小像素数来实现的。
图 - 用于寻找项目圆与机器人与障碍物距离之间关系的实验装置
上图所示的布置可以在实验室中进行,以测量障碍物(圆)与机器人之间的距离,以确定与障碍物与机器人的实际距离相对应的最小像素数之间的关系。从上图和第 2 章的讨论可以看出,圆圈越近,圆圈越大,圆圈越远,圆圈越小。因此,可以执行一组测试,当在算法内更改像素数量时,可以测量障碍物与机器人之间的距离。障碍物将如上图所示移动,以找到算法检测到障碍物的正确距离。
图 – 视觉隐约的概念灵感来自医学
整体系统流程图:
以下流程图解释了如何使用 Raspberry Pi 和 SimpleCV 框架设计基于视觉的机器人。如图 6 所示,一个 USB 网络摄像头将连接到 Raspberry Pi 作为计算机的输入。 USB 网络摄像头将扫描特定几何形状的传入帧,即放置在障碍物上的圆形。用几何形状即圆形标记障碍物的原因只是为了减少准备算法的时间。通常,基于视觉的障碍物检测是使用两个摄像头完成的,这些摄像头创建立体视觉来判断机器人与障碍物之间的距离(Neves&Matos,2013)。因此,通过计算圆的半径来实现使用单个摄像头检测几何形状,即圆将有助于机器人检测机器人与障碍物的距离。这种障碍物检测方法的灵感来自于 Sachin &Paolo (1998) 提出的视觉逼近方法。
提议的系统将包含 USB 摄像头,该摄像头将连接到 Raspberry Pi。 Raspberry Pi 将运行一个 Python 脚本,该脚本将在寻找几何形状(即圆形)的同时抓取视频中的图像。如果检测到圆圈,则根据圆圈在屏幕上的位置,脚本将上拉或下拉用于控制机器人方向的 GPIO 端口引脚。
计算机视觉算法结构:
该算法是在移植到 Raspberry Pi 之前在 Ubuntu 驱动的笔记本电脑上准备的。这是因为 Ubuntu 和 Raspbian 是 Linux 的风格,这使得在跨平台之间移植和实现算法更容易。这使我可以灵活地使用该算法,而无需经常连接到我的 Raspberry Pi。因此,算法独立实现,无需担心硬件接口。
设计基于视觉的系统的第一步是选择将检测障碍物并帮助我们进行算法准备的感兴趣区域 (ROI)。在这种情况下,ROI 是一个由算法检测到的黑色圆圈。检测后,算法对图像进行二值化处理,以便只有感兴趣的区域在背景上可见。该算法将测量屏幕上圆圈的坐标,并测量与检测到圆圈的屏幕区域相关的坐标。如果坐标落在屏幕中心,那么算法会相应地移动机器人,如前所述。
在编写算法之前,有必要确定屏幕分辨率,这将使 Raspberry Pi 能够检测和跟踪障碍物。由于树莓派是低功耗计算机,系统时钟频率为700MHz,RAM有限,只有512MB,因此高清视频输入会消耗大量处理能力,最终导致系统不可靠。因此,需要选择一个中间地带,这足以让 Raspberry Pi 计算机处理来自相机的数据。
经过多次反复试验,选择了 320×240 的分辨率,如后面部分所述。该分辨率足以检测不同的色彩空间和几何形状。在实验中还发现,该分辨率不会导致输入视频滞后,因为分辨率更高,尤其是 640×480 及更高的情况。本报告第 4 节对此进行了详细讨论。
从图像中检测障碍物的第一步是将屏幕分成三个不同的部分,如图 8 所示。这样做是为了检测和跟踪障碍物的位置,以便可以按照上一节。对于这个设计项目,障碍物由一个特定的符号表示,即一个圆圈;因此,圆圈的存在将在算法中记录障碍物的存在。
更多细节:基于视觉的避障移动机器人
制造工艺