65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 Intel® RealSense™ 摄像头、ROS 和 SAWR 构建自主移动机器人

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2018年2月13日

CPOL

14分钟阅读

viewsIcon

22621

在本文中,我们将概述 SAWR 项目,并提供一些使用 Intel RealSense 摄像头和 SAWR 项目构建自己的机器人的技巧。

概述

Simple Autonomous Wheeled Robot (SAWR) 项目定义了使用 Robot Operating System* (ROS*) 和 Intel® RealSense™ 摄像头进行自主导航所需的基本“示例”机器人硬件和软件。在本文中,我们将概述 SAWR 项目,并提供一些使用 Intel RealSense 摄像头和 SAWR 项目构建自己的机器人的技巧。

移动机器人——它们需要什么

移动机器人需要以下能力

  • 感知潜在动态环境。 机器人周围的环境不是静态的。障碍物,例如家具、人类或宠物,有时会移动,并且可能会出现或消失。
  • 确定当前位置。 例如,想象一下您正在开车。您需要在地图上指定“我在哪里?”或者至少知道相对于目标位置的位置。
  • 从一个位置导航到另一个位置。 例如,要开车到目的地,您需要司机(决定施加多少动力以及如何转向)和导航员(跟踪地图并规划到目的地的路线)的技能。
  • 根据需要与人类互动。 在人类环境中的机器人需要能够与人类进行适当的互动。这可能意味着能够识别物体为人,跟随他或她,并响应语音或手势命令。

基于 ROS 和 Intel RealSense 摄像头的 SAWR 项目涵盖了前三个需求。它还可以作为探索如何满足最后一个需求——人类互动——的平台。

典型的机器人软件栈

为了满足上述要求,典型的机器人软件栈由许多模块组成(参见图 1)。在堆栈的底部,包括 Intel RealSense 摄像头的传感器硬件驱动程序(在 SAWR 的情况下)将环境信息传递给一组传感模块。这些模块识别环境信息以及人类互动。融合了多个信息源以创建各种模型:世界模型、机器人状态估计(包括在世界中的位置)和命令输入(例如,语音识别)。

Plan 模块决定机器人将如何行动以实现目标。对于移动机器人,主要目的是从一个地方导航到另一个地方,为此,需要在给定当前世界模型和状态的情况下计算无障碍路径。

根据计算出的计划,Act 模块管理机器人的实际运动。通常,电机控制是该部分的主要功能,但其他操作也是可能的,例如语音输出。在执行操作时,机器人也可能不断更新其世界模型并重新规划。例如,如果出现意外障碍物,机器人可能必须更新其世界模型并重新规划其路径。机器人甚至可能犯错误(例如,其在世界中的位置估计可能不正确),在这种情况下,它必须弄清楚如何恢复。

自主导航需要大量的计算来完成上述任务。一些任务可以卸载到云端,但由于连接性和延迟问题,这通常不是一个选择。SAWR 机器人仅使用板载计算资源即可进行自主导航,但云端仍可用于添加其他功能,例如语音控制(例如,使用 Amazon Voice Services*)。

图 1. 典型的机器人软件栈。

导航能力 - SLAM

同步定位与建图 (SLAM) 是自主移动机器人最重要的能力之一。在典型实现中,机器人使用占用栅格地图在空间中导航(规划路径)。这张地图需要随着环境的变化而动态更新。在低端系统中,这张地图通常是二维的,但更高级的系统可能会使用三维表示,如点云。这张地图是机器人世界表示的一部分。“SLAM”中的“定位”部分意味着除了维护地图外,机器人还需要估计其在地图中的位置。通常,这种估计使用概率方法;机器人维护一个概率分布,而不是一个单一的估计位置,并使用最可能的位置进行规划。这使得机器人能够从错误中恢复并处理不确定性。例如,如果当前位置的估计过于不确定,机器人可以选择从环境中获取更多信息(例如,通过旋转扫描地标)来完善其估计。

