ROS2 从头开始​​:第 1 部分 — 机器人操作系统简介

火星上的机器人(AI生成图像)

一、说明

ROS2是机器人的朋友,一个他们所依赖的平台,用于沟通、协调和控制,帮助他们实现目标。ROS2以DDS为核心,帮助机器人探索新世界、新任务、新可能性,是一个方便、便利的平台。从海龟到无人机,以及介于两者之间的一切,ROS2帮助机器人工作、学习和梦想,它是一个强大的工具。

二、ROS2和ROS1的区别 

        ROS2(机器人操作系统 2)是开源软件库和工具的集合,为开发和运行机器人应用程序提供了灵活的框架。它旨在成为在复杂、动态环境中运行的机器人的主要开发平台,并被设计为用于构建机器人应用程序的开放、可扩展可互操作的框架。

        ROS2 是 ROS(机器人操作系统)的后续版本,ROS 由机器人研究所 Willow Garage 于 2007 年创建。ROS 的创建是为了提供开发机器人应用程序的通用框架,此后它作为一个平台越来越受欢迎用于在研究和工业中构建机器人。ROS2 扩展了 ROS 的优势,同时引入了新的特性和功能,以满足机器人社区不断变化的需求。ROS 和 ROS2 之间的一些主要区别如下:
        通信基础设施:
        ROS2 使用基于数据分发服务 (DDS)的新通信基础设施,与基于TCP/UDP 协议的 ROS1 基础设施相比,它提高了性能、可扩展性和安全性。
        模块化架构:

        与ROS1的整体架构相比,ROS2具有更加模块化的架构,具有不同层的中间件,这使得更容易定制和扩展。
        操作系统和语言支持:
        与ROS1相比,ROS2支持多种编程语言和操作系统,包括Windows、Mac OS和实时操作系统
        测试、调试和部署:
        它包括用于测试、调试和部署机器人应用程序的新功能和工具,例如对持续集成和部署的改进支持,以及对调试和分析工具的支持。
        与ROS1的兼容性:
        其设计为向后兼容ROS1,允许现有的ROS1应用程序通过ros1桥轻松迁移到ROS2 。然而,ROS1和ROS2之间存在一些差异,当现有的ROS1应用程序迁移到ROS2时,可能需要对它们进行一些更改。

三、ROS 社区 

        ROS 社区是一个庞大而活跃的社区,由来自学术界、工业界和政府的对构建和使用机器人感兴趣的个人和组织组成。ROS社区参与ROS的开发和维护。

参考: https: //www.openrobotics.org/

        ROS 社区非常注重协作和共享,有许多资源可供人们了解和参与该项目。社区还组织了许多会议、研讨会和聚会,为人们提供了与他人联系并更多地了解 ROS 的机会。

        ROS 社区在 ROS 的成功中发挥了重要作用,并因其对该项目的贡献而受到广泛赞誉。👏

四、架构概述:

        由于需要处理各种任务和环境,以及机器人系统中使用的传感器、执行器和其他硬件组件数量不断增加,机器人系统变得越来越复杂。因此,需要一个灵活、可扩展且可靠的通信基础设施来支持复杂的机器人应用程序的开发。

ROS1 & 2 架构比较

        ROS2 以抽象的方式设计,更多地关注功能而不是重新发明轮子。这意味着ROS2提供了一组设计灵活、模块化的工具和库,允许开发人员快速高效地构建和部署机器人应用程序。因此,它具有各种软件层,例如rclcpp、rcl、rmw、和 DDS,为构建和运行机器人应用程序提供基础设施。这些部分旨在协同工作,为构建和运行机器人应用程序提供高级接口,同时隐藏底层技术的复杂性。

        DDS(数据分发服务)是一种中间件技术,为节点之间交换数据和通信提供高性能、可扩展且安全的方式。DDS用作ROS2的通信层。

        rmw(ROS Middleware)是一个中间件层,使用DDS为ROS2提供底层通信基础设施。Rmw抽象了DDS的复杂性,这意味着开发人员无需担心DDS如何工作的细节。

        rcl(ROS 客户端库)是一个中间件层,为使用 rmw 构建和运行机器人应用程序提供高级接口。Rcl抽象了rmw的复杂性,这意味着开发人员无需担心rmw如何工作的细节。

        rclcpp是 rcl 的 C++ 实现,它提供了一组 C++ 类和函数,用于使用 rcl 构建和运行机器人应用程序。Rclcpp 使使用 C++ 开发机器人应用程序变得更加容易,并且它提供了许多功能和工具,使开发和调试机器人应用程序变得更加容易。

