# ROS简单介绍
ROS 1.0(简称: ROS)历经10年的发展,已经积累了非常非常丰富且稳定的功能包集、各类工具和完备的教程。在未来即便是ROS2.0大行其道,仍会有机制保证ROS 2.0代码与现有ROS代码共存。例如,ROS仍然还可以通过message bridges等方式与ROS2.0一起工作。
<br>
ROS 2.0未来将成为机器人应用程序开发的终极SDK。相比于ROS1.0,它使用更先进的分布式架构,更高的可靠性,以及对实时性和嵌入式设备的支持。最大的不同在于采用了数据分发服务(DDS)技术,DDS适用于实时分布式嵌入式系统。2016年有一篇会议论文。Exploring the performance of ROS2。 分析了ROS2.0的性能。但是目前,网上的教程大多数是ROS的,ROS2的教程很少,而且程序包也没有ROS丰富。
<br>
## 为什么会出现ROS 2.0 ?
归结起来,分为三个原因:1.历史原因;2. 出现了新的需求;3.出现了新的技术。
<br>
#### 1.历史原因
ROS始于2007年11月,最早是“柳树车库”用于PR2机器人的开发。同时希望ROS能用于其他机器人。为了便于多研究所合作,避免重复造轮子,所以柳树车库花费大量精力定义了抽象级别(通常是通过消息的接口),允许软件重用。
其解决思路是:
1、 让多个程序分别完成特定任务, 能够相互通信, 并且定义好常用的格式让大家使用基于面向服务 Service-oriented;
2、 ROS 提供构建环境,让大家能够较容易的使用他人的工作, 容易交换代码 ;
按照当时以及能够想到的机器人现状,ROS主要设计指向是:
1. 单个机器人;
2. 板载工作站级别的计算资源;
3. 没有实时性需求;
4. 理想的网络连接;
5. 应用于学术研究;
6. 强调最大的灵活性,没有过多的约定或者禁止。
然而,ROS设计初衷是用于家用服务机器人,出乎意料的是:ROS被应用于各式各样的机器人:轮式机器人、腿式机器人、工业手臂、室外无人车辆、自动驾驶汽车、飞行器、无人艇……。 而且ROS设计初衷是用于学术研究,然而出乎意料的是:大量基于ROS的产品进入市场,包括制造业机器人、农业机器人、商业清洁机器人,甚至NASA将运行ROS的Robonaut 2部署到国际空间站。
随着应用场景的扩大,导致产生了一系列新的需求。
<br>
### 2.出现了新的需求
以下是ROS目前感觉不足的领域,也是ROS2.0意图解决的问题。
1. 多个机器人组成的集群; ROS的单master结构就蛋疼了。
2. 小型嵌入式平台,甚至“裸奔”的微控制器;依赖于Ubuntu的ROS太重了。
3. 实时系统:包括进程间和跨机器通信,ROS做不到。
4. 非理想的网络;ROS延迟很大,甚至断网再连接时会挂。
5. 生产制造等环境:ROS可靠性还不够。
6. 为一些新特性,如部署的生命周期管理和静态配置,提供清晰的模式和支持工具。
<br>
### 3.出现了新的技术
ROS的核心是匿名发布-订阅中间件系统,从2007年开始,在ROS这些相关领域产生了一些更新、更好、值得借鉴使用的技术,如:
1. Zeroconf;
2. Protocol Buffers;
3. ZeroMQ (and the other MQs);
4. Redis;
5. WebSockets; and
6. DDS (Data Distribution Service)
![](https://img.kancloud.cn/df/eb/dfeb7619b68249e113736dd6796d50dd_1490x742.png)
<br>
## ROS与ROS2的差异性
### 通信模型
ROS:
1. talker 注册
2. listener 注册
3. ROS Master 进行信息匹配
4. listener 发送链接请求
5. talker 确认请求
6. 建立连接
7. talker 给 listener 发数据
<br>
ROS2:
1. 参与者(Domain Participant):一个参与者Participant就是一个容器,对应于一个使用DDS的用户,任何DDS的用户都必须通过Participant来访问全局数据空间。
2. 发布者(Publisher):数据发布的执行者,支持多种数据类型的发布,可以与多个数据写入器(DataWriter)相联,发布一种或多种主题(Topic)的消息。
3. 订阅者(Subscriber):数据订阅的执行者,支持多种数据类型的订阅,可以与多个数据读取器(DataReader)相联,订阅一种或多种主题(Topic)的消息。
4. 数据写入器(DataWriter):应用向发布者更新数据的对象,每个数据写入器对应一个特定的Topic,类似于ROS1中的一个消息发布者。
5. 数据读取器(DataReader):应用从订阅者读取数据的对象,每个数据读取器对应一个特定的Topic,类似于ROS1中的一个消息订阅者。
6. 主题(Topic):这个和ROS1中的Topic概念一致,一个Topic包含一个名称和一种数据结构。
7. QoS Policy:Quality of Service,质量服务原则,这个模块在ROS1中可从没见过,看名称就猜测应该是负责数据质量的。QoS是DDS中非常重要的一环,控制了各方面与底层的通讯机制,主要从时间限制、可靠性、持续性、历史记录几个方面,满足用户针对不同场景的数据应用需求
<br>
### ROS/ROS2 架构图
![ROS/ROS2 架构图](https://img.kancloud.cn/9c/99/9c9915470b5997c2f9e53dcdfb69e973_872x485.png)
## 总结
在学习方面,如果是刚刚入门的同学,可以先拿ROS来入门,因为现在有很多ROS的入门学习资料方便快速入门;再对ROS有了一定的了解后再来学习ROS2.0更加深入、优秀的知识。
<br>
Enjoy it.
[机器人实验室 https://roboticslab.cn](https://roboticslab.cn)