🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 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)