ROS2学习(1)ROS2简述

文章目录

  • 前言
  • 一、ROS1存在的问题
  • 二、什么是ROS2
    • 1、ROS2的设计目标
    • 2、ROS2的系统架构
    • 3、ROS2的关键中间件-DDS
    • 4、ROS2中的通信模型
    • 5、ROS2的编译系统


前言

  虽然众多开发者对ROS1进行了很多开发建设,对一些问题也提出了针对性的解决方案,但仍然无法解决ROS1中的根本问题。

一、ROS1存在的问题

  1. 多机器人系统
    多机器人系统可以解决单机器人性能不足、无法应用等问题,但ROS1中并没有构建多机器人系统的标准方法。
  2. 跨平台
    ROS1基于Linux系统,在其它系统上无法应用或者功能有限,这就对机器人开发者和开发工具提出了较高要求,局限性较大。
  3. 实时性
    很多场景下的机器人对实时性要求较高,而ROS1缺少实时性方面的设计。
  4. 网络连接
    ROS1中的分布式机制需要良好的网络才能保证数据的完整性,而且网络不具备数据加密、安全防护等功能,网络中的任意主机都可以获得节点发布或接受的消息数据。
  5. 产品化
    ROS1稳定性欠佳,ROS Master、节点等重要环节在很多情况下会莫名宕机。

二、什么是ROS2

  2017年,ROS2的第一个正式版本Ardent Apalone发布,ROS2不是ROS1的更新,而是整体架构的颠覆,综合性能也得到了较大增强。

1、ROS2的设计目标

  1. 支持多机器人系统
    增加多机器人系统的支持,提升多机器人之间通信的网络性能。
  2. 铲除原型和产品之间的鸿沟
    不仅针对科研领域,还关注机器人研究到应用之间的过渡,可以让更多机器人直接搭载ROS2系统走向市场。
  3. 支持微控制器
    不仅可以运行在X86和ARM上,还可以支持MCU等嵌入式微控制器,比如常见的ARM-M4、M7内核。
  4. 支持实时控制
    提高控制的时效性和整体机器人的性能。
  5. 支持跨平台
    ROS2不仅能运行在Linux上,还能运行在win、macOS、RTOS等系统上。

2、ROS2的系统架构

ROS2重新设计了系统架构,两代ROS之间架构的变化如下:
ROS2学习(1)ROS2简述_第1张图片

  1. OS层
    OS层,在ROS2中可以构建在linux上,也可以构建在其它系统上,甚至是没有操作系统的裸机。
  2. 中间层
    ROS1的通信系统基于TCPROS/UDPROS,而ROS2的通信系统基于DDS。DDS是一种分布式实时系统中数据发布/订阅的标准解决方案。
  3. 应用层
    ROS1依赖于ROS Master,而在ROS2中,节点之间使用一种称为“Discovery”的发现机制来帮助彼此建立连接。

3、ROS2的关键中间件-DDS

DDS,数据分发服务,2004年发布,是一种专门为实时系统设计的数据分发/订阅标准。其技术关键是以数据为核心的发布/订阅模型,即DCPS模型,这种模型创建了一个“全局数据空间”的概念,所有独立的应用都可以访问。

4、ROS2中的通信模型

ROS2中通信模型,加入了很多DDS的通信机制,如下:
ROS2学习(1)ROS2简述_第2张图片
关键概念如下:

  1. 参与者
    在DDS中,每一个发布者或订阅者都被称为参与者,对应于一个使用DDS的用户,可以使用某种定义好的数据类型来读/写全局数据空间。
  2. 发布者
    负责发布数据,支持多种数据类型的发布,可以与多个数据写入器相连,发布一种或多种主题的消息。
  3. 订阅者
    负责订阅数据,支持多种数据类型的订阅,可以与多个数据读取器相连,订阅一种或多种主题的消息。
  4. 数据写入器
    上层应用向发布者更新数据的对象,每个数据写入器对应一个主题,类似ROS1中的消息发布者。
  5. 数据读取器
    上层应用从订阅者读取数据的对象,每个数据读取器对应一个主题,类似ROS1中的消息订阅者。
  6. 话题
    与ROS1类似,需要定义一个名称和一种数据结构,但ROS2中的每个话题都是一个实例,可以存储该话题中的历史消息数据。
  7. 质量服务原则
    简称QoS Policy,这是ROS2新增的,用于控制各方面与底层的通信机制,主要从时间限制、可靠性、持续性、历史记录等方面满足用户针对不同场景的数据需求。

5、ROS2的编译系统

  ROS1后面的版本开始使用catkin编译系统,而ROS2中开始使用ament作为元编译系统,用来构建组成应用程序的多个独立功能包,其并不是全新的编译系统,而是catkin演化的版本。

ament编译系统主要解决如下问题:

  1. cmake centric
    catkin系统以cmake为中心,即使只包含python的代码,也需要cmake进行处理。但是,cmake并不支持python setuptools中的所有功能,而且很难在win上进行移植。
  2. devel space
    catkin系统构建完成后,在工作空间生成devel文件夹,与功能包安装完成后生成的install文件夹,冗余。devel中环境变量的设置问题,也会为开发者使用带来麻烦。
  3. CMAKE_PREFIX_PATH
    Catkin会将编译多个工作区的前缀存储到环境变量CMAKE_PREFIX_PATH中, 但是这种方法会干扰变量中的其他值, 在ament中, 不同工作区的前缀会放到不同的环境变量中。
  4. catkin_simple
    用于改善用户体验catkin的工具包,不稳定。ament也实现了类似的功能,可靠性更强。
  5. Building within a single CMake context
    使用catkin_make命令可以一次性编译工作空间中的所有功能包, 当存在相同命名的功能包时, 会编译失败, ament在这方面也进行了改善。

你可能感兴趣的:(ROS2,ROS2)