【ROS2笔记七】ROS中的参数通信

7.ROS中的参数通信

文章目录

  • 7.ROS中的参数通信
    • 7.1使用CLI工具调整参数
    • 7.2参数通信之rclcpp实现
      • 7.2.1创建节点
      • 7.2.2rclcpp参数API
    • Reference

ROS2中的参数是由键值对组成的,参数可以实现动态调整。

7.1使用CLI工具调整参数

启动turtlesim功能包的环境

ros2 run  turtlesim turtlesim_node
  • 查看当前节点下的参数
ros2 param list

Output:

/turtlesim:background_bbackground_gbackground_rqos_overrides./parameter_events.publisher.depthqos_overrides./parameter_events.publisher.durabilityqos_overrides./parameter_events.publisher.historyqos_overrides./parameter_events.publisher.reliabilityuse_sim_time
  • 可以详细查看每一个参数的含义
ros2 param describe <node_name> <param_name>
ros2 param describe /turtlesim background_r

Output:

Parameter name: background_rType: integerDescription: Red channel of the background colorConstraints:Min value: 0Max value: 255Step: 1
  • 查看每个参数的值
ros2 param get <node_name> <param_name>
ros2 param get /turtlesim background_r

Output:

Integer value is: 69
  • 设置参数的值
ros2 param set <node_name> <param_name> <value>
ros2 param set /turtlesim background_r 10

Output:

Set parameter successful
  • 存储当前的所有参数
ros2 param dump <node_name>

会保存一个<node_name>.yaml文件到当前终端的路径中,然后我们载入这个文件就能够加载所有的参数了。

  • 加载参数文件
ros2 param load <node_name> <param_path>

7.2参数通信之rclcpp实现

7.2.1创建节点

ROS2中的日志类型分为5个等级,分别是

RCLCPP_DEBUG(this->get_logger(), "This is DEBUG info!");
RCLCPP_INFO(this->get_logger(), "This is INFO info!");
RCLCPP_WARN(this->get_logger(), "This is WARN info!");
RCLCPP_ERROR(this->get_logger(), "This is ERROR info!");
RCLCPP_FATAL(this->get_logger(), "This is FATAL info!");

我们可以对日志的级别进行过滤,从而查看我们想看的信息

this->get_logger().set_level(log_level);

我们可以通过参数通信来控制查看日志的等级,从而实现日志消息的过滤。

首先创建一个功能包和测试节点,

ros2 pkg create example_service_rclcpp --build-type ament_cmake --dependencies rclcpp --license Apache-2.0

parameters_basic.cpp

#include "rclcpp/rclcpp.hpp"class ParametersBasicNode: public rclcpp::Node{
public:ParametersBasicNode(std::string name): Node(name){// 启动节点RCLCPP_INFO(this->get_logger(), "Node: %s has been launched", name.c_str());}
private:};int main(int argc, char * argv[]){// 初始化rclcpprclcpp::init(argc, argv);// 创建节点auto node = std::make_shared<ParametersBasicNode>("parameters_basic");// 关闭节点rclcpp::spin(node);rclcpp::shutdown();return 0;
}

CMakeLists.txt

add_executable(parameters_basic src/parameters_basic.cpp)
ament_target_dependencies(parameters_basic rclcpp)install(TARGETS parameters_basic DESTINATION lib/${PROJECT_NAME}
)

7.2.2rclcpp参数API

相关的API可以参考:rclcpp: rclcpp: ROS Client Library for C++ (ros2.org)

Image

使用参数来控制日志的级别,完整程序

parameters_basic.cpp

