ROS2-参数服务器

embedded/2024/11/28 12:31:44/

在 ROS 2 中,节点之间可以通过参数服务器共享和获取参数。这意味着一个节点可以声明一个参数,而其他节点可以读取或修改这个参数。这是通过 ROS 2 的参数系统实现的,它允许节点在参数服务器上声明、设置和获取参数 。

0. 背景

系统有多个 ROS2 节点组成,通过 ROS2 消息通信。在 C++ Qt UI Ros2 节点中,用户创建/打开项目,项目地址需要分享给其他 Python ROS2 节点。

1. C++ Qt 节点中声明和设置参数

在您的 C++ Qt 节点中,您已经使用 declare_parameter 方法声明了 project_address 参数,并使用 set_parameter 方法为其设置了值。

#include "rclcpp/rclcpp.hpp"class QtNode : public rclcpp::Node {
public:QtNode() : Node("qt_node") {this->declare_parameter<std::string>("project_address", "/home");this->set_parameter(rclcpp::Parameter("project_address", rclcpp::ParameterValue(), "/home/coco/myProjects"));}
};

2. 在其他节点中读取参数

 在其他节点(无论是 C++ 还是 Python 节点)中,您可以使用 get_parameter 方法来读取 project_address 参数的值。

Python代码:

import rclpy
from rclpy.node import Nodeclass ParameterReader(Node):def __init__(self):super().__init__('parameter_reader')self.get_logger().info('Reading project address parameter...')project_address = self.get_parameter('project_address').get_parameter_value().string_valueself.get_logger().info('Project address: %s' % project_address)def main(args=None):rclpy.init(args=args)parameter_reader = ParameterReader()rclpy.spin(parameter_reader)parameter_reader.destroy_node()rclpy.shutdown()if __name__ == '__main__':main()

C++ 代码:

#include "rclcpp/rclcpp.hpp"class ParameterReaderNode : public rclcpp::Node {
public:ParameterReaderNode() : Node("parameter_reader") {std::string project_address;if (this->get_parameter("project_address").as_string(project_address)) {RCLCPP_INFO(this->get_logger(), "Project address: %s", project_address.c_str());} else {RCLCPP_ERROR(this->get_logger(), "Failed to get parameter 'project_address'");}}
};int main(int argc, char * argv[]) {rclcpp::init(argc, argv);auto node = std::make_shared<ParameterReaderNode>();rclcpp::spin(node);rclcpp::shutdown();return 0;
}


http://www.ppmy.cn/embedded/141180.html

相关文章

第五章 nfs服务器

nfs简介&#xff1a; &#xff08;1&#xff09;NFS&#xff08;Network File System&#xff09;&#xff1a;网络文件系统 是FreeBSD支持的文件系统中的一种 允许网络中的计算机之间通过TCP/IP网络共享资源&#xff08;不同的计算机、操作系统&#xff09;…

性能测试调优之线程池的性能优化

做性能测试时&#xff0c;有些压测场景下TPS上不去&#xff0c;或者响应时间变长&#xff0c;或者直接出现一些连接 被拒绝的报错&#xff0c;这些都有可能是tomcat的连接池不够引起的。 连接池的概念 线程池&#xff1a;是一个管理线程集合的框架&#xff0c;它负责维护一个…

MyBatis-数据库连接池、属性文件config.properties、类名简化、MyBatis的整体架构

一、数据库连接池 1、概述 存储实现创建好的连接对象的容器 2、优点 避免了频繁创建和销毁连接对象 3、使用 在使用到连接对象时可在数据库连接池中直接获取 4、实现 不需要我们去实现,框架和一些第三方有现成的组件&#xff08;C3P0、ADCP、德鲁伊(阿里巴巴)&#xff…

AIGC:重塑文学的新力量

目录 一.AIGC 为文学创作带来的新机遇 1.激发创意灵感 2.提高创作效率 3.拓展文学风格和形式 4.促进文学的普及和传播 二.AIGC 对文学创作的挑战 1.版权问题 2.文学价值的质疑 3.对人类作家的冲击 三.如何应对 AIGC 对文学的影响 1.明确版权归属 2.提高文学素养 3…

力扣动态规划基础版(字符串应用)

5.最长回文串 5. 最长回文子串https://leetcode.cn/problems/longest-palindromic-substring/ 先全部置为false然后反向遍历。动态规划数组&#xff0c;dp【i】【j】表示从第i到第j 是否是回文串。Arrays.fill表示的是将指定的内容填充到数组中。状态转移方程如下 这个题目用…

UE5 Add Transient Field 节点

在 Unreal Engine 5 (UE5) 中&#xff0c;Add Transient Field 是一个在 Niagara&#xff08;UE5 的粒子系统和 VFX 工具&#xff09;中使用的节点。这个节点的功能是动态地将一个 Transient Field&#xff08;瞬时字段&#xff09;添加到系统中&#xff0c;并将其应用到粒子系…

使用R语言绘制简单地图的教程

今天主要讲的部分是绘制静态地图&#xff0c;使用的R语言绘图包是tmap&#xff0c;关于介绍就不多讲&#xff0c;下面开始代码的讲解&#xff0c;小白也可以放心食用。 1、绘制简单的单幅地图&#xff0c;这里以新西兰地区为例 #导入必要的包 library(tmap) library(sp) libr…

【Linux】gcc/g++使用

编译 我们知道&#xff0c;gcc只能编译C&#xff0c;g既能编译C&#xff0c;也能编译C。 由于两者的选项是相同的&#xff0c;这里我们使用gcc来说明。 这就是一个我们在linux中gcc编译一段代码后会自动生成一个a.out为名的可执行文件&#xff0c;然后我们./a.out&#xff0c…