文章目录

  • 前言
  • 一、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在这方面也进行了改善。

ROS2学习(1)ROS2简述相关推荐

  1. ROS2学习笔记(2)什么是ROS2 nodes

    什么是ROS2 nodes 先了解一下ROS2 graph.ROS2 graph是一个ROS2元素同时处理数据的网络.它包含了所有可执行程序和它们之间的连接. ROS中每个负责单独功能的模块叫做节点( ...

  2. ROS2学习笔记(十)-- ROS2 launch启动文件

    简介:接触过ROS1的同学对launch肯定不陌生,在ROS1中,我们常用launch实现node和master同时启动.多节点同时启动配置等功能,ROS2中的launch也是用于多节点启动.配置功能 ...

  3. ROS2学习笔记(三)-- 采集虚拟仿真环境图像并发布

    简介:ROS2功能的学习我们还是在基于OpenAI的gym虚拟仿真环境中来完成,gym虚拟仿真环境安装请参考另一篇教程,这里不再重复说明,接下来我们开始创建一个ROS2的功能节点,并发布虚拟仿真环境小 ...

  4. ROS2学习笔记(一)——安装ROS2和简介

    一.简介 ROS是一种基于匿名发布/订阅机制的中间件,允许不同ROS进程之间的消息传递.         在任何ROS 2系统的核心是ROS图.ROS图是指ROS系统中的节点网络和它们之间的连接. 所 ...

  5. ROS2学习笔记2--介绍小乌龟教程和rqt

    概要:这篇主要介绍小乌龟教程和rqt 环境:ubuntu20.04,ros2-foxy,vscode 2.1.2介绍小乌龟教程和rqt(原文:https://docs.ros.org/en/foxy/ ...

  6. ROS2学习系列——(小海龟安装和使用)

    小海龟是一个用于学习ROS2的轻量级模拟器,它说明了ROS2在最基本的层面上所作的事情. (1)启动终端,运行代码: sudo apt update sudo apt install ros-foxy ...

  7. ROS2学习笔记22--使用launch启动/监听多个node节点

    概要:这篇内容主要介绍如何使用launch启动/监听多个node节点 环境:ubuntu20.04,ros2-foxy,vscode 最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常 ...

  8. ROS2学习笔记(十一)-- ROS2 bag数据记录与回放

    简介:ROS2提供了ros2 bag命令,可以记录指定主题的数据到文件中,也可以将记录下的内容再发布出来,相当于是数据的回放,除了通过命令行的方式实现数据记录以外,也可以通过编程实现主题数据记录以及而 ...

  9. 深度学习计算机视觉发展简述

    深度学习计算机视觉发展简述   1995年诞生的LeNet5网络是最早的卷积神经网络之一,也是现在很多深度神经网络架构的起点.LeNet5利用卷积.参数共享.池化等操作提取图像特征,再利用全连接神经网 ...

最新文章

  1. eclipse调用JNI之环境的搭建
  2. java condition_死磕 java同步系列之ReentrantLock源码解析(二)
  3. The current directory must be set to the ITT directory解决办法
  4. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_09 序列化流_5_InvalidClassException异常_原理...
  5. WebLogic简单抓鸡大法
  6. SQOOP的安装配置_Linux伊甸园开源社区-24小时滚动更新开源资讯,全年无休!
  7. html页面右下角添加js广告,JS右下角悬浮广告代码的简单示例
  8. Java 纸牌游戏 牛牛 逻辑代码 实现
  9. 10款优秀的在线格式转化器
  10. python明文密文_python实现对输入的密文加密
  11. DNS域名解析中A、AAAA、CNAME、MX、NS、TXT、SRV、SOA、PTR各项记录的作用
  12. 100个经典C语言程序(益智类)
  13. 基于jsp的网上作业批改系统
  14. 计算机科学与技术显卡要求,准大一新生,遥感科学与技术专业,对电脑有什么要求?...
  15. 自动化测试实施的前提条件
  16. 怎样在网页添加访问计数器?
  17. python给折线图区间填充颜色_Python气象数据处理与绘图(3):以EOF为例画柱状图(折线图)和带地图底图的填色图...
  18. 月计划表代码Android,基于Android的多功能日程表设计与实现.doc
  19. 灰度变换,gama变换,对数,反对数变换
  20. SEO人员如何利用专题页策略来做排名优化

热门文章

  1. 如何编制试算平衡表_会计试算平衡表怎么编制
  2. vb.net图书管理系统
  3. TokenGazer评级丨TRON:BTT众筹谋求熊市破局,生态繁荣但数据受到质疑
  4. 直播回顾|论道原生:云原生时代的中间件
  5. 计网:网络层协议ICMP
  6. java获取一天的开始时间和结束时间
  7. win7系统屏幕不休眠,怎么设置
  8. 【微信技术-微信小程序】------- 渐进式骨架屏(加载流)(第二篇)
  9. 深度学习的简介、领域、框架和实际应用概述
  10. 天钰原装FP6606ACAP6芯片,仅5V至20V VBUS电源,过电压保护