五、ROS2 功能概述 

        计算图:
        ROS 图是任何 ROS 2 系统中最重要的部分。计算图是一个由节点组成的网络,这些节点一起工作来解决问题并相互通信。计算图中的每个“节点”都是一个进行某种计算的过程,节点之间的“边”是节点之间共享数据的方式。

        它是 ROS2 的重要组成部分,因为它可以让您组织和协调机器人应用程序的不同部分。通过连接计算图中的节点,您可以创建一个分布式系统,其中每个节点执行特定任务并根据需要与其他节点进行通信。

汽车软件检测图

        节点:
        节点是ROS系统的另一个重要部分。系统中的每个节点都有特定的工作要做,它们使用发布-订阅或请求-响应消息传递模式相互通信。一个节点可以向某个主题发送消息,对该主题感兴趣的其他节点可以订阅该主题并获取该消息。

        消息:
        主题称为“总线”,节点通过它们相互发送消息。消息是通过某个主题从一个节点发送到另一个节点的数据位。它们以 ROS 消息描述语言 (.msg) 编写,用于描述发送的数据的结构。消息可以包含许多不同类型的数据,从整数和浮点数等简单数据到数组和自定义消息类型等更复杂的数据

        在 ROS2 中,主题和消息的工作方式几乎与 ROS1 中相同,但它们是使用数据分发服务 (DDS) 中间件组合在一起的。rosidl生成器dds idl 工具用于将msg文件转换为DDS idl文件。该工具是 ROS2 构建系统的一部分,在构建具有消息定义的 ROS2 包时自动运行。


        发布者和订阅者:向某个主题发送消息节点称为发布者。从某个主题接收消息的节点称为订阅者

        在 ROS2 中,节点创建发布者对象并使用它向主题发送消息。节点创建订阅者对象并告诉它要订阅哪个主题,以便它可以接收消息。然后订阅者将收到发布到该主题的任何消息。

        服务:
        服务是节点向其他节点请求特定计算或数据并接收响应的一种方式。服务是使用请求-响应消息传递模式来实现的,其中想要请求计算或数据的节点(客户端将请求消息发送到另一个节点(服务器),该节点执行计算或检索数据并发送响应消息返回给客户端。

        回调和计时器:
        计时器是一种安排回调函数在特定时间或定期执行的方法。定时器在rclcpp lib中实现,它为分布式系统中的节点提供了通用的定时器参考。

        要在 ROS 中使用计时器,节点需要创建一个计时器对象并指定计时器到期时应执行的回调函数。节点还可以指定计时器的持续时间以及它应该是一次性计时器还是循环计时器。

        生命周期管理:
        节点的托管生命周期可以更好地控制 ROS 系统的状态。它允许roslaunch在允许任何组件开始执行其行为之前确保所有组件都已正确实例化。它提供了一种定义节点状态的机制,以便更好地控制节点的生命周期。

rclcpp_lifecycle接口提供生命周期管理规范的实现。生命周期管理规范定义了节点在其生命周期中可以经历的一组状态和转换,以及可以在节点生命周期中的特定点执行的一组操作。

ROS2设计

        执行器:
        许多机器人应用程序需要能够在实时限制内以可预测的方式运行。ROS 节点需要以可预测的方式进行调度,以便接收和发送通信数据、更新计时器或执行日志记录操作。ROS 2 中的执行器概念可以处理此类调度需求。

        Executor是负责管理ROS系统中节点执行组件。执行器负责调度节点的执行并确保它们接收到执行任务所需的资源。

        然而,ROS2执行器没有提供对执行管理的足够控制。例如,没有机制可以强制节点内回调的特定执行顺序。执行器忽略任务链的重要性。在机器人检测到障碍物后需要采取替代路径的情况下,这种行为将成为一个问题。这就是我们所说的优先级反转。意思是,这是当高优先级任务被低优先级任务间接抢占时发生的错误。因此,我们可以得出结论,ROS2调度是公平共享调度。

        在ROS2中,没有关于如何为这些执行器分配资源和分配优先级以及如何将这些执行器映射到CPU核心(如处理器亲和力)的通用指南。所以,ROS2 确实有局限性,尤其是在实时方面。

        我们将在后面的文章中更深入地讨论这个问题。

        节点发现:
        ROS-DDS 抽象层提供分布式目录服务,使节点能够相互查找并相互通信。节点可以使用 DDS 服务来查找正在发布或订阅某些主题的其他节点并与之通信。这些节点是在幕后自动找到的。

        当节点启动时,它会告诉网络上具有相同 ROS 域(您可以使用 ROS DOMAIN ID 环境变量设置)的其他节点它的存在。节点用有关其自身的信息响应此广告,以便可以建立正确的连接并且节点可以相互通信。

        总之,ROS2 是一个功能强大的开源机器人平台,为构建和部署机器人应用程序提供了广泛的工具和功能。与其前身 ROS 相比,它提供了改进的可扩展性、性能以及对各种平台和语言的支持。如果您有兴趣了解有关 ROS2 的更多信息以及它如何帮助您构建和部署机器人,可以在线获取许多资源,包括 ROS2 文档、教程和社区论坛。

        感谢您关注这篇 ROS2 简介帖子。在本系列文章中,我们将涵盖与 ROS2 相关的各种编程主题,包括节点、主题、服务、操作等主题。在下一篇文章中,我们将深入研究 ROS2 编程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/85774.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

单元测试的重要性

前言 在日常生活中,单元测试无论是对软件测试人员还是开发人员,都扮演着重要的角色。这主要是因为,单元测试在开发阶段,可以确保每个组件和程序都能够正常的运行。 很多开发人员都讨厌编写单元测试,但是它可以在开发…

李航老师《统计学习方法》第2章阅读笔记

感知机(perceptron)时二类分类的线性分类模型,其输入为实例的特征向量,输出为实例的类别,取1和-1二值。感知机对应于输入空间(特征空间)中将实例划分为正负两类的分离超平面 想象一下在一个平面…

并发编程系列-CAS

锁(lock)的代价 锁是用来做并发最简单的方式,其代价也是最高的,Java在JDK1.5之前都是靠synchronized关键字来加锁。但是加锁机制会有如下几个问题: 加锁、释放锁会需要操作系统进行上下文切换和调度延时,在…

【操作系统笔记十二】Linux常用基础命令

Linux 常用快捷键 Tab 命令或路径等的补全键,特别常用的快捷键Ctrl insert 复制命令行内容(常用可提高效率)Shift insert 粘贴命令行内容(常用可提高效率)Ctrl C 中断当前任务(退出)Ctrl Z…

备份服务器数据库并保存到Git仓库

备份项目及数据库脚本 #!/bin/bash # MySQL数据库信息 DB_HOST"localhost" DB_USER"root" DB_PASS"************" DB_NAME"my-space" # 导出文件目录 EXPORT_PATH"/home/MySpace/mysql" # 获取当前时间并格式…

ES6-解构赋值

可以将值从数组或属性从对象提取道不同的变量中。 交换变量 let a 1 let b 2 [ a, b ] [ b, a ]//a2,b1 数组 const arr [1,2,3,4]; let [a,b,c,d] arr;//a1,b2,c3,d4 let [foo] []; let [bar, foo] [1];//bar1,fooundefined 防止从数组中取出一个值为undefined的对…

逆向-beginners之结构体-成员地址访问

#include <stdio.h> #include <time.h> /* * 字节型数组 */ int main() { struct tm t; time_t unix_time; int i0, j0; unix_time time(NULL); localtime_r(&unix_time, &t); for (i 0; i < 9; i) { for (j 0; j < 4; j…

海外代理IP是什么?如何使用?

一、海外代理IP是什么&#xff1f; 首先&#xff0c;代理服务器是在用户和互联网之间提供网关的系统或路由器。它是一个服务器&#xff0c;被称为“中介”&#xff0c;因为它位于最终用户和他们在线访问的网页之间。 海外IP代理是就是指从海外地区获取的IP地址&#xff0c;用…

Zookeeper高级_四字命令

之前使用stat命令来验证ZooKeeper服务器是否启动成功&#xff0c;这里的stat命令就是ZooKeeper 中最为典型的命令之一。ZooKeeper中有很多类似的命令&#xff0c;它们的长度通常都是4个英文字母&#xff0c;因此我们称之为“四字命令”。 添加配置 vim zoo.cfg 4lw.commands…

C++之类和函数权限访问总结(二百二十七)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

window便捷使用技巧(LTS)

目前很乱&#xff0c;有空整理 %AppData%\Microsoft\Windows\Recent\AutomaticDestinations Windows应用程序设置快捷键 AutoHotkey组合键设置 热键重复调用 powertoy工具连接 Windows常用shell命令 2 台电脑共享键鼠最简单教程 QTTabBar 「资源管理器」该有的样子 win10电脑…

为什么网络安全缺口很大,而招聘却很少?学网络安全真的没有前途吗?

2020年我国网络空间安全人才数量缺口超过了140万&#xff0c;就业人数却只有10多万&#xff0c;缺口高达了93%。这里就有人会问了&#xff1a; 1、网络安全行业为什么这么缺人&#xff1f; 2、明明人才那么稀缺&#xff0c;为什么招聘时招安全的人员却没有那么多呢&#xff1…

设计模式再探——宏观篇

目录 一、背景介绍二、思路&方案三、过程1.宏观介绍2.目的与意义3.七大原则的定义与边界4.思路由来 四、总结五、升华 一、背景介绍 最近在做产品技术建模的过程中&#xff0c;一些地方刻意用到了设计模式&#xff0c;而一些地方也用到了但是并不是很明确。 于是乎就带着…

容器核心技术之Namespace与Cgroup

容器是一种流行的虚拟化技术&#xff0c;它允许我们在同一台计算机上与其他进程在独立环境中运行进程。那么容器是如何做到这一点的呢&#xff1f;为此&#xff0c;容器是从 Linux 内核的一些新功能构建的&#xff0c;其中两个主要功能是“namespace”和“cgroup”。 1.Namespa…

蓝桥杯 题库 简单 每日十题 day5

01 字符计数 字符计数 题目描述 给定一个单词&#xff0c;请计算这个单词中有多少个元音字母&#xff0c;多少个辅音字母。 元音字母包括a,e&#xff0c;i,o&#xff0c;u&#xff0c;共五个&#xff0c;其他均为辅音字母。 输入描述 输入格式&#xff1a; 输入一行&#xff0…

形式化验证方法研究综述

摘要&#xff1a;形式化验证是证明软件、硬件或系统正确性的一种方法&#xff0c;近年来受到了越来越多的关注。 本文对形式化验证的研究进行了综述。首先介绍了形式化验证的基本概念&#xff0c;然后重点介绍了形式化验证的三种技术&#xff0c;包括模型检测、定理证明和等价性…

华为华三40G带宽互通连接测试

郁闷了几天了&#xff0c;今天竟然做了件爽事&#xff01;慢慢说来。 今天下雨&#xff0c;下午娃上学&#xff0c;我送老婆去学校上课。之后到实验室&#xff0c;今年申请买的两台交换机正好送到&#xff1a; S5500V2-54S-EI&#xff1a;48个10/100/1000TX以太网端口&#x…

三维模型3DTile格式轻量化在数据存储的重要性分析

三维模型3DTile格式轻量化在数据存储的重要性分析 三维模型3DTile格式轻量化在数据存储中占有重要地位。随着科技的不断发展&#xff0c;尤其是空间信息科技的进步&#xff0c;人们对于三维地理空间数据的需求日益增长。然而&#xff0c;这类数据通常具有大尺度、高精度等特点&…

stdio.h

1.#include <corecrt.h> 1.1#include <vcruntime.h> 2.#include <corecrt_wstdio.h> 2.1#include <corecrt.h> 2.2#include <corecrt_stdio_config.h> 2.2.1#include <corecrt.h>

实例讲解Spring boot动态切换数据源

前言 在公司的系统里&#xff0c;由于数据量较大&#xff0c;所以配置了多个数据源&#xff0c;它会根据用户所在的地区去查询那一个数据库&#xff0c;这样就产生了动态切换数据源的场景。 今天&#xff0c;就模拟一下在主库查询订单信息查询不到的时候&#xff0c;切换数据…