在默认的 SAWR 软件栈中,使用开源 slam_gmapping 包来创建和管理地图,尽管还有其他几个选项可用,例如 cartographer 和 rgbd-slam。该模块不断将新的传感器数据集成到地图中,并在被证明不正确时清除旧数据。另一个模块 amcl 用于通过将传感器数据与地图进行匹配来估计当前位置。这些模块并行运行,以不断更新地图和机器人位置的估计。图 2 显示了一个典型的室内环境和通过此过程创建的二维地图。

图 2. 同步定位与建图 (SLAM) 和二维地图。

机器人硬件

图 3 显示了 SAWR 项目的硬件架构。与许多机器人系统一样,该架构由主从系统组成。主节点负责高级处理(例如 SLAM 和规划),从节点负责实时处理(例如电机速度控制)。这类似于动物大脑和脊髓反射如何协同工作。可以使用几种不同的选项来实现此模型,但通常使用 Linux* 系统作为主节点,并使用一个或多个微控制器单元 (MCU) 作为从节点。

图 3. 机器人架构。

在本文中,Intel RealSense 摄像头用作主要环境传感器。这些摄像头提供深度数据,可用作 SLAM 系统的输入。在当前的 SAWR 项目中使用了 Intel® RealSense™ 摄像头 R200 或 Intel® RealSense™ 摄像头 ZR300。Intel® RealSense™ D400 系列摄像头(如图 4 所示)将很快成为一种常见的深度摄像头选择,但由于这款摄像头提供类似的数据,但具有改进的范围和精度,并且使用相同的驱动程序,因此升级很直接。至于驱动程序,librealsense 和 realsense_ros_camera 驱动程序可在 GitHub* 上找到。您可以将任何 Intel RealSense 摄像头与它们一起使用。

图 4. Intel® RealSense™ D400 系列深度摄像头。

对于主计算机,您可以选择各种硬件,包括带有 Intel® Core™ i5 和 Intel® Core™ i7 处理器的 Intel® NUC(参见图 5)。此选择为机器人开发提供了最高的性能。您还可以使用 OEM 板进行机器人开发,例如 Aaeon UP* 板之一,用于机器人开发的快速原型到生产。即使是微型的 Aaeon UP Core* 也足以进行 SLAM。主要要求是该板运行 Linux。SAWR 软件栈使用 ROS,ROS 在 Ubuntu* 下运行效果最佳,但也可以将其安装在其他发行版上,例如 Debian* 或 Yocto*。

图 5. Intel® NUC。

SAWR 基本移动机器人

以下是 SAWR 基本移动机器人(如图 6 所示)的规格概述,它旨在成为一种廉价的参考设计,易于复制(GitHub 站点包含激光切割自己框架的文件)。SAWR 软件栈可以轻松地适应其他机器人框架。对于此设计,从计算机实际上嵌入在 Dynamixel 伺服电机内部。这些智能电机中的 MCU 负责低级问题,如位置传感和速度控制,从而使机器人的其余部分大大简化。

计算机:Aaeon UP 板

摄像头:Intel RealSense 摄像头

执行器:两个带有磁性编码器的 Dynamixel MX-12W* 智能伺服电机

软件:Xubuntu* 16.04 和 ROS Kinetic*

框架:激光切割的亚克力或 POM,Polulo 球形脚轮,O 型圈轮胎和皮带传动

其他:DFRobot 25W/5V 电源调节器

附加功能:Jabra Speak* 510+ USB 免提电话(如果需要,用于语音 I/O)

说明和软件:https://github.com/01org/sawr

图 6. SAWR 基本移动机器人。

SAWR 项目的一个独特之处在于,其硬件和软件都采用了开源风格开发。软件基于修改和简化 Open Source Robotics Foundation Turtlebot* 栈,但添加了使用 Dynamixel Linux* SDK 的自定义电机驱动程序。对于硬件,框架使用 OpenSCAD* 进行参数化建模,然后使用 Inkscape* 转换为激光切割文件。您可以从 GitHub 下载所有数据,然后使用激光切割机(或激光切割服务)制作自己的框架。大多数其他零件都可以从五金店购买。详细的说明、组装和设置计划可在网上获得。

