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

news2024/11/28 12:56:49

火星上的机器人(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.coloradmin.cn/o/1028469.html

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

相关文章

代码随想录--链表-反转链表

题意:反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 双指针 public class Main {public static class ListNode {int val;ListNode next;ListNode(int x) {val x;}}public ListNode reverseList(L…

涨知识,关于代码签名证书10大常见问题解答

在当今互联网时代,各种软件程序充斥着这个网络世界,大大小小的软件层出不穷,如何让用户信任软件并下载软件,是众多软件开发公司需要解决的问题,由此代码签名证书应运而生,提供了软件程序的身份认证、完整性…

uni-app获取元素具体位置获取失败

场景:想要通过链接跳转传递catid&catid2类别id,商品类别id 跳到这一页左侧对应的类别栏上面,同时跳到右侧列表滚动到对应商品那一块区域。 遇到的问题:在for循环中通过绑定id获取不到商品列表的具体位置。 原因:在onReady函数和mounted函…

【Java】医院智能导诊系统源码:解决患者盲目就诊问题、降低患者挂错号比例

医院智能导诊系统解决患者盲目就诊问题,减轻分诊工作压力。降低患者挂错号比例,优化患者就诊流程,有效提高线上线下医疗机构接诊效率。患者可通过人体画像选择症状部位,了解对应病症信息和推荐就医科室。 一、医院智能导诊系统概述…

科锐逆向第二阶段(一)SDK

基本概念 什么是 SDK SDK 是软件开发工具包(Software Development Kit)的缩写。它是一个集成了软件开发所需工具、库文件、示例代码和文档等资源的软件包。 SDK 通常由软件开发公司或平台提供,旨在帮助开发人员构建、测试和部署特定类型的…

Offset Explorer(Kafka消息可视化工具)报invalid hex digit ‘{‘错误解决方法

解决办法: 根据代码的实际情况,设置成对应的值。设置完成后点update、refresh更新。

excel 通过SUMIF关键词统计词频

经常会对句子中含有的某些词汇数量进行统计,excel 也可以实现初级的操作 比如有如下文本 想要统计旅游和好两个词在这些文本中出现了多少次 用如下函数即可 SUMIF(A:A,"*"&C2&"*",B:B) 可以很方便的统计出好出现了3次数据&#xff0…

Python爬虫有哪些库,分别怎么用

目录 Python常用爬虫库 代码示例 requests BeautifulSoup Scrapy Selenium PyQuery Axios requests-html pyppeteer 总结 Python是一种非常流行的编程语言,因其易学易用和广泛的应用而受到开发者的喜爱。在Python中,有许多库可以用于爬虫程序…

“探索前后端分离架构下的Vue.js应用开发“

目录 引言1. 前后端分离2. Vue的简介1. Vue.js是什么?2. 库和框架的区别3. MVVM的介绍 3. Vue的入门数据的双向绑定数据的单项绑定 4. Vue的生命周期总结 引言 在当今互联网时代,前后端分离架构已经成为了Web应用开发的主流趋势。前后端分离架构的核心思…

【二叉树-02】二叉树的最近公共祖先-力扣 236 题

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

DC系列靶机3通关教程

文章目录 信息收集主机扫描端口扫描目录扫描 漏洞查找Joomscansearchsploit 漏洞利用SQL注入密码爆破反弹shell得到交互shell 提权查看操作系统版本信息搜索操作系统漏洞利用exp提权查找flag 信息收集 主机扫描 arp-scan -l端口扫描 nmap -p- -A 192.168.16.162-A&#xff1…

月木学途开发 5.轮播图模块

概述 效果图 数据库设计 轮播图表 DROP TABLE IF EXISTS banner; CREATE TABLE banner (bannerId int(11) NOT NULL AUTO_INCREMENT,bannerUrl longtext,bannerDesc varchar(255) DEFAULT NULL,bannerTypeId int(11) DEFAULT NULL,PRIMARY KEY (bannerId) ) ENGINEInnoDB AU…

【UE 粒子练习】06——创建条带类型粒子

效果 下图呈现的是一种条带粒子跟随普通粒子移动的效果。其中,条带粒子为下图中蓝色部分,橙色部分为普通粒子 步骤 1. 新建一个材质,命名为“Mat_Ribbon”,将用于条带粒子材质 材质域设置为表面,混合模式设置为半透明…

DeepWalk实战---Wiki词条图嵌入可视化

DeepWalk是2014年提出的一种Graph中的Node进行Embedding的 算法,是首次将自然语言处理领域NLP中的 word2vec拓展到了graph。万事万物皆可embedding,所以DeepWalk我感觉在图机器学习中具有非常强的应用价值。 1. 首先打开Anaconda Prompt (Anaconda)&…

分享一个基于uniapp+springboot技术开发的校园失物招领小程序(源码、lw、调试)

💕💕作者:计算机源码社 💕💕个人简介:本人七年开发经验,擅长Java、Python、PHP、.NET、微信小程序、爬虫、大数据等,大家有这一块的问题可以一起交流! 💕&…

海国图志#7:这一周难忘瞬间,吐血整理,不得不看

这里记录每周值得分享的新闻大图,周日发布。 文章以高清大图呈现,解说以汉语为主,英语为辅,英语句子均来自NYTimes、WSJ、The Guardian等权威媒体原刊。 归档时段:20230911-20230917 摩洛哥,阿米茨米兹 在阿…

calibre和cpolar搭建一个私有的网络书库

Kindle中国电子书店停运不要慌,十分钟搭建自己的在线书库随时随地看小说! 文章目录 Kindle中国电子书店停运不要慌,十分钟搭建自己的在线书库随时随地看小说!1.网络书库软件下载安装2.网络书库服务器设置3.内网穿透工具设置4.公网…

树莓派4b装系统到运行 Blazor Linux 本地程序全记录

在Linux下运行gui程序,咱也是第一次做,属于是瞎子过河乱摸一通,写得有什么不对和可以优化的地方,希望各位看官斧正斧正. ##1. 下载烧录器 https://www.raspberrypi.com/software/####我选择的是Raspbian 64位系统,并配置好ssh账号密码,wifi,以便启动后可以直接黑屏ssh连接 ##…

全流程HEC-RAS 1D/2D水动力与水环境模拟丨恒定流模型(1D/2D)、一维非恒定流、二维非恒定流模型、HEC-RAS水质模型

目录 ​专题一 ​水动力模型基础 专题二 恒定流模型(1D/2D) 专题三 一维非恒定流 专题四 二维非恒定流模型(一) 专题五 二维非恒定流模型(二) 专题六 HEC-RAS的水质模型 专题七 高级主题 更多应用 水动力与水环境模型的数…

【自学开发之旅】Flask-会话保持-API授权-注册登录

http - 无状态-无法记录是否已经登陆过 #会话保持 – session cookie session – 保存一些在服务端 cookie – 保存一些数据在客户端 session在单独服务器D上保存,前面数个服务器A,B,C上去取就好了,业务解耦。—》》现在都是基于token的验证。 以上是基…