【ROS2】为什么要使用ROS2?《ROS2系统特性介绍》

2023-05-16

文章目录

  • 一、为什么要推出ROS2?
    • (一)ROS1的诞生
    • (二)ROS1存在的问题
      • (1)PR2特点
      • (2)ROS1存在问题
    • (三)ROS2设计思路
      • (1)ROS2针对场景
      • (2)设计思路
  • 二、ROS2系统特性
    • (一)系统架构
    • (二)通信架构

一、为什么要推出ROS2?

2010年,ROS1首次发布正式版本,其研发的初衷是为设计PR2(个人服务型机器人)共用的软件架构。但随着ROS1技术的普及,ROS1开始广泛融入各领域无人系统的研发,陆续暴露了系统的诸多问题。为了适应新时代机器人研发的需要,2022年5月,ROS开发者团队推出新版本ROS2。

(一)ROS1的诞生

2007年,斯坦福大学学生为开发PR2(个人服务型机器人)共用的软件架构,设计ROS的原型。2010年,Willow Garage公司推出ROS1的首个发行版。

(二)ROS1存在的问题

ROS1最早的设计目标:针对家庭服务机器人PR2,设计一款共用开发的软件架构。

(1)PR2特点

  • 体积大,算力充足:它搭载了工作站级别的计算平台和各种先进的通信设备,不用担忧算力不够,有足够的实力支持各种复杂的实时运算和处理;
  • 通讯可靠:由于是单兵作战,通信绝大部分都自己内部完成,那就可以用有线连接,保证了良好的网络连接,没有丢数据或者黑客入侵的风险;
  • 实验室产品,没有工程应用:这台机器人最终虽然小批量生产,但是由于高昂的成本和售价,也只能用于学术研究。
    图片: https://uploader.shimo.im/f/Ow7lSEcMZDNnjp9G.png!thumbnail?accessToken=eyJhbGciOiJIUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1QifQ.eyJhdWQiOiJhY2Nlc3NfcmVzb3VyY2UiLCJleHAiOjE2NTU5MDE2MzcsImZpbGVHVUlEIjoiNWJxbnIxYW5YZXRuTnpxeSIsImlhdCI6MTY1NTkwMTMzNywidXNlcklkIjo1Mjg5MzE0OH0.GWGRBZjPCN0lYVHUgymw_aUVMTByEKOUuQPhoYSvb60

(2)ROS1存在问题

随着ROS1技术的普及,ROS1融入各领域无人系统的研发。原本仅针对PR2设计的软件架构,就出现诸多问题:

  • 资源需求大:需要在资源有限的嵌入式系统中运行;
  • 系统抗干扰差:要在有干扰的地方保证通信的可靠性;
  • 产品应用差:要做成产品走向市场,甚至用在自动驾驶汽车和航天机器人上。

(三)ROS2设计思路

(1)ROS2针对场景

  • 多机器人系统:ROS2为多机器人系统的应用提供了标准方法和通信机制。
  • 跨平台:机器人应用场景不同,使用的控制平台也会有很大差异,为了让所有机器人都可以运行ROS2,ROS2可以跨平台运行于Linux、Windows、MacOS、RTOS,甚至是没有任何系统的微控制器(MCU)上。
  • 实时性:机器人运动控制和很多行为策略要求机器人具备实时性,比如机器人要可靠得在100ms内发现前方的行人,或者稳定的在1ms周期内完成运动学、动力学的解算,ROS2为类似这样的实时性需求提供了基本保障。
  • 网络连接:无论在怎样的网络环境下,ROS2都可以尽量保障机器人大量数据的完整性和安全性,比如在wifi信号不好的时候数据也要尽力发送过去,在有黑客入侵风险的场景下要对数据进行加密解密。
  • 产品化:大量机器人已经走向我们的生活,未来还会越来越多,ROS2不仅可以用于机器人研发阶段,还可以直接搭载在产品中,走向消费市场,这对ROS2的稳定性、强壮性也提除了巨大挑战。
  • 项目管理:机器人开发是一个复杂的系统工程,设计、开发、调试、测试、部署等全流程的项目管理工具和机制,也会在ROS2中体现,更方便我们去开发一款机器人。

(2)设计思路

ROS开发团队从长远角度考虑,选择推翻ROS1的软件架构,设计全新的ROS2操作系统。对系统架构、软件代码、系统编译均做出全面升级。

  • 系统架构:借助DDS通信架构,实现系统分布式
  • 软件接口:ROS2结合C++和Python3的最新标准,重新设计API接口
  • 系统编译:对大工程和python工程,更加友好。
    图片: https://uploader.shimo.im/f/TwtOG75H9HWf2Blv.png!thumbnail?accessToken=eyJhbGciOiJIUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1QifQ.eyJhdWQiOiJhY2Nlc3NfcmVzb3VyY2UiLCJleHAiOjE2NTU5MDE2MzcsImZpbGVHVUlEIjoiNWJxbnIxYW5YZXRuTnpxeSIsImlhdCI6MTY1NTkwMTMzNywidXNlcklkIjo1Mjg5MzE0OH0.GWGRBZjPCN0lYVHUgymw_aUVMTByEKOUuQPhoYSvb60

