【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;风趣幽…

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…

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;在海上测量和导航领域展现出了无可比拟的优势和广阔的应用前景。 一、北斗卫星系统概述 北斗卫星系统是由中国自主研发的全球…

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

问题&#xff1a;如图Tomcat乱码&#xff0c;而且启动时的系统日志不会乱码&#xff0c;webapp中的打印日志才乱码。 idea中的情况如下&#xff1a;正常中文展示。 问题分析&#xff1a;网上分析的原因是Tomcat配置的字符集和web应用的字符集不匹配&#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大模型领域的政策支持和工作进展都呈…

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

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

管理能力学习笔记五:识别团队角色,因才施用

识别团队角色&#xff0c;因才施用&#xff0c;需要做到以下三点 扬长避短 管理者要学会问自己员工能把什么做好&#xff0c;而不是想方设法改造他们的短处 。 – 彼得德鲁克 人岗匹配 将合适的人放在合适的位置 人才多样化 团队需要各式各样的人才&#xff0c;才能高效配合…

Matlab之空间坐标系绘制平面图形

在空间直角坐标系中&#xff0c;绘制指定平面方程的图形 版本说明&#xff1a; 20240413_V1.01&#xff1a;更正代码错误&#xff0c;并修改输入参数类型&#xff08;测试用例得修改&#xff09; 20240413_V1.00&#xff1a;初始版本 一、平面方程 基本形式为&#xff1a;A…

读取pcd文件并在rviz中进行显示

参考&#xff1a;pcd文件在rviz中显示 功能包创建 cd Downloads/ROS mkdir -p pcdreadshow_ws/src cd src catkin_init_workspace catkin_create_pkg read_pcd pcl_conversions pcl_ros roscpp sensor_msgs读取点云文件并发布 #include<ros/ros.h> #include<pcl/po…

postgresql数据库pg_dirtyread插件闪回技术 —— 筑梦之路

闪回查询&#xff08;Flashback Query&#xff09;是一种在数据库中执行时间点查询的技术。它允许查询数据库中过去某个时间点的数据状态&#xff0c;并返回相应的查询结果。通常闪回查询分为表级以及行级的闪回查询。PostgreSQL数据库由于MVCC的机制&#xff0c;对于DML的操作…

前端webWorker 的介绍以及应用

文章目录 webWorker以下是关于 Web Workers 的一些关键概念&#xff1a;控制台查看使用注意事项消息传递创建subworkerwebWorker的具体使用注意事项 共享worker(SharedWorker)创建方法&#xff1a;与专用worker的主要区别&#xff1a; webWorker JavaScript是单线程的语言&…

vscode调试文件(C++,ROS和cmake文件)

VsCode调试文件 参考文档&#xff1a; code.visualstudio.com/docs/editor/variables-reference code.visualstudio.com/docs/editor/tasks 主要修改task.json下的"args"、launch.json中的"program",“args” 注意task.json中的label以及launch.json中…

Python程序设计 元组和集合

教学案例七 元组和集合 1. 根据年月日计算周几 根据输入的年号、月号、日号&#xff0c;计算是周几(中文、英文) 蔡勒公式 通过蔡勒&#xff08;Zeller&#xff09;公式可计算星期几 w:星期; w对7取模得:0-星期日,1-星期一,2-星期二,3-星期三,4-星期四,5-星期五,6-星期六 c&…

【苍穹外卖】Springboot中快速使用mybatis插件-PageHelper

目录 Springboot中快速使用mybatis插件-PageHelper1. 导入Maven坐标2. 拦截查询方法3. 编写查询的方法和mapper接口4. 配置&#xff1a;扫描Mapper.xml的映射文件路径5. 版本说明 Springboot中快速使用mybatis插件-PageHelper 1. 导入Maven坐标 <dependency><groupI…

MyBatis Dynamic SQL基本使用

MyBatis Dynamic SQL基本使用 一、概念二、特性Hamcrest是什么 三、MyBatis Dynamic SQL 快速入门3.1 环境准备3.2 定义表和列3.3 创建 MyBatis3 映射器3.4 使用 MyBatis3 执行 SQL 四、数据库对象表示4.1 表或视图表示4.2 表别名4.3 列表示 五、Where 子句支持5.1 简单的 wher…