ROS 2基础概念#2:节点(Node)| ROS 2学习笔记

ROS 2节点简介

节点是执行计算的进程。节点组合在一起形成一个图(graph),并使用主题(topic)、服务(service)和参数服务器(paramter server)相互通信。这些节点旨在以细粒度的规模运行;机器人控制系统通常包含许多节点。例如,一个节点控制激光测距仪,一个节点控制机器人的轮式电机,一个节点执行定位,一个节点执行路径规划,一个节点提供系统的图形视图,等等。

ROS 中节点的使用为整个系统带来了多种好处。由于崩溃被隔离到各个节点,因此具有额外的容错能力。与单片系统相比,代码复杂性降低了。实现细节也被很好地隐藏,因为节点向图的其余部分公开了最小的 API,并且即使在其他编程语言中,也可以轻松替换替代实现。

所有正在运行的节点都有一个图形资源名称,用于向系统的其余部分唯一标识它们。例如,/hokuyo_node可以是广播激光扫描的 Hokuyo 驱动程序的名称。节点还有一个节点类型,它简化了引用文件系统上可执行节点的过程。这些节点类型是包资源名称,其中包含节点包的名称和节点可执行文件的名称。为了解析节点类型,ROS 会搜索包中具有指定名称的所有可执行文件,并选择找到的第一个。因此,您需要小心,不要在同一包中生成具有相同名称的不同可执行文件。

ROS 节点是使用ROS 客户端库(rcl,例如roscpp或rospy)编写的。

ROS 2在设计上采用了一些关键的改进和更新,特别是在节点(nodes)的实现和通信机制方面。在ROS 2中,节点依然是构建和运行机器人应用的基本单元,但与ROS 1相比,它们在多个方面有了显著的改进。

ROS 2节点改进和新特性

1. 改进的通信机制

ROS 2采用了DDS(Data Distribution Service)作为底层的中间件,这是一项面向实时系统的通信标准。与ROS使用的基于TCP/IP的通信相比,DDS提供了更高的性能、更好的可靠性和更灵活的消息传输模式(包括点对点和发布/订阅)。这使得ROS 2能够更好地支持大规模分布式系统和实时应用。

2. 节点自动发现机制

在ROS1中,节点自动发现机制依赖于一个名为ROS Master的中心化名称服务。ROS Master允许节点在启动时注册自己,并发现其他节点,以便它们可以相互通信。ROS Master充当了节点发现的中心节点,同时也带来了更多的可靠性的问题:当ROS Master崩溃的时候,整个系统也将无法工作。

而ROS2则因为采用了基于DDS(Data Distribution Service)的分布式消息传递系统,节点使用DDS的发现协议自动发现彼此,无需中心化的ROS Master。这种方式更加适合分布式系统,提高了系统的可扩展性和容错性。

3. 节点生命周期管理

ROS 2引入了节点生命周期的概念,这是一种管理节点状态(如初始化、激活、停止等)的机制。这允许系统以更可控和可预测的方式管理资源和行为,特别是在需要高度可靠性的应用中。节点生命周期管理还简化了错误处理和系统恢复,提高了系统的整体稳定性和可维护性。

4. 增强的安全性

ROS 2引入了一套安全增强功能,称为SROS(Secure ROS)。这些功能包括节点认证、加密通信和访问控制,可以有效保护机器人系统免受恶意攻击。在机器人越来越多地被应用于安全敏感的环境中,如家庭、医疗和公共空间,这些安全特性变得尤为重要。

5. 实时支持

通过利用DDS的实时通信能力,ROS 2被设计为可以支持实时应用。这意味着开发者可以创建能够满足特定时间约束的节点和系统,这对于控制和其他需要快速响应的任务至关重要。ROS 2还提供了实时调度和内存管理的工具,帮助开发者优化其应用的实时性能。

6. 跨平台支持

ROS 2旨在支持更广泛的操作系统和平台,包括Windows、Linux和macOS,甚至是嵌入式平台。这是通过使用更加便携的代码和依赖项,以及提供对不同操作系统特有功能的抽象来实现的。这种跨平台支持使得ROS 2能够应用于更多种类的机器人项目和环境中。

节点命令行工具

在ROS 2中,提供了一系列命令行工具(CLI)用于管理节点(nodes),这些工具使得开发者可以方便地与ROS 2系统交互,执行各种操作,如列出活动节点、获取节点信息、以及终止节点等。以下是一些主要的ROS 2命令行工具和它们的用途:

启动节点

ros2 run是用于启动ROS 2节点的命令。使用方法:

ros2 run [package_name] [executable_name]

管理节点

ros2 node是一个用于节点管理的命令行工具,它允许用户执行与节点相关的各种操作。

