ROS2学习(1)ROS2简述

2023-05-16

文章目录

  • 前言
  • 一、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之间架构的变化如下:
在这里插入图片描述

  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在这方面也进行了改善。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ROS2学习(1)ROS2简述 的相关文章

  • Arduino--LCD1602(IIC)

    xff08 1 xff09 简介 前篇文章介绍了LCD1602的四位数据线控制方法 xff1a https blog csdn net u011816009 article details 106573622 但是该方法还是需要较多的IO口

随机推荐

  • Px4 ULog文件详解

    Px4 ULog文件详解 简介数据类型文件组织文件头定义段消息标记位消息格式定义消息信息消息复合信息消息参数消息 数据段订阅消息取消订阅消息日志数据消息字符串消息同步消息丢失 附录 简介 ULog 是用于记录数据的文件格式 xff0c 该格
  • 开发日记(一)

    这是自己编程第二天 xff0c 自己解决了好几个问题 xff0c 觉得很有成就感 xff0c 决定写下以后开发中遇到的问题 1 在多个Activity中传递数据 xff0c 之前只学过绑定基本的putExtra xff0c 今天上网一搜 x
  • 源程序生成控制流图和du-path

    最近上 源代码分析技术 这个课 xff0c 老师让写一个程序 xff0c 由一段c代码 xff0c 生成生成控制流图和du path xff0c 控制流图不用解释了 xff0c 说一下du path xff0c 这个术语是针对变量来说的 x
  • pandas使用笔记

    DataFrame使用笔记 dates 61 pd date range span class hljs string 39 20160728 39 span periods 61 span class hljs number 6 span
  • keras

    大神笔记 xff0c 转载自http blog csdn net u012162613 article details 45397033 Keras简介 Keras是基于Theano的一个深度学习框架 xff0c 它的设计参考了Torch
  • gensim similarity计算文档相似度

    向量空间模型计算文档集合相似性 0 将原始输入的词转换为ID xff0c 词的id表示法简单易用 xff0c 但是无法预测未登记词 xff0c 难以挖掘词关系 xff1b 词汇鸿沟 1 任意两个词之间是独立的 xff0c 无法通过词的ID来
  • doc2vec计算文档相似度

    doc2vec是基于word2vec的 xff0c word2vec对于计算两个词语的相似度效率比较好 xff0c 修改了word2vec中的cbow和skip gram模型 xff0c paragraph vector直接得到doc向量
  • 多维中维度的理解

    项目有段时间了 xff0c 今天需要做一个需求查询调研 必须要照顾楼下业务人员理解的方式吧多维度表述清楚 还真不好讲 xff1a 原以为维度就是一个基准点 xff0c 一个看事情的角度 xff0c 静下来想 xff0c 要描述出来好像还真不
  • Spring注解

    注解介绍 注解有两个作用 xff1a 标注和注入 标注 xff1a 类路径下自动扫描 xff0c 减少在xml中配置bean 例如 64 Component 64 Service注入 xff1a 自动装配 xff0c 需要类的地方直接加注解
  • akka基础

    基本概念消息传递API 通用API消息传递方式 Future机制Actor生命周期处理状态和错误 监督kill actor生命周期监控和DeathWatch安全重启状态 纵向扩展 Router调度方式使用策略 横向扩展 订阅集群事件启动 退
  • ROS学习(9)自定义移动机器人模型Gazebo仿真

    文章目录 前言一 gazebo启动二 创建编译功能包三 更新xacro文件1 更新robot base xacro2 更新robot camera xacro3 更新robot lidar xacro4 更新robot xacro 四 更新
  • ROS学习(11)使用ROS创建地图

    文章目录 前言一 创建编译功能包二 更新启动文件三 启动模型四 保存地图五 加载地图六 总结 前言 创建地图是一件比较复杂的工作 xff0c ROS利用map server地图服务器 xff0c 借助激光雷达和机器人的里程信息来完成这项工作
  • ROS学习(12)使用ROS创建自定义地图

    文章目录 前言一 新建环境二 创建编译功能包三 新建 world文件四 新建world启动文件五 更新启动文件六 建图 前言 上一篇使用的是柳树车库环境 xff0c 实现完整建图工作比较复杂 xff0c 所以准备新建一个简单点的环境 xff
  • ROS学习(13)自定义机器人的ROS导航

    文章目录 前言一 创建编译功能包二 代价地图配置三 基本局部规划器配置四 创建导航包的启动文件五 运行启动文件六 为导航功能包集设置rviz七 导航仿真 前言 上一篇针对我家户型 xff0c 完成了自定义环境的建图工作 本篇主要完成对导航功
  • ROS学习(开篇)Ubuntu16.04安装ROS Kinetic详细教程

    文章目录 前言一 添加ROS软件源 xff08 sources list xff09 二 添加密钥三 更新apt功能包列表四 安装ROS五 初始化 rosdep六 将ROS环境变量添加到 bashrc文件中七 安装rosinstall等工具
  • ROS学习(14)自定义四轮小车的ROS导航

    文章目录 前言一 创建编译功能包二 代价地图配置三 基本局部规划器配置四 创建导航包的启动文件五 导航仿真六 总结 前言 本篇为自定义四轮小车的ROS导航仿真 xff0c 与前面自定义机器人导航类似 该篇源码非原创 xff0c 特此说明 x
  • ROS学习(24)plugin插件

    文章目录 前言一 工作原理二 具体实现1 创建基类2 创建plugin类3 注册插件4 编译插件的动态链接库5 将插件加入ROS6 调用插件7 运行效果 前言 ROS中的插件就是可以动态加载的扩展功能类 ROS中的pluginlib功能包提
  • ROS学习(28)Web GUI

    文章目录 前言一 rosbridge suite元功能包二 roslibjs ros2djs ros3djs功能包三 tf2 web republisher功能包四 创建web应用五 使用web浏览器控制机器人 前言 ROS Web too
  • 参看了别人写的面试讲解

    转帖 ERP顾问的面试 新的一年就要开始了 xff0c 有不少的同行估计都在想着跳槽了 今天我就把自己的当面试官的感受给大家谈谈 xff0c 也许 xff0c 从中 xff0c 你可以掌握 ERP 实施顾问面试的技巧 在来年 xff0c 当
  • ROS2学习(1)ROS2简述

    文章目录 前言一 ROS1存在的问题二 什么是ROS21 ROS2的设计目标2 ROS2的系统架构3 ROS2的关键中间件 DDS4 ROS2中的通信模型5 ROS2的编译系统 前言 虽然众多开发者对ROS1进行了很多开发建设 xff0c