一、说明
机器人操作系统ROS是使用最广泛的机器人中间件平台。它在机器人社区中使用了10多年,无论是在业余爱好者领域还是在工业领域。ROS可用于各种微控制器和计算机,从Arduino到Raspberry Pi再到Linux工作站,它为电机控制器,视觉传感器,深度摄像头和激光扫描仪提供硬件支持。本文介绍ROS2和ROS1的项目尝试和结论。
二、在ROS学习过程
在我的构建机器人项目中,我同时使用了 ROS1 和 ROS2。到目前为止,我完成了 2 个阶段中的 5 个。第一阶段是研究:了解机器人的硬件和软件,研究微控制器和传感器,测试库和中间件。在第二阶段,我构建了一个基于Arduino的原型,一种红外控制的4轮车,我称之为RADU。现在,阶段 3 有两个不同的部分:使用 ROS 模拟机器人,然后构建支持 ROS 的机器人。这就是困境:ROS2的模拟 - 通过长时间的试错期来之不易 - 无法扩展到混凝土机器人,因为我的硬件不受支持。我考虑了很长时间,最终决定从此继续使用 ROS1。
本文总结了我的经验,并解释了最终选择的基本原理。
这篇文章最初出现在我的博客 admantium.com。
三、回顾我的机器人项目
在 2021 年初启动项目时,我对 ROS 的第一次体验仅限于纯模拟。在我的笔记本电脑上将基于Ubuntu的Linux作为VM运行,我用RViz安装了ROS noetic,并制作了一个简单的四轮机器人URDF模型。
然后,我买了一个机器人底盘,几个Arduino Uno和5V兼容传感器。通过学习教程,了解 Arduino 的工作原理以及如何测量和处理传感器数据,这是一个令人振奋的时刻。我有很多"尤里卡"时刻,在遇到一些困难后,传感器会突然工作。这一阶段以第一个混凝土原型完成,这是一个由 IR 控制的移动 4 轮底盘。
准备在我的项目中充分利用 ROS,我将 ROS2 安装在专用的 Linux 工作站上。然后我开始将我的简单RViz ROS1模型移植到ROS2,并扩展模型以兼容Gazebo。有趣的是,学习机器人背后的物理学,并深入了解ROS概念。不利的一面是,我花了很长时间的试验和错误来开发一个与Gazebo兼容的模型。但最后,我可以启动模拟,启动一个远程节点,并在模拟流点云传感器数据中移动机器人。
从模拟到机器人是下一个阶段。与此同时,覆盆子笔克进入舞台。最初,我只是测试了如何添加传感器并使用C和MicroPython读取它们。但是阅读了几个教程并观看了有关基于Raspberry Pi的项目的视频,这些项目使用Python中的机器人控制软件使我相信了可行性。用MicroPython从头开始编写电机控制软件成为我的目标。我用MicroPython完全重建了我的机器人,并在电机控制命令包装器中添加了一个ROS Twist消息。机器人动了!但是在添加我的实感 D435 相机时,经过几个小时的尝试,我无法使用 ROS2 流式传输点云数据。出于好奇,我切换到 ROS1 --- 在这里它开箱即用!
这一启示引起了下一段所概述的意见。
四、ROS1 与 ROS2
ROS2是未来的ROS。根据社区网站和YouTube视频的信息,ROS2面向工业用途。机器人通信使用称为XRCE-DDS的标准中间件层。ROS2还抑制了系统自愈和可靠性的特点,例如无需ROS主节点即可运行。
在研究混凝土机器人项目时,来自社区的 ROS2 机器人与 ROS1 机器人相比相形见绌。过去 3 年开发的大多数项目仍然使用 ROS1。我没有考虑这个事实,只是感到惊讶,因为 ROS2 自 2017 年以来就已经发布。
在使用 ROS2 模拟机器人并让 ROS2 与我的机器人传感器(尤其是 RealsenseD435 相机)一起运行时,我遇到了几个障碍。这是个人回忆。
首先,在搜索如何连接某个传感器时,很难找到或根本不存在与 ROS2 相关的信息、具体文章、文档或 YouTube 视频。
其次,有关 Gazebo 控制器和 Gazebo 插件等特殊主题的文档不完整。如果你想构建一个 Gazebo 模拟,ROS1 有探索性和全面的手册,但对于 ROS2,你需要从不同的网站获取信息片段,组装它们,并在它工作之前使用大量的试验和错误。让我的机器人模拟与 Gazebo/RVIZ 2 中的所有传感器和主题一起工作是一段漫长的旅程。
第三,当使用SBC组装机器人并将其连接到微控制器时,您会惊讶地发现没有通用库可以通过串行连接它们,如本博客文章所述。你要么需要使用非常特定的微控制器,并为它们编译一个定制的RTOS Linux发行版,这使得很难重用你的Arduino库。或者您需要具有网络功能的特殊板。
第四,检查 ROS2 的硬件支持显示可用的选项较少,其他机器人爱好者在运行 ROS2 时遇到问题。在尝试让英特尔实感 D435 与 ROS2 配合使用时,我也有同样的经历。尽管我使用了最新的固件,从头开始编译了librealsense,编译了ros-realsense软件包,但它不起作用,甚至响应迅速且有用的社区问题板上的一个线程也没有找到答案。当我切换到 ROS1 时,相同的传感器可以正常工作。
概括这些观察结果使我得出一个可悲的结论,即使用ROS2意味着找到更少的文档,对传感器的支持更少,并且SBC和微控制器的集成更加困难。
五、再次切换到 ROS1
让gazebo模拟在 ROS2 中工作的经验主要是反复试验。让Realsense2相机在ROS2中工作并不成功。因此,从其他人那里阅读有关ROS2的类似错误和问题的信息是另一个影响。最后,在研究在我的机器人上使用ROS的下一个方面时,比如SLAM,自主运动,抓手 - 确实一次又一次地透露了ROS1的完整教程和书籍,我做出了决定:我的项目将继续使用ROS1。
塞巴斯蒂安