使用 OEM 板进行机器人开发

当您为 SAWR 或任何其他机器人系统选择 OEM 板(如 UP 板)时,强烈建议使用主动散热以获得更高的性能。通常,机器人中间件会消耗大量 CPU 资源,而 CPU 资源不足有时会转化为低质量或低速的自主移动。通过主动散热,您可以无限期地保持 CPU 的最高速度。特别是,UP 板可以与主动散热一起进行涡轮增压,并比没有主动散热时运行在更高的时钟速率。

您可能会担心主动散热和更高时钟速率的电源资源。然而,功耗通常不是机器人开发中的限制因素,因为电机通常是主要的功率负载。事实上,您可以选择 UP Squared* 而不是基本的 UP 板,它具有更好的性能。

另一个问题是内存。绝对最小值是 2 GB,但强烈建议使用 4 GB。SLAM 系统使用大量内存来维护世界状态和位置估计。请记住,操作系统也需要内存,而 Ubuntu 在空闲时会使用大约 500 MB。因此,4 GB 系统的应用程序可用空间是 1 GB 系统的 7 倍,而不仅仅是 4 倍。

ROS 概述

尽管名称如此,ROS 并不是一个操作系统,而是可以在各种操作系统之上运行的中间件软件栈,尽管它主要用于 Ubuntu。ROS 支持基于通信节点图的分布式、并发处理模型。得益于这种基本架构,如果您需要,不仅可以轻松地将同一机器人上的多个处理板连接在一起,还可以通过使用 Wi-Fi*(尽管性能和可靠性会有些损失)将板物理地放置在实际机器人之外。从知识库的角度来看,ROS 拥有一个庞大的社区,许多现有的开源节点支持广泛的传感器、执行器和算法。这一点以及其出色的文档是选择 ROS 的好理由。从开发和调试的角度来看,各种强大且有吸引力的可视化工具和模拟器也可用且有用。

基本 ROS 概念

本节涵盖了 ROS 架构的主要特性。要了解更多信息,请参阅 ROS 文档和教程。

  • 消息和主题(参见图 7)。ROS 使用发布/订阅系统在唯一命名的主题上发送和接收数据。每个主题可以有多个发布者和订阅者。消息是类型化的,可以包含多个元素。消息传递是异步的,并且通常建议在 ROS 中的大多数进程间通信中使用此方法。

    图 7. 消息和主题。
  • 服务调用(参见图 8)。服务调用使用同步远程过程调用语义,也称为“请求/响应”。在使用服务调用时,调用者会阻塞通信,直到收到响应。由于这种行为可能导致死锁和挂起进程等各种问题,您应考虑是否确实需要通过服务调用来构建通信。它们主要用于更新参数,其中消息缓冲会产生过多的开销(例如,用于更新地图)或实际需要活动之间的同步。

    图 8. 服务调用。
  • 操作(参见图 9)。操作用于定义具有目标、失败可能性以及周期性状态报告有用的长期任务。在 SAWR 软件栈中,操作主要用于设置目标位置并监控导航任务的进度。操作通常支持基于标准主题的异步目标导向行为控制。对于 SAWR,您可以使用 Rviz(可视化工具)和 2D Nav Goal 按钮触发导航操作。

    图 9. 操作。
  • 参数(参见图 10)。参数用于为每个节点设置各种值。参数服务器在启动时提供类型化的常量数据,最新版本的 ROS 还支持节点启动后的动态参数更新。参数可以通过多种方式指定,包括通过命令行、参数文件或启动文件参数。

    图 10. 参数。
  • 其他 ROS 概念。 还有几个其他重要概念与 ROS 架构相关。
    • 包:用于在 ROS 中实现或指定服务或节点的文件的集合,通常使用 catkin 构建系统一起构建。
    • 通用机器人描述格式 (URDF):描述机器人三维模型中关节和关节之间变换的 XML 文件。
    • 启动文件:描述 ROS 图中节点和参数集合的 XML 文件。
    • Yet Another Markup Language:用于命令行和文件中的参数指定。

