ROS 最初是作为 Willow Garage PR2 机器人的开发环境而诞生的。我们的主要目标是为用户提供使用 PR2 进行新颖研究和开发项目所需的软件工具。同时,我们知道 PR2 不会是世界上唯一甚至最重要的机器人,我们希望 ROS 对其他机器人有用。因此,我们投入了大量精力来定义抽象级别(通常通过消息接口),这将允许大部分软件在其他地方重用。
尽管如此,我们还是以 PR2 用例为指导,其显着特征包括:
可以公平地说,ROS 满足了 PR2 用例,但也因在各种各样的机器人上变得有用而被超越。今天我们看到 ROS 不仅用在 PR2 和类似 PR2 的机器人上,还用在各种尺寸的轮式机器人、有腿人形机器人、工业臂、户外地面车辆(包括自动驾驶汽车)、飞行器、水面车辆, 和更多。
此外,我们看到 ROS 在我们最初关注的主要学术研究社区之外的领域得到采用。基于 ROS 的产品正在进入市场,包括制造机器人、农业机器人、商业清洁机器人等。政府机构也在更密切地关注 ROS 在其现场系统中的使用。例如,NASA 预计将在部署到国际空间站的 Robonaut 2 上运行 ROS。
随着 ROS 的所有这些新用途,该平台正在以意想不到的方式扩展。虽然它表现良好,但我们相信我们可以通过正面处理他们的新用例来更好地满足现在更广泛的 ROS 社区的需求。
对于 ROS 社区的持续和未来发展,我们特别感兴趣的是以下用例,我们在项目开始时没有考虑到这些用例:
ROS 的核心是一个几乎完全从零开始构建的匿名发布-订阅中间件系统。从 2007 年开始,我们构建了自己的发现、消息定义、序列化和传输系统。在这七年中,我们见证了在所有这些领域中与 ROS 相关的几种新技术的开发、改进和/或广泛采用,例如:
现在可以使用现成的开源库构建类似 ROS 的中间件系统。我们可以通过多种方式从这种方法中受益匪浅,包括:
构建 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 代码中。例如,可以将新的传输技术添加到 roscpp 和 rospy。我们考虑了这个选项并得出结论,鉴于实现我们所寻求的利益所需的更改的侵入性,更改许多人依赖的当前 ROS 系统存在太大的风险。我们希望今天存在的 ROS 1 能够继续工作,并且不受 ROS 2 开发的影响。因此,ROS 2 将构建为一组并行的包,可以与 ROS 1 一起安装并与 ROS 1 互操作(例如,通过消息桥) .