二、ROS2系统特性

(一)系统架构

在这里插入图片描述

  • 进程管理:在ROS1中,需要开启中央节点管理器Master,统一管理所有节点。如果Master节点出现故障,将严重影响ROS系统功能。在ROS2中,系统引入节点自发现机制,可有效提高系统鲁棒性。
  • 进程内通信:进程内部进行通信,ROS1和ROS2均采用共享内存的方式。
  • 进程间通信:在ROS1中,进程间进行通信主要依赖于底层的TCP\UDP协议,但是在ROS2中,引入复杂的DDS系统。

(二)通信架构

图片: https://uploader.shimo.im/f/GtDVwlZbCTUZcI0p.png!thumbnail?accessToken=eyJhbGciOiJIUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1QifQ.eyJhdWQiOiJhY2Nlc3NfcmVzb3VyY2UiLCJleHAiOjE2NTU5MDE2MzcsImZpbGVHVUlEIjoiNWJxbnIxYW5YZXRuTnpxeSIsImlhdCI6MTY1NTkwMTMzNywidXNlcklkIjo1Mjg5MzE0OH0.GWGRBZjPCN0lYVHUgymw_aUVMTByEKOUuQPhoYSvb60

ROS1是基于TCP/UDP通信系统,具有高延迟、丢数据、无法加密等特点。而ROS2在通信层面使用DDS通信协议。
DDS是物联网中一种通信协议,具有多个版本,DDS是一个国际标准,能够实现该标准的软件系统并不是唯一的。多个厂家可以提供的DDS系统,比如OpenSplice、FastRTPS等,每一家的性能不同,适用的场景也不同。
每一个厂家的软件接口是不同的,为了解决这个问题,ROS2设计了一个ROS Middleware,简称RMW,也就是指定一个标准的接口。比如如何发数据,如何收数据,数据的各种属性如何配置,都定义好了,如果厂家想要接入ROS社区,就得按照这个标准写一个适配的接口,把自家的DDS给移植过来,这样就把问题交给了最熟悉自家DDS的厂商。对于我们这些用户来讲,某一个DDS用的不爽,只要安装另一个,然后做一个简单的配置,程序一行的都不用改,轻松更换底层的通信系统。
对于开发者,在产品研发阶段,可以使用开源的DDS满足产品基本需求,在部署交付阶段,可以更换到更加稳定的DDS版本,以减小开发成本。
(三)核心概念
为了ROS开发者开发的延续性,ROS2保留了ROS1的基本概念。
在这里插入图片描述

