【ROS2指南-20】了解ROS2组件的用法
在单个进程中组合多个节点
目录
-
背景
-
运行演示
-
发现可用组件
-
使用 ROS 服务 (1.) 与发布者和订阅者的运行时组合
-
使用 ROS 服务 (1.) 与服务器和客户端的运行时组合
-
使用 ROS 服务的编译时组合 (2.)
-
使用 dlopen 的运行时组合
-
使用启动动作组合
-
-
高级主题
-
卸载组件
-
重新映射容器名称和命名空间
-
重新映射组件名称和命名空间
-
-
作为共享库的可组合节点
背景
请参阅概念文章。
运行演示
演示使用来自rclcpp_components、ros2component和组合包的可执行文件,可以使用以下命令运行。
发现可用组件
要查看工作区中已注册和可用的组件,请在 shell 中执行以下命令:
$ ros2 component types compositioncomposition::Talkercomposition::Listenercomposition::Servercomposition::Client
使用 ROS 服务 (1.) 与发布者和订阅者的运行时组合
在第一个 shell 中,启动组件容器:
ros2 run rclcpp_components component_container
ros2
通过命令行工具验证容器是否正在运行:
$ ros2 component list /ComponentManager
在第二个 shell 中(参见talker源代码)。该命令将返回加载组件的唯一 ID 以及节点名称。
$ ros2 component load /ComponentManager composition composition::Talker Loaded component 1 into '/ComponentManager' container node as '/talker'
现在,第一个 shell 应该显示一条消息,表明组件已加载,以及用于发布消息的重复消息。
第二个 shell 中的另一个命令(参见监听器源代码):
$ ros2 component load /ComponentManager composition composition::Listener Loaded component 2 into '/ComponentManager' container node as '/listener'
命令行实用程序ros2
现在可用于检查容器的状态:
$ ros2 component list /ComponentManager1 /talker2 /listener
现在第一个 shell 应该显示每条接收到的消息的重复输出。
使用 ROS 服务 (1.) 与服务器和客户端的运行时组合
服务器和客户端的示例非常相似。
在第一个外壳中:
ros2 run rclcpp_components component_container
在第二个 shell 中(参见服务器和客户端源代码):
ros2 component load /ComponentManager composition composition::Server ros2 component load /ComponentManager composition composition::Client
在这种情况下,客户端向服务器发送请求,服务器处理请求并回复响应,客户端打印收到的响应。
使用 ROS 服务的编译时组合 (2.)
该演示表明可以重复使用相同的共享库来编译运行多个组件的单个可执行文件。可执行文件包含上面的所有四个组件:说话者和听众以及服务器和客户端。
在 shell 调用中(参见源代码):
ros2 run composition manual_composition
这应该显示来自双方的重复消息,说话者和听众以及服务器和客户端。
笔记
手动组合的组件不会反映在命令行工具输出中。ros2 component list
使用 dlopen 的运行时组合
该演示通过创建通用容器进程并显式传递要加载的库而不使用 ROS 接口来提供 1. 的替代方法。该过程将打开每个库并在库源代码中为每个“rclcpp::Node”类创建一个实例)。
ros2 run composition dlopen_composition `ros2 pkg prefix composition`/lib/libtalker_component.so `ros2 pkg prefix composition`/lib/liblistener_component.so
现在 shell 应该显示每条发送和接收消息的重复输出。
笔记
dlopen 组合的组件不会反映在命令行工具输出中。ros2 component list
使用启动动作组合
虽然命令行工具对于调试和诊断组件配置很有用,但同时启动一组组件通常更方便。要自动执行此操作,我们可以使用 中的功能。ros2 launch
ros2 launch composition composition_demo.launch.py
高级主题
现在我们已经了解了组件的基本操作,我们可以讨论一些更高级的主题。
卸载组件
在第一个 shell 中,启动组件容器:
ros2 run rclcpp_components component_container
ros2
通过命令行工具验证容器是否正在运行:
$ ros2 component list /ComponentManager
在第二个 shell 中(参见talker源代码)。该命令将返回加载组件的唯一 ID 以及节点名称。
$ ros2 component load /ComponentManager composition composition::Talker Loaded component 1 into '/ComponentManager' container node as '/talker' $ ros2 component load /ComponentManager composition composition::Listener Loaded component 2 into '/ComponentManager' container node as '/listener'
使用唯一 ID 从组件容器中卸载节点。
$ ros2 component unload /ComponentManager 1 2 Unloaded component 1 from '/ComponentManager' container Unloaded component 2 from '/ComponentManager' container
在第一个 shell 中,验证来自 talker 和 listener 的重复消息是否已停止。
重新映射容器名称和命名空间
组件管理器名称和命名空间可以通过标准命令行参数重新映射:
ros2 run rclcpp_components component_container --ros-args -r __node:=MyContainer -r __ns:=/ns
在第二个 shell 中,可以使用更新后的容器名称加载组件:
ros2 component load /ns/MyContainer composition composition::Listener
笔记
Namespace remappings of the container do not affect loaded components.
Remap component names and namespaces
Component names and namespaces may be adjusted via arguments to the load command.
In the first shell, start the component container:
ros2 run rclcpp_components component_container
Some examples of how to remap names and namespaces:
# Remap node name ros2 component load /ComponentManager composition composition::Talker --node-name talker2 # Remap namespace ros2 component load /ComponentManager composition composition::Talker --node-namespace /ns # Remap both ros2 component load /ComponentManager composition composition::Talker --node-name talker3 --node-namespace /ns2
The corresponding entries appear in ros2 component list
:
$ ros2 component list /ComponentManager1 /talker22 /ns/talker3 /ns2/talker3
Note
Namespace remappings of the container do not affect loaded components.
相关文章:
【ROS2指南-20】了解ROS2组件的用法
在单个进程中组合多个节点 目录 背景 运行演示 发现可用组件 使用 ROS 服务 (1.) 与发布者和订阅者的运行时组合 使用 ROS 服务 (1.) 与服务器和客户端的运行时组合 使用 ROS 服务的编译时组合 (2.) 使用 dlopen 的运行时组合 使用启动动作组合 高级主题 卸载组件 重新…...

