• 为什么要ROS2而不是对ROS1修修补补?


    一、概要

            ROS 最初是作为 Willow Garage PR2 机器人的开发环境而诞生的。我们的主要目标是为用户提供使用 PR2 进行新颖研究和开发项目所需的软件工具。同时,我们知道 PR2 不会是世界上唯一甚至最重要的机器人,我们希望 ROS 对其他机器人有用。因此,我们投入了大量精力来定义抽象级别(通常通过消息接口),这将允许大部分软件在其他地方重用。

            尽管如此,我们还是以 PR2 用例为指导,其显着特征包括:

    • 单个机器人;
    • 船上工作站级计算资源;
    • 没有实时要求(或者,任何实时要求都将以定制的方式才能满足);
    • 出色的网络连接(有线或近距离高带宽无线);
    • 研究应用,主要是学术界;
    • 最大的灵活性,没有任何规定或禁止(例如,“我们不包装你的 main()”)。

            可以公平地说,ROS 满足了 PR2 用例,但也因在各种各样的机器人上变得有用而被超越。今天我们看到 ROS 不仅用在 PR2 和类似 PR2 的机器人上,还用在各种尺寸的轮式机器人、有腿人形机器人、工业臂、户外地面车辆(包括自动驾驶汽车)、飞行器、水面车辆, 和更多。

            此外,我们看到 ROS 在我们最初关注的主要学术研究社区之外的领域得到采用。基于 ROS 的产品正在进入市场,包括制造机器人、农业机器人、商业清洁机器人等。政府机构也在更密切地关注 ROS 在其现场系统中的使用。例如,NASA 预计将在部署到国际空间站的 Robonaut 2 上运行 ROS。

            随着 ROS 的所有这些新用途,该平台正在以意想不到的方式扩展。虽然它表现良好,但我们相信我们可以通过正面处理他们的新用例来更好地满足现在更广泛的 ROS 社区的需求。

    二、新用例 

            对于 ROS 社区的持续和未来发展,我们特别感兴趣的是以下用例,我们在项目开始时没有考虑到这些用例:

    • 多机器人团队:虽然现在可以使用 ROS 构建多机器人系统,但没有标准方法,它们都在 ROS 的单主机结构之上进行了一些破解。
    • 小型嵌入式平台:我们希望小型计算机,包括“裸机”微控制器,成为 ROS 环境的一流参与者,而不是通过设备驱动程序与 ROS 隔离。
    • 实时系统:我们希望直接在 ROS 中支持实时控制,包括进程间和机器间通信(假设有适当的操作系统和/或硬件支持)。
    • 非理想网络:我们希望 ROS 在网络连接由于丢失和/或延迟而退化时表现得尽可能好,从质量差的 WiFi 到地对空通信链路。
    • 生产环境:虽然 ROS 继续成为研究实验室的首选平台至关重要,但我们希望确保基于 ROS 的实验室原型能够演变成适用于实际应用的基于 ROS 的产品。
    • 用于构建和构建系统的规定模式:虽然我们将保持作为 ROS 标志的底层灵活性,但我们希望为生命周期管理和部署的静态配置等功能提供清晰的模式和支持工具。

    三、新技术

            ROS 的核心是一个几乎完全从零开始构建的匿名发布-订阅中间件系统。从 2007 年开始,我们构建了自己的发现、消息定义、序列化和传输系统。在这七年中,我们见证了在所有这些领域中与 ROS 相关的几种新技术的开发、改进和/或广泛采用,例如:

    • Zeroconf;
    • Protocol Buffers;
    • ZeroMQ (and the other MQs);
    • Redis;
    • WebSockets; and
    • DDS (Data Distribution Service).

            现在可以使用现成的开源库构建类似 ROS 的中间件系统。我们可以通过多种方式从这种方法中受益匪浅,包括:

    • 我们维护的代码更少,尤其是非机器人特定的代码;
    • 我们可以利用这些库中超出我们自己构建范围的功能;
    • 我们可以从其他人对这些库的持续改进中受益;和
    • 当人们问我们 ROS 是否“准备好迎接黄金时间”时,我们可以指出已经依赖这些库的现有生产系统。

    四、API 更改

            构建 ROS 2 的另一个原因是利用这个机会来改进我们面向用户的 API。今天存在的大量 ROS 代码与客户端库兼容,早在 2009 年 2 月发布的 0.4“Mango Tango”版本。从稳定性的角度来看,这很好,但这也意味着我们仍然生活在几年前做出的 API 决策中,其中一些我们现在知道不是最好的。

            因此,在 ROS 2 中,我们将设计新的 API,尽我们最大的能力将社区的集体经验与第一代 API 结合起来。因此,虽然关键概念(分布式处理、匿名发布/订阅消息、带有反馈的 RPC(即动作)、语言中立性、系统自省性等)将保持不变,但您不应期望 ROS 2 成为 API - 与现有的 ROS 代码兼容。

            但不要害怕:会有适当的机制允许 ROS 2 代码与现有 ROS 代码共存。至少,会有翻译中继支持两个系统之间的运行时交互。并且可能会有库 shims 允许现有的 ROS 代码针对 ROS 2 库进行编译/运行,其行为在性质上与今天看到的相似。

    五、为什么不只是增强 ROS 1

            原则上,上述更改可以集成到现有的核心 ROS 代码中。例如,可以将新的传输技术添加到 roscpp 和 rospy。我们考虑了这个选项并得出结论,鉴于实现我们所寻求的利益所需的更改的侵入性,更改许多人依赖的当前 ROS 系统存在太大的风险。我们希望今天存在的 ROS 1 能够继续工作,并且不受 ROS 2 开发的影响。因此,ROS 2 将构建为一组并行的包,可以与 ROS 1 一起安装并与 ROS 1 互操作(例如,通过消息桥) .

  • 相关阅读:
    Python学习 day01(注意事项)
    Axure教程—单色折线图(中继器)
    鸿蒙(API 12 Beta3版)【获取支持的编解码能力】 音视频编码
    多级菜单的实现二
    【毕业设计源码】Python学生兼职平台系统
    我在Vscode学OpenCV 图像运算(权重、逻辑运算、掩码、位分解、数字水印)
    学过单片机的都知道,节电器到底能不能省电
    MYSQL数据库学习
    paddle学习赛——钢铁目标检测(yolov5、ppyoloe+,Faster-RCNN)
    CentOS安装MySQL8.0
  • 原文地址:https://blog.csdn.net/gongdiwudu/article/details/126188974