ROS2学习(1)ROS2简述

ROS2是ROS1的重大升级,旨在解决ROS1的多机器人支持、跨平台、实时性和安全性等问题。ROS2引入DDS通信中间件,提供更高效的数据分发服务,并支持实时控制和微控制器。它还加强了网络安全性,支持多平台运行,包括Windows、macOS和RTOS,以及更好的编译系统ament,优化了开发体验和产品化能力。
摘要由CSDN通过智能技术生成


前言

  虽然众多开发者对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之间架构的变化如下:
在这里插入图片描述

  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的通信机制,如下:
在这里插入图片描述
关键概念如下:

  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在这方面也进行了改善。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敲代码的雪糕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值