使用AI进行“文本纠错”
AI在现实中的应用有很多,你有没有想过,它还可以进行文本纠错呢?传统的校对既耗时又枯燥,通过“AI纠错”,不仅能更快完成,还能提高准确度。那么AI“文本纠错”背后的原理是什么呢?和我一起看看吧…...

第九章 法律责任与法律制裁
第九章 法律责任与法律制裁_副本 目录 第一节 法律责任的概念 一 法律责任的含义二 法律责任的特点 第二节 法律责任的分类与竞合 一 法律责任的分类 (一)根据责任行为所违反的法律的性质 民事责任:刑事责任行政责任违宪责任 (二…...
如何选择好用的海康视频恢复软件?综合考虑这几点
海康视频恢复通常是指从海康威视监控设备中恢复删除或丢失的视频。在使用海康设备进行监控时,一些重要的视频可能会被误删除或其他原因导致丢失,如果没有及时备份,数据就可能会“永久”丢失?其实不然,我们可以选择好用…...

前端学习:HTML颜色(什么是RGB、HEX、HSL)
一、什么是RGB、HEX、HSL? 无论是RGB、HEX、HSL,它们的作用只有一个:用数字表达出一种颜色。 1.RGB RGB通过输入的数值,将红色、绿色和蓝色的光源以一定的量混合在一起,形成颜色。 软件中通常让你输入Red、Green、B…...

zookeeper + kafka集群搭建详解
目录 1.消息队列介绍 1.为什么需要消息队列 (MO) 2.使用消息队列的好处 3.消息队列的两种模式 2.Kafka相关介绍 1.Kafka定义 2.Kafka简介 3. Kafka的特性 3.Kafka系统架构 1. Broker(服务器) 2. Topic(一个队…...

【数据结构与算法】 - 双向链表 - 详细实现思路及代码
目录 一、概述 二、双向链表 三、双向链表实现步骤 📌3.1 C语言定义双向链表结点 📌3.2 双向链表初始化 📌3.3 双向链表插入数据 📌3.4 双向链表删除数据 📌3.5 双向链表查找数据 📌3.6 双向链…...
面试官在线点评4份留学生简历! 这些坑你中了几个?如何写项目描述才能被大厂发面试?转专业简历该咋写 | 还有优秀简历展示!
我们给大家展示一下 从材料的准备 也就是说到底包含哪些具体的项目 为什么说这些项目是不错的 第二呢就是说在陈述上 在整个这个简历的结构 他的完备性他的准确性 他的正确性 以及最后他的具体的这种项目的描述 那讲完了这个好的简历呢 我们另外搜集了几份简历 那这些简历呢其实…...

一觉醒后ChatGPT 被淘汰了
OpenAI 的 Andrej Karpathy 都大力宣传,认为 AutoGPT 是 prompt 工程的下一个前沿。 近日,AI 界貌似出现了一种新的趋势:自主人工智能。 这不是空穴来风,最近一个名为 AutoGPT 的研究开始走进大众视野。特斯拉前 AI 总监、刚刚回归…...
spring框架的事务
1.什么是事务? 事务:是数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作;这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行;事务是一组不可再分割的操作集合(工作逻辑单元…...

Spring配置数据源
Spring配置数据源数据源的作用环境准备手动创建c3p0数据源封装抽取关键信息,手动创建c3p0数据源使用Spring容器配置数据源数据源的作用 数据源(连接池)是提高程序性能如出现的 事先实例化数据源,初始化部分连接资源 使用连接资源时从数据源中获取 使用完…...

【前端之旅】Vue入门笔记
一名软件工程专业学生的前端之旅,记录自己对三件套(HTML、CSS、JavaScript)、Jquery、Ajax、Axios、Bootstrap、Node.js、Vue、小程序开发(Uniapp)以及各种UI组件库、前端框架的学习。 【前端之旅】Web基础与开发工具 【前端之旅】手把手教你安装VS Code并附上超实用插件…...
WPF教程(二)--Application WPF程序启动方式
1.Application介绍 WPF与WinForm一样有一个 Application对象来进行一些全局的行为和操作,并且每个 Domain (应用程序域)中仅且只有一个 Application 实例存在。和 WinForm 不同的是WPF Application默认由两部分组成 : App.xaml 和 App.xaml.…...
snmp 自定义子代理mib库
测试环境:centos8 1、安装软件 yum install -y net-snmp net-snmp-utils yum install -y net-snmp-perl net-snmp-devel net-snmp-libs 2、创建用户 net-snmp-create-v3-user 输入用户名 soft 输入密码 123456 输入密码 654321 service snmpd restart 3、创建…...

一文说透安全沙箱技术
在数字经济的东风中,数据安全至关重要。目前已经颁布了包括《数据安全法》、《个人信息保护法》和《数据安全管理办法》在内的国家政策,以促进整个数据要素的发展。 而近年来,随着移动应用程序的普及和小程序技术的崛起,安全沙箱…...
Java多线程基础面试总结(二)
创建三种线程的方式对比 使用实现Runnable、Callable接口的方式创建多线程。 优势 Java的设计是单继承的设计,如果使用继承Thread的方式实现多线程,则不能继承其他的类,而如果使用实现Runnable接口或Callable接口的方式实现多线程…...
NS32F407VGT6 NS32F407VET6软硬件通用STM32F407VGT6 407VET6
NS32F407VGT6 NS32F407VET6 器件基于高性能的 ARM Cortex-M4 32 位 RISC 内核,工作频率高达 168MHz 。 Cortex-M4 内核带有单精度浮点运算单元 (FPU) ,支持所有 ARM 单精度数据处理指令和数据类型。它还 具有一组 DSP 指令和提高应用安全性的一…...
Openstack: network: ovs: dpif/show 实例分析:interface
[TOC 实例 [cbis-adminovercloud–13 (overcloudrc) ~]$ sudo ovs-appctl dpif/show systemovs-system: hit:75198007884 missed:109924265 br-ex: br-ex 65534/3: (internal) ,65534 是port number; OpenFlow port number; 3 是 ofp_port_to_odp_port(ofproto, o…...

必要的项目管理软件因素
什么样的项目管理软件好?对于一个项目团队来说,从项目开始到项目结束,需要多个部门的配合。每个成员可能会参与一个以上的项目,这通常需要并行的多个项目。据介绍,国外90%以上的项目是用软件管理的,而中国只…...

大学刚毕业,用10000小时,走进字节跳动拿了offer
前言: 没有绝对的天才,只有持续不断的付出。对于我们每一个平凡人来说,改变命运只能依靠努力幸运,但如果你不够幸运,那就只能拉高努力的占比。 2020年7月,我有幸成为了字节跳动的一名测试开发,…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
django blank 与 null的区别
1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...
小木的算法日记-多叉树的递归/层序遍历
🌲 从二叉树到森林:一文彻底搞懂多叉树遍历的艺术 🚀 引言 你好,未来的算法大神! 在数据结构的世界里,“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的,它…...

【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...

Python环境安装与虚拟环境配置详解
本文档旨在为Python开发者提供一站式的环境安装与虚拟环境配置指南,适用于Windows、macOS和Linux系统。无论你是初学者还是有经验的开发者,都能在此找到适合自己的环境搭建方法和常见问题的解决方案。 快速开始 一分钟快速安装与虚拟环境配置 # macOS/…...

【QT控件】显示类控件
目录 一、Label 二、LCD Number 三、ProgressBar 四、Calendar Widget QT专栏:QT_uyeonashi的博客-CSDN博客 一、Label QLabel 可以用来显示文本和图片. 核心属性如下 代码示例: 显示不同格式的文本 1) 在界面上创建三个 QLabel 尺寸放大一些. objectName 分别…...
Python爬虫(四):PyQuery 框架
PyQuery 框架详解与对比 BeautifulSoup 第一部分:PyQuery 框架介绍 1. PyQuery 是什么? PyQuery 是一个 Python 的 HTML/XML 解析库,它采用了 jQuery 的语法风格,让开发者能够用类似前端 jQuery 的方式处理文档解析。它的核心特…...