列出节点

要查看当前活动的节点,可以使用:

ros2 node list

这个命令会列出当前系统中所有活跃的节点名称。

获取节点信息

要获取特定节点的更多信息,如订阅的主题、发布的主题、提供的服务等,可以使用:

ros2 node info <node_name>

终止节点

在ROS 2中,直接终止节点的命令不像ROS 1中的rosnode kill那样直观。要终止一个节点,通常需要找到运行该节点的进程,然后使用系统命令(如kill在Linux上)来终止该进程。可以通过组合使用psgrep命令来查找节点的进程ID,然后使用kill命令终止它。

例如,如果你的节点名称包含talker,你可以使用以下命令查找并终止这个节点:

pgrep -f ros2.*talker

这将列出所有名称中包含talker的ROS 2节点的进程ID。然后,你可以使用kill命令加上进程ID来终止节点:

kill -SIGINT <process_id>

或者,如果想要终止所有匹配的进程,可以使用:

pkill -f ros2.*talker

作者Blog原文:ROS 2基础概念#2:节点(Node)| ROS 2学习笔记 - HY's Blog 

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

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

相关文章

进制转换md5绕过 [安洵杯 2019]easy_web1

打开题目 在查看url的时候得到了一串类似编码的东西&#xff0c;源码那里也是一堆base64&#xff0c;但是转换成图片就是网页上我们看见的那个表情包 ?imgTXpVek5UTTFNbVUzTURabE5qYz0&cmd 我们可以先试把前面的img那串解码了 解码的时候发现长度不够&#xff0c;那我们…

博弈论---Nim游戏(公平组合游戏,概念,证明异或为0就是必败态,示例)

目录 概念&#xff1a; 公平组合游戏ICG 有向图游戏 Nim游戏 先手&#xff09;必胜状态 先手&#xff09;必败状态 如何确定先手是否必胜或者必败&#xff08;都采用最优策略&#xff09; 证明&#xff1a;全部异或为0则是必败状态 综上&#xff1a; 例子 概念&#…

babylonjs入门-基础模版+调试GUI

基于babylonjs封装的一些功能和插件 &#xff0c;希望有更多的小伙伴一起玩babylonjs&#xff1b; 欢迎加群&#xff08;点击群号传送&#xff09;&#xff1a;464146715 官方文档 中文文档 案例传送门 ​ 懒得打字&#xff0c;粘贴复制一气呵成

linux系统---LNMP架构下部署Discuz社区论坛与Wordpress博客

目录 一、编译安装Nginx 1、关闭防火墙 2、安装依赖包 3、创建运行用户 4、压缩软件包并编译安装 5、软链接路径优化 ​编辑 6、添加Nginx系统服务 二.编译安装MySQL服务 1.安装依赖环境 ​编辑 2、创建运行用户 3、编译安装 ​编辑 4、修改mysql 配置文件 5、…

HUAWEI 华为交换机 配置基于VLAN的MAC地址学习限制接入用户数量 配置示例

组网需求 如 图 2-15 所示&#xff0c;用户网络 1 通过 LSW1 与 Switch 相连&#xff0c; Switch 的接口为 GE0/0/1 。用户网络2通过 LSW2 与 Switch 相连&#xff0c; Switch 的接口为 GE0/0/2 。 GE0/0/1 、 GE0/0/2 同属于 VLAN2。为控制接入用户数&#xff0c;对 VLAN2 进…

Go语言公开库与私有库及版本控制

公开库与私有库 go mod除了用作模块化开发之外&#xff0c;也是新版本go源码库的私有与共有的重要途径。 module gitee.com/xvwen/gocmd/cwgogengo 1.21.5在go mod中module的名称规定了该源码是否共有&#xff0c;如果该名称与远程git仓库地址一致&#xff0c;则该源码可以通…

如何合理布局子图--确定MATLAB的subplot子图位置参数

确定MATLAB的subplot子图位置参数 目录 确定MATLAB的subplot子图位置参数摘要1. 问题描述2. 计算过程2.1 确定子图的大小和间距2.2 计算合适的figure大小2.3 计算每个子图的position数据 3. MATLAB代码实现3.1 MATLAB代码3.2 绘图结果 4. 总结 摘要 在MATLAB中&#xff0c;使用…

【C++】认识类和对象

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f3a5;系列专栏&#xff1a;《C语言》 《数据结构》 《C》 《Linux》 《Cpolar》 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 文章目录 一、什么是面向对象&#xff1f;二、类的引入三、类的定义四、类的访问限定符与…

HarmonyOS—端云一体化组件