ROS 工具

ROS 提供了许多强大的开发和调试工具。以下工具通常用于自主移动机器人。

  • Rviz(参见图 11)。可视化各种形式的动态三维数据:变换、地图、点云、图像、目标位置等。

    图 11. Rviz。
  • Gazebo。 机器人模拟器,包括碰撞、惯性、感知误差等。
  • Rqt。 可视化节点和主题的图。
  • 命令行工具。 监听和发布主题,调用服务,启动操作。可以过滤和监控错误消息。
  • Catkin。 构建系统和包管理。

用于自主移动的 ROS 通用模块

以下模块通常用于自主移动机器人,SAWR 也采用了它们。

  • Tf (tf2)(参见图 12)。坐标变换库。它是 ROS 中最重要的包之一。由于 tf,您可以管理所有坐标值,包括机器人位置或摄像头与轮子之间的关系。为了处理各种类别的坐标,采用了几个独特的概念,如坐标系和树。

    图 12. tf 坐标系示例。
  • slam_gmapping。 OpenSlam 的 Gmapping 的 ROS 封装器。gmapping 是最著名的 SLAM 算法之一。虽然仍然很受欢迎,但现在也有几种替代方案可用于此功能。
  • move_base。 自主导航的核心模块。此包提供各种功能,包括规划路径、维护成本地图以及为电机发出速度和方向命令。
  • Robot_state_publisher。 发布机器人连杆的三维姿态,这对于机械臂或人形机器人很重要。对于 SAWR,此模块维护的最重要数据是机器人相对于机器人位置的位置和方向以及摄像头的位置。

使用 SAWR 堆栈构建定制机器人技巧

SAWR 由以下子目录组成,如果您想利用完整的 SAWR 软件和硬件包(参见图 13),可以按原样使用它们。您也可以将它们作为使用 Intel RealSense 摄像头的原始机器人的起点。下面还提供了针对 SAWR 堆栈与不同机器人硬件一起使用的自定义技巧。

  • sawr_master:主包,启动脚本。
    • 如果您更改了其他 ROS 模块,请修改此项。
  • sawr_description:运行时物理描述(URDF 文件)。
    • 根据您的机器人尺寸修改 urdf 和 xacro 文件(检查 tf 树/坐标系)。
  • sawr_base:电机控制器和硬件接口。
    • 准备您自己的电机控制器和里程计库。
  • sawr_scan:摄像头配置。
  • sawr_mapping:SLAM 配置。
    • 如果您使用与 SAWR 相同的 Intel RealSense 摄像头配置,则可以按原样开始。
  • sawr_navigation:Move-base 配置。
    • 修改和调整全局/局部成本地图、move_base 的参数。这是调整您自己硬件最困难的部分。

图 13. 通过 rqt_graph 查看的 SAWR ROS 节点图。

结论

自主移动机器人是一个新兴领域,但移动机器人技术已经相对成熟。ROS 是机器人软件开发的关键框架,它提供了涵盖机器人许多领域的广泛模块。最新版本是 Lunar—第 12 代。机器人技术涉及计算机科学和工程的所有方面,包括人工智能、计算机视觉、机器学习、语音理解、物联网、网络和实时控制—而 SAWR 项目是开发基于 ROS* 的机器人的良好起点。

关于作者

Sakemoto 是 Intel® 软件与服务集团的应用工程师。他负责软件支持,并与嵌入式系统和机器人领域的应用供应商合作。在他目前的职位之前,他曾是一名软件工程师,负责包括嵌入式 Linux 和 Windows* 在内的各种移动设备。

© . All rights reserved.