原文:8.2 ROS 2 · GitBook
ROS2的前身是ROS,ROS即Robot Operating System(机器人操作系统)。但是ROS本身并不是一个操作系统,而是一个软件库和工具集。ROS的出现解决了机器人各个组件的通讯问题。后来越来越多的机器人算法被集成到ROS中。ROS2继承了ROS,比ROS更强大,更优秀。
1 ROS2的设计目标和特点
ROS2肩负着改变智能机器人时代的历史使命,设计之初就考虑满足各类机器人应用的需求。
-
多机器人系统:未来的机器人不再是独立的个体,机器人之间也需要通信和协作。ROS2为多机器人系统的应用提供了标准的方法和通信机制。
-
跨平台:机器人应用场景不同,采用的控制平台也会有很大差异。为了让所有机器人都能运行ROS2,ROS2可以跨平台运行在Linux、Windows、MacOS、RTOS上。
-
实时性:机器人运动控制和很多行为策略都要求机器人具备实时性,比如机器人要在100ms内可靠地检测到前方的行人,或者在1ms内完成运动学和动力学计算,ROS2对这样的实时性提供了基本要求。
-
产品化:大量的机器人已经进入我们的生活,未来还会越来越多,ROS2不仅可以在机器人研发阶段使用,也可以直接安装在产品中,走向消费市场。这也对ROS2的稳定性和健壮性提出了巨大的挑战。
-
项目管理:机器人开发是一个复杂的系统工程,从设计、开发、调试、测试、部署全过程的项目管理工具和机制也将在ROS2中得到体现,让我们开发一个机器人变得更加简单。
2 发布版本
ROS2与Ubuntu对应的发布版本及维护周期。
ROS2 版本 | 发布日期 | 维护截止日期 | Ubuntu 版本 |
---|---|---|---|
Dashing(潇洒) | 2019.5 | 2021.5 | Ubuntu 18.04(仿生海狸) |
Eloquent(雄辩) | 2019.11 | 2020.11 | Ubuntu 18.04(仿生海狸) |
Foxy(狐狸) | 2020.6 | 2023.5 | Ubuntu 20.04(焦点窝) |
Galactic(银河系) | 2021.5 | 2022.11 | Ubuntu 20.04(焦点窝) |
Humble(谦逊的) | 2022.5 | 2027.5 | Ubuntu 22.04(Jammy Jellyfish) |
3 ROS与ROS2的比较
ROS2对系统架构进行了重新设计,两代ROS之间的架构变化如下:
-
OS层:在ROS2中,可以建立在linux或者其他系统上,甚至是没有操作系统的裸机上。
-
中间件层: ROS1的通讯系统基于TCPROS/UDPROS,ROS2的通讯系统基于DDS,DDS是分布式实时系统中数据发布/订阅的标准解决方案。
-
应用层: ROS1依赖于ROS Master,而在ROS2中,节点之间使用一种叫“Discovery”的发现机制来帮助彼此建立连接。
ROS 设计了一整套完整的通信机制(主题、服务、参数、动作)来简化机器人开发。通过这套机制,可以将机器人的各个组件连接起来。这套机制设计了一个叫 Ros Master 的节点,其他所有组件的通信都必须经过主节点。一旦主节点挂了,就会导致整个机器人系统的通信崩溃!所以,Ros 的不稳定性不能用来制作自动驾驶等一些高风险的机器人。另外,还有以下缺点:
- 基于TCP的通信实时性较差,系统开销较大
- 对python3支持不友好
- 消息传递机制不兼容
- 无加密机制,安全性低
ROS2首先移除了ROS中存在的主节点。移除主节点之后,各个节点可以通过DDS节点相互发现,各个节点都是平等的,可以实现一对一、一对多、多对多的通信。使用DDS进行通信之后,可靠性和稳定性都得到了增强。
相比于仅支持Linux系统的ROS , ROS2还支持windows、mac,甚至RTOS平台