ROS2系统学习,可参考:古月居ROS2入门21讲

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【ROS2】为什么要使用ROS2?《ROS2系统特性介绍》 的相关文章

  • 在Python中使用print输出时,出现UnicodeEncodeError错误,错误提示为“‘gbk‘ codec can‘t encode character ‘\u2022‘ in posit

    利用chatgpt一步步解决了这个问题 xff0c 感觉ChatGPT还是太强大了 问题描述 xff1a 在Python中使用print输出时 xff0c 出现UnicodeEncodeError错误 xff0c 错误提示为 39 gbk
  • openstack一些特性资料

    Keystone RBAC nova compute Cells Bare Metal Compute 是什么东西 xff1f http wiki openstack org blueprint nova compute cells htt
  • 【神经网络和深度学习-开发案例】 第二章 神经网络结构

    神经网络和深度学习 第二章 神经网络结构 案例 xff1a 使用神经网络识别手写数字 我将介绍一个神经网络 xff0c 它可以很好地对手写的数字进行分类 为了准备这一点 xff0c 它有助于解释一些术语 xff0c 让我们可以命名一个网络的
  • 2000页kubernetes操作手册,内容详细代码清晰,小白也能看懂

    现如今 xff0c Kubernetes业务已成长为新时代的IT基础设施 xff0c 并成为高级运维工程师 架构师 后端开发工程师的必修技术栈 毫无疑问 xff0c Kubernetes是云计算发展演进的一次彻底革命性的突破 xff0c 只
  • FreeRTOS代码阅读笔记:heap_4.c

    FreeRTOS中对于内存的管理当前一共有5种实现方式 xff08 作者当前的版本是10 1 1 xff09 xff0c 均在 Source portable MemMang 下面 xff0c 这里笔记下 heap 4 c和第二种方式比较相
  • (1)touchgfx 添加时钟控件

    第一步 xff1a 新建空白模版 添加图片 xff1a 放入 链接 xff1a https pan baidu com s 1NI6LUYrTUs64Z2jZE6AAQQ 提取码 xff1a 2odw 添加控件 xff1a 位置部件属性1T
  • 【基于51】红外寻迹智能小车 - 代码篇

    文章目录 前言一 准备工作二 使用步骤1 模块化编程2 电机模块3 小车动作模块4 PWM 和定时器 中断系统5 寻迹逻辑 总结 前言 关于硬件部分可以看我上次写的帖子https blog csdn net ZER00000001 arti
  • C++关键字override

    一 什么是override override的翻译是覆盖 实际上它在C 43 43 中可以检测哪些虚函数没有被重写并报错 注 xff1a 在派生类的成员函数中使用override时 xff0c 如果基类中无此函数 xff0c 或基类中的函数
  • 邻接矩阵和邻接表

    图的概述和存储结构 xff08 一 xff09 文章目录 前言一 图的概述1 xff09 图的分类2 xff09 图的要素 二 图的存储结构三 邻接矩阵四 邻接表 前言 有一种说法是程序是由数据结构和算法组成的 xff0c 这很能体现出数据
  • 图解迪杰斯特拉(Dijkstra)最短路径算法

    往期文章目录 干货满满 xff01 最小生成树 Prim算法 最小生成树 Kruskal算法 目录 前言 一 最短路径的概念及应用 二 Dijkstra迪杰斯特拉 1 什么是Dijkstra 2 逻辑实现 总结 前言 无论是什么程序都要和数
  • Vscode配置Git+快速入门,一篇学会80%的Git操作

    前言 团队开发中经常会用到Git xff0c 能极大简化开发的流程 xff0c 而个人开发也可以利用Git管理自己的代码 同样作为一个初学者 xff0c 我在学完Git之后写下这篇文章总结个人走过的坑 xff0c 大家一起进步 Git下载和
  • 【C++11】三大神器之——智能指针

    文章目录 前言 一 智能指针的原理1 RAII机制2 简单的实现 二 智能指针的用法1 智能指针的分类2 unique ptr基本语法 3 shared ptr基本语法 4 删除器5 weak ptr 前言 一 智能指针的原理 1 RAII
  • 【C++11】三大神器之——右值、移动语义、完美转发

    前言 如果你还不知道C 43 43 11引入的右值 移动语义 完美转发是什么 xff0c 可以阅读这篇文章 xff1b 如果你已经对这些知识了如指掌 xff0c 也可以看看有什么可以补充 x1f60f 一 右值 值类别vs变量类型 在正式认
  • 【C++11】三大神器之——包装器和绑定器

    前言 如果你还不知道 C 43 43 11 引入的包装器和绑定器是什么 xff0c 可以读读这篇文章 xff0c 看看有什么 启发 xff1b 如果你已经对包装器和绑定器了如指掌 xff0c 也可以读读这篇文章 xff0c 看看有什么 补充
  • 【神经网络和深度学习-开发案例】第四章 神经网络如何对数字进行分类

    神经网络和深度学习 第四章 神经网络如何对数字进行分类 案例 xff1a 使用神经网络识别手写数字 好了 xff0c 让我们来写一个程序 xff0c 学习如何识别手写的数字 xff0c 使用随机梯度下降和MNIST的训练数据 我们将用一个简
  • Win7下安装Ubuntu(双硬盘)的简要步骤

    0 硬件准备 一个至少4G大小的U盘 xff0c 用于刻录Ubuntu系统并安装 1 下载Ubuntu镜像及刻录 Ubuntu镜像 Ubuntu镜像可从官网下载 xff08 外网 xff0c 速度太慢 xff09 xff0c 或使用国内镜像
  • C++ Primer Plus拾遗

    本博文整理了C 43 43 Primer Plus前六章中的部分知识点 xff0c 一般为不常用的小技巧或基础概念性的内容 C与C 43 43 的语言特性 C语言特性 结构化编程 xff08 Structured Programming x
  • 时隔一年,对全国大学生智能车竞赛做段总结(五)

    早期粗糙的赛道元素处理 说这个没有别的意思 xff0c 就是觉得 xff0c 遇到实际应用上的问题 xff0c 虽然脑海里的知识技巧并不能让我们有多高明的手法去解决这个问题 xff0c 但也要努力去尝试 元素判断 这里的元素判断也是粗糙的
  • Windows7 VMware USB Arbitration Service启动失败解决

    转自 http huxiaodan666 blog 163 com blog static 162090542201091014749373 前几日安装了Windows7 xff0c 不过vmware虚拟机安装之后却无法使用usb 软件是官
  • Windows下以太坊公钥加密功能python实现

    文章目录 一 什么是公钥 私钥 地址二 实现过程1 从keystore文件中解出私钥以及私钥 gt 公钥 gt 地址2 利用公钥进行消息加密 解密 一 什么是公钥 私钥 地址 私钥 xff1a 32字节 xff08 256位 xff09 x

随机推荐