#include "rclcpp/rclcpp.hpp"/*# declare_parameter            声明和初始化一个参数# describe_parameter(name)  通过参数名字获取参数的描述# get_parameter                通过参数名字获取一个参数# set_parameter                设置参数的值
*/class ParametersBasicNode: public rclcpp::Node{
public:ParametersBasicNode(std::string name): Node(name){// 启动节点RCLCPP_INFO(this->get_logger(), "Node: %s has been launched", name.c_str());this->declare_parameter("rcl_log_level", 0);this->get_parameter("rcl_log_level", log_level);this->get_logger().set_level((rclcpp::Logger::Level)log_level);using namespace std::literals::chrono_literals;timer_ = this->create_wall_timer(500ms, std::bind(&ParametersBasicNode::timer_callback, this));}
private:int log_level;rclcpp::TimerBase::SharedPtr timer_;void timer_callback(){this->get_parameter("rcl_log_level", log_level);this->get_logger().set_level(rclcpp::Logger::Level(log_level));std::cout << "=========================================" << std::endl;RCLCPP_DEBUG(this->get_logger(), "This is DEBUG!");RCLCPP_INFO(this->get_logger(), "This is INFO!");RCLCPP_WARN(this->get_logger(), "This is WARN!");RCLCPP_ERROR(this->get_logger(), "This is ERROR!");RCLCPP_FATAL(this->get_logger(), "This is FATAL!");std::cout << "=========================================" << std::endl;}};int main(int argc, char * argv[]){// 初始化rclcpprclcpp::init(argc, argv);// 创建节点auto node = std::make_shared<ParametersBasicNode>("parameters_basic");// 关闭节点rclcpp::spin(node);rclcpp::shutdown();return 0;
}
source ./install/setup.bash
ros2 run example_parameters_rclcpp parameters_basic --ros-args -p rcl_log_level:=10

运行效果如下:

Image

也可以动态设置参数

ros2 param list
ros2 param set /parameters_basic rcl_log_level 20

如下:

Image

Reference

[1]d2lros2
[2]ROS2 Tutorial Official

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

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

相关文章

如何在本地创建一个贪吃蛇小游戏node.js服务并实现无公网IP远程游玩

文章目录 前言1.安装Node.js环境2.创建node.js服务3. 访问node.js 服务4.内网穿透4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5.固定公网地址 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽…

可信通信(TLS/SSL协议)

比特币&#xff0c;以太坊&#xff0c;超级账本在建立网络连接保证节点间可靠通信的时&#xff0c;都直接采用了传输层安全性协议&#xff08;Transport Layer Security&#xff09;&#xff0c;TLS协议自从1999年发布以来已经广泛的应用在浏览器&#xff0c;电子邮件等应用中了…

OSPF笔记+大实验

OSPF综合大实验---实验报告 配置IP地址 R1&#xff1a; [R1]int g0/0/0 [R1-GigabitEthernet0/0/0]ip add 172.16.33.1 24 [R1-GigabitEthernet0/0/0]int l0 [R1-LoopBack0]ip add 172.168.34.1 24 R2: [R2]int g0/0/0 [R2-GigabitEthernet0/0/0]ip add 172.16.33.2 24…

Keil MDK下如何设置非零初始化变量 及变量指定位置- Arm CompilerV5 和 V6区别

目录 一、Arm CompilerV51.定义变量时&#xff0c;使用编译器扩展属性__attribute__((section("name"), zero_init))来将变量放入指定段中。其中section("name")选择一个指定的段&#xff0c;zero_init告诉编译器将变量放入ZI段。 二、Arm CompilerV61.定义…

Mybatis-plus自定义分页工具

Mybatis-plus自定义分页工具 这里主要是介绍通过MyBatis-Plus使用自定义分页工具进行条件分页查询示例等&#xff0c;方便以后查阅&#xff01;&#xff01;&#xff01; 分页工具类-PageUtils PageUtils package com.wl.cloud.core.utils;import com.baomidou.mybatisplus.cor…

Jmeter接口测试:使用教程(下)

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号&#xff1a;互联网杂货铺&#xff0c;回复1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 上一篇我给大家讲了jmeter的基本介绍跟参数化和jmeter脚…

【Spring Security系列】Spring Security 过滤器详解与基于JDBC的认证实现

前言 上文说到&#xff0c;Spring Security它是一个强大的和高度可定制的身份验证和访问控制框架。它提供了一套丰富的功能&#xff0c;用于保护基于Spring的应用程序。 上文又说到&#xff0c;在Spring Security中&#xff0c;过滤器&#xff08;Filter&#xff09;是一个重…

png静图转换gif动图如何操作?轻松一键快速转换gif动图

想要把多张Png格式图片转换成gif格式动图时要怎么操作&#xff1f;图片常见的有静图和动图&#xff0c;而jpg、png、gif等是最常见的图片格式。想要把png格式图片转换成gif动画还不想下载任何软件的时候就可以使用gif制作工具。不需要下载软件在线就能操作。能够轻轻松松就能快…

北斗卫星系统在海上测量中的创新应用

北斗卫星系统在海上测量中的创新应用 随着全球导航卫星系统技术的飞速发展&#xff0c;北斗卫星系统作为中国自主研发的全球卫星导航系统&#xff0c;在海上测量和导航领域展现出了无可比拟的优势和广阔的应用前景。 一、北斗卫星系统概述 北斗卫星系统是由中国自主研发的全球…

PostgreSQL开发与实战(8.3)锁的维护

作者&#xff1a;太阳 1 锁相关参数 deadlock_timeout&#xff08;integer&#xff09;&#xff1a;默认1s&#xff0c;表示pg数据库仅对锁超时大于1s的情况进行死锁检测。 log_lock_waits : 默认关闭&#xff0c;若打开该参数则表示会将锁超时超过deadlock_timeout的信息记…

理解 HuggingFace 是什么

HuggingFace 是一个开源社区和公司&#xff0c;专注于提供自然语言处理&#xff08;NLP&#xff09;的工具和资源。它的主要特点包括&#xff1a; Transformers 库&#xff1a;HuggingFace 提供了一个名为 Transformers 的 Python 库&#xff0c;该库包含了大量的预训练模型和…

git远程仓库拉取超过1G报错解决办法

第一种 如果浅克隆最近一次提交不会超过1G那就浅克隆 //浅层clone代码 depth 1只会拉取最后一次log&#xff0c; depth(后面数字越大拉取的历史记录越多) 1.git clone --depth 1 远程地址 //拉取完整当前分支 2.git fetch --unshallow利用远程分支名称拉取 git branch -a git…

Unity WebGL 2020 Release-Notes

&#x1f308;WebGL 2020 Release-Notes 版本更新内容2020.3.48WebGL: Any recent desktop version of Firefox, Chrome, Edge or Safari.2020.3.47WebGL: Any recent desktop version of Firefox, Chrome, Edge or Safari.2020.3.46WebGL: Any recent desktop version of Fire…

idea中打印日志不会乱码,但是部署到外部tomcat中乱码了。

问题&#xff1a;如图Tomcat乱码&#xff0c;而且启动时的系统日志不会乱码&#xff0c;webapp中的打印日志才乱码。 idea中的情况如下&#xff1a;正常中文展示。 问题分析&#xff1a;网上分析的原因是Tomcat配置的字符集和web应用的字符集不匹配&#xff0c;网上集中的解决…

idea 打开文件一直loading

背景 用idea打开项目&#xff0c;发现项目目录一直在loading&#xff0c;怎么等也出不来&#xff0c;在网上查说是IDEA的索引出现问题或者是代码库文件过大造成的。 解决方法 在IDEA中&#xff0c;依次点击「File」->「Invalidate Caches/Restart」&#xff0c;然后勾选弹…

Unity类银河恶魔城学习记录12-11 P133 Merge Skill Tree with Parry skill源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili Parry_Skill.cs using UnityEngine; using UnityEngine.UI;public class P…

MySQL进阶 ==> 引擎选择优化指南

数据库引擎的选择&#xff1a; InnoDB InnoDB存储引擎是Mysql的默认存储引擎。InnoDB存储引擎提供了具有提交、回滚、崩溃恢复能力的事务安全。但是对比MyISAM的存储引擎&#xff0c;InnoDB写的处理效率差一些&#xff0c;并且会占用更多的磁盘空间以保留数据和索引。 存储方…

大模型应用实践闭门研讨会即将召开|爱分析活动

随着人工智能领域大模型技术的快速发展&#xff0c;政府出具很多指导性意见&#xff0c;在最新的《2024年政府工作报告》中&#xff0c;明确提出了开展“人工智能”行动&#xff0c;显示出政府对AI大模型发展的高度重视和支持。金融行业在AI大模型领域的政策支持和工作进展都呈…

力扣---LCR 095.最长公共子序列

给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 &#xff0c;返回 0 。 一个字符串的 子序列 是指这样一个新的字符串&#xff1a;它是由原字符串在不改变字符的相对顺序的情况下删除某些字符&#xff08;也可以…

AMD vs Intel处理器对比:性能、功耗、价格全方位分析

AMD处理器型号通常由一系列字母、数字和符号组成&#xff0c;这些元素共同构成了一个完整、具有特定含义的标识符。下面跟随道合顺一起来理解这些标识符背后的含义。 解读AMD处理器标识符 品牌系列标识 AMD处理器型号的开头通常会包含品牌系列标识&#xff0c;如“Ryzen”、“T…