概述 DevEco Studio还为您提供多种端云一体化组件。集成端云一体化组件后&#xff0c;您只需进行简单配置即可向应用用户提供登录、支付等众多功能。 登录组件 您可使用端云一体化登录组件向应用用户提供登录和登出功能&#xff0c;目前支持帐号密码登录、手机验证码登录、以…

【ZooKeeper 】安装和使用,以及java客户端

目录 1. 前言 2. ZooKeeper 安装和使用 2.1. 使用Docker 安装 zookeeper 2.2. 连接 ZooKeeper 服务 2.3. 常用命令演示 2.3.1. 查看常用命令(help 命令) 2.3.2. 创建节点(create 命令) 2.3.3. 更新节点数据内容(set 命令) 2.3.4. 获取节点的数据(get 命令) 2.3.5. 查看…

STM32串口DMA发送接收(1.5Mbps波特率)机制

数据拷贝过程中不需要CPU干预&#xff0c;数据拷贝结束则通知CPU处理。 以115200bps波特率&#xff0c;1s传输11520字节&#xff0c;大约69us需响应一次中断&#xff0c;如波特率再提高&#xff0c;将消耗更多CPU资源 高波特率场景下&#xff0c;串口非常有必要使用DMA。 关…

整合swagger,并通过Knife4j美化界面

如果是前后端分离的项目&#xff0c;需要前端的参与&#xff0c;所以一个好看的接口文档非常的重要 1、引入依赖 美化插件其中自带swagger的依赖了&#xff0c;所以不需要再单独导入swagger的坐标了 <dependency><groupId>com.github.xiaoymin</groupId>&…

单片机独立按键控制LED状态

一、前言 这幅图是按键的抖动与时间的联系 按键抖动&#xff1a;对于机械开关&#xff0c;当机械鮑点断开、闭合时&#xff0c;由于机械触点的弹性作用&#xff0c;一个开关在闭合时不会马上稳定地接通&#xff0c;在断开时也不会一下子断开&#xff0c;所以在开关闭合及断开的…

长江路一号桥的安全监测革新

位于无锡新区的长江路一号桥&#xff0c;自1997年落成以来&#xff0c;一直是多功能的市政要道。大桥北侧连接供气管道&#xff0c;右侧则是城市供水管道&#xff0c;而桥底则设有蓝藻环保监测点。这意味着一旦此桥出现问题&#xff0c;其影响远超交通堵塞的层面。近年来&#…

electron打包前端项目

1.npm run build 打包项目文件到disk文件夹 2.安装electron:npm install electron 打开后进到/dist里面 然后把这个项目的地址配置环境变量 配置环境变量&#xff1a;在系统变量的path中添加进去 配置成功后&#xff0c;electron -v看看版本。 3.创建主程序的入口文件main.…

本地写的Bash脚本,Linux端运行报错:/bin/bash^M: bad interpreter: No such file or directory

背景 在本地写了个Bash Shell脚本&#xff0c;但上传到Linux端后加完权限执行时报错&#xff1a; &#xff08;脚本名&#xff1a;script.sh&#xff09; -bash: ./script.sh: /bin/bash^M: bad interpreter: No such file or directory 分析 这个错误通常是由于脚本文件的行…

【机器学习:Recommendation System】推荐系统

推荐系统&#xff08;或推荐系统&#xff09;是一类机器学习&#xff0c;它使用数据来帮助预测、缩小范围并在呈指数级增长的选项中找到人们正在寻找的内容。 【机器学习&#xff1a;Recommendation System】推荐系统 什么是推荐系统&#xff1f;用例和应用电子商务与零售&…

如何通过代理IP安全使用Linkedln领英?

LinkedIn是跨境外贸必备的拓客工具&#xff0c;世界各地的许多专业人士都使用领英来作为发布和共享内容的主要工具&#xff0c;这使得它成为跨境出海必备的渠道工具。 但是不少做外贸的朋友都知道&#xff0c;领英账号很容易遭遇限制封禁&#xff0c;但如果善用工具&#xff0…

【信息系统项目管理师】--【信息技术发展】--【现代化创新发展】--【大数据】

文章目录 第二章 信息技术发展2.2 新一代信息技术及应用2.2.3 大数据1.技术基础2.关键技术3.应用和发展 第二章 信息技术发展 信息技术是在信息科学的基本原理和方法下&#xff0c;获取信息、处理信息、传输信息和使用信息的应用技术总称。从信息技术的发展过程来看&#xff0c…

C语言:数据在内存中的存储

C语言&#xff1a;数据在内存中的存储 整数存储原码、反码、补码转换规则数据与内存的关系 大小端字节序浮点数存储IEEE 754标准存储过程取用过程 数据的存储范围 整数存储 原码、反码、补码 整数的2进制表示方法有三种&#xff0c;即原码、反码和补码 三种表示方法均有符号位…