ROS2入门学习——ROS1与ROS2区别
一、ROS1的根源
ROS(机器人操作系统)的应用领域已经超越了学术研究,越来越多的基于ROS的产品逐渐进入市场。支持的机器人种类多样,包括轮式机器人、人形机器人、工业机械手、室外机器人、飞行器以及救援机器人等。这种广泛的适用性使得ROS在多种行业中发挥着重要作用,推动了机器人技术的普及和应用。
多机器人系统:构建多机器人系统的标准方法确保不同机器人之间能够有效协作和通信,提高整体系统的效率和灵活性。
跨平台支持:系统适用于多种平台,包括Windows、RTOS等,确保在不同操作系统上都能稳定运行,方便开发和部署。
实时性设计:提供实时性方面的设计与功能保证,使得系统能够快速响应各种动态环境,满足对实时处理的需求。
网络连接:在各种网络环境下确保数据的完整性和可靠性,即使在不稳定的网络条件下也能保证信息的顺畅传输。
产品化转型:实现从科学研究到消费产品的无缝过渡,支持技术成果的商业化,推动创新应用于市场。
项目管理整合:具备完整生命周期内的项目管理能力,确保项目从规划、开发到实施的每个阶段都能高效整合和执行。
二、ROS2,全新的ROS
2.1 架构的颠覆
在ROS1的架构中,所有节点依赖于一个中央的Master进行管理和协调,这种单点控制的设计虽然简单易用,但在规模扩展和系统可靠性方面存在一定的局限性。
随着ROS2的推出,架构实现了重要的颠覆。ROS2引入了基于数据分发服务(DDS)的Discovery机制,彻底告别了对Master的依赖。通过这种方式,节点可以在没有中心管理的情况下自动发现和通信,显著提高了系统的灵活性和可扩展性。
这种转变不仅增强了网络的可靠性,还使得多机器人系统能够在更复杂和动态的环境中高效运行,满足现代机器人应用的需求。
2.2 API的重新设计
在ROS1中,大部分代码和API都是基于2009年2月的设计,这使得系统在功能上具备了一定的灵活性,但在用户体验和现代编程实践方面显得有些过时。
ROS2对用户API进行了全面的重新设计,旨在提高易用性、灵活性和功能性。尽管API的核心概念和使用方法与ROS1类似,
2.3 编译系统的升级
在ROS1中,项目的构建和管理主要依赖于rosbuild
和catkin
。虽然这些工具在当时为ROS生态系统提供了基本的构建功能,但随着机器人技术的发展和项目规模的扩大,需求也逐渐变得更加复杂。
ROS2引入了升级版的构建系统ament
和工具colcon
,在多个方面进行了显著改进。
三、架构:
3.1 ROS1与ROS2的主要区别概述
1. 操作系统支持
- ROS1: 主要支持Linux操作系统。
- ROS2: 扩展了支持范围,现可在Linux、Windows、macOS和实时操作系统(RTOS)上运行,提供了更大的灵活性和可用性。
2. 通讯机制
- ROS1: 使用TCPROS和UDPROS作为数据传输协议,提供基本的通信能力。
- ROS2: 采用数据分发服务(DDS)作为通信基础,支持多种通信模式(如发布/订阅、请求/应答),增强了消息传递的可靠性和灵活性。
3. 节点模型
- ROS1: 使用传统的发布/订阅模型,节点之间通过主题进行消息传递。
- ROS2: 引入了自动发现机制,允许节点在没有中心管理的情况下自动发现和通信,从而提高了系统的灵活性和可扩展性。
4. 进程管理
- ROS1: 使用Nodelet来实现高效的节点间通信,允许在同一进程内共享内存。
- ROS2: 引入了Intra-process通信机制,可以在同一进程中的节点之间高效地共享数据,减少了内存开销和通信延迟。
ROS2在多个方面对ROS1进行了重要的升级,从操作系统的支持到通信机制、节点模型和进程管理,旨在提供更高的灵活性、可扩展性和性能,以满足现代机器人应用的需求。
3.2 DDS
数据分发服务(Data Distribution Service, DDS)是一种用于实时系统和分布式应用的中间件标准,旨在提供高效、可靠的通信机制。它由对象管理组织(Object Management Group, OMG)制定,并广泛应用于机器人、自动驾驶、工业物联网(IIoT)、航空航天、医疗等领域。
在ROS2中,DDS作为底层通信机制,取代了ROS1中的TCPROS和UDPROS。这种转变使得ROS2能够利用DDS的多种优势,如自动发现、QoS策略和更灵活的消息传递机制,从而提升了机器人应用和分布式系统的通信能力。
四、核心概念:
4.1 工作空间(Workspace)
工作空间是开发过程的大本营,是开发者进行代码编写、测试和管理的环境。在ROS中,工作空间通常包含多个功能包(Package),并为整个开发过程提供组织和结构。
4.2 功能包(Package)
功能包是功能源码的聚集地,用于组织和存储与特定功能相关的代码、资源和依赖。每个功能包可以包含节点、库、配置文件及其他资源,便于模块化开发和重用。
4.3 节点(Node)
节点是机器人的工作细胞,代表系统中的独立计算单元。每个节点通常负责特定的任务,例如传感器数据处理、运动控制等。节点通过话题、服务和动作进行交互。
4.4 话题(Topic)
话题是节点间传递数据的桥梁。节点可以通过发布(publish)和订阅(subscribe)机制在话题上交换信息,使得数据流动在整个系统中得以实现。
4.5 服务(Service)
服务是节点间的“你问我答”机制,允许一个节点请求另一个节点执行特定操作并返回结果。服务适用于需要请求-响应模式的通信场景。
4.6 通信接口(Interface)
通信接口是数据传递的标准结构,定义了节点间消息的格式和类型。标准化的接口确保不同节点能够正确理解和处理传输的数据。
4.7 参数(Parameter)
参数是机器人系统的全局字典,用于存储配置数据和可调设置。通过参数服务器,节点可以访问和修改参数,以适应不同的运行环境和需求。
4.8 动作(Action)
动作是完整行为的流程管理,允许节点执行长期任务并提供反馈。它结合了发布/订阅和服务的特性,使得节点可以在执行过程中监控状态并进行中断。
4.9 分布式通信(Distributed Communication)
分布式通信是多计算平台之间的任务分配机制,允许不同计算单元(如不同的机器人、传感器、控制器等)协作完成复杂任务。它确保系统具有良好的扩展性和灵活性。
4.10 DDS(Data Distribution Service)
数据分发服务(DDS)是机器人的神经网络,提供高效、可靠的实时通信机制。它支持自动发现、质量服务(QoS)策略和多种消息传递模式,极大增强了ROS系统在分布式环境中的通信能力。
这些概念共同构成了ROS的基础架构,使得开发者能够以模块化的方式构建和管理机器人系统,实现高效的通信与协作。通过利用这些工具和机制,机器人应用可以达到更高的性能和灵活性。
五、编码:
5.1 ROS1:
5.2 ROS2