当前位置: 首页 > news >正文

ROS2学习(10)------ROS2参数

  • 操作系统:ubuntu22.04
  • IDE:Visual Studio Code
  • 编程语言:C++11
  • ROS版本:2

在ROS 2中,参数(Parameters)是节点配置的重要方式。它们允许用户在运行时调整节点的行为,而无需重新编译代码或重启节点。参数可以是各种数据类型,如整数、浮点数、字符串等,并且支持动态设置和获取。

参数的基本概念

  • 参数服务器:在ROS 2中,每个节点都有自己的参数服务器,这意味着参数是与特定节点关联的。
  • 参数类型:支持多种数据类型,包括整型(int)、浮点型(float/double)、布尔型(bool)、字符串(string)以及数组(array)等。
  • 参数作用域:参数分为全局参数和局部参数(私有参数)。私有参数以节点名称作为前缀,用于防止命名冲突并限定其使用范围。

如何在节点中使用参数

以下是如何在ROS 2 C++节点中声明、获取和设置参数的基本步骤:

  1. 声明参数

在你的节点类中,通过declare_parameter方法来声明参数。你可以在构造函数中完成这一操作。

#include "rclcpp/rclcpp.hpp"class MinimalParamNode : public rclcpp::Node {
public:MinimalParamNode() : Node( "minimal_param_node" ){// 1. 声明参数this->declare_parameter( "counter_start", 0 );}
};
  1. 获取参数值

你可以使用get_parameter方法来获取已声明参数的值。

this->get_parameter("counter_start", example_param_value);

或者更简洁的方式:

int example_param_value = this->get_parameter("counter_start").as_int();
  1. 动态设置参数

使用ROS 2命令行工具ros2 param set可以动态地修改正在运行中的节点参数值。

例如,在终端中运行如下命令来更改example_param的值:

ros2 param set /minimal_param_node counter_start 100
  1. 监听参数变化

如果你想监听某个参数的变化并在变化时执行特定操作,可以使用add_on_set_parameters_callback注册回调函数:

auto callback = [ this ]( const std::vector< rclcpp::Parameter >& params ) {auto result       = rcl_interfaces::msg::SetParametersResult();result.successful = true;for ( const auto& param : params ){if ( param.get_name() == "counter_start" ){RCLCPP_INFO( this->get_logger(), "参数变更: %s = %d", param.get_name().c_str(), param.as_int() );}}return result;};// 3. 添加回调callback_handle_ = this->add_on_set_parameters_callback( callback );

使用示例

下面是一个完整的例子,展示了如何在一个简单的ROS 2节点中使用参数:

class MinimalParamNode : public rclcpp::Node {
public:MinimalParamNode() : Node( "minimal_param_node" ){// 1. 声明参数this->declare_parameter( "counter_start", 0 );// 2. 注册回调auto callback = [ this ]( const std::vector< rclcpp::Parameter >& params ) {auto result       = rcl_interfaces::msg::SetParametersResult();result.successful = true;for ( const auto& param : params ){if ( param.get_name() == "counter_start" ){RCLCPP_INFO( this->get_logger(), "参数变更: %s = %d", param.get_name().c_str(), param.as_int() );}}return result;};// 3. 添加回调callback_handle_ = this->add_on_set_parameters_callback( callback );}private:OnSetParametersCallbackHandle::SharedPtr callback_handle_;
};int main( int argc, char* argv[] )
{rclcpp::init( argc, argv );CCUTIL::set_logger_save_directory( "logs" );CCUTIL::set_log_level( CCUTIL::LogLevel::Debug );INFO( "==========main===========" );auto node = std::make_shared< MinimalParamNode >();rclcpp::spin( node );INFO( "----end----" );rclcpp::shutdown();return 0;
}

运行演示结果

设置参数:
在这里插入图片描述
回调响应:
在这里插入图片描述

相关文章:

  • STM32F103_Bootloader程序开发03 - 启动入口与升级模式判断(boot_entry.c与boot_entry.h)
  • SOC-ESP32S3部分:13-定时器
  • 多查询检索在RAG中的应用及为什么平均嵌入向量效果好
  • 【蓝桥杯嵌入式】【模块】八、UART相关配置及代码模板
  • [De1CTF 2019]SSRF Me
  • 今日行情明日机会——20250526
  • Redis批量删除Key的三种方式
  • 【杂谈】------使用 __int128 处理超大整数计算
  • MyBatis深度解析:XML/注解配置与动态SQL编写实战
  • TinyVue v3.23.0 正式发布:增加 NumberAnimation 数字动画组件、支持全局配置组件的 props
  • FreeRTOS 在物联网传感器节点的应用:低功耗实时数据采集与传输方案
  • 资源回收:为地球减负,共创绿色未来
  • 超临界机组协调控制系统建模项目开发笔记
  • ubuntu 22.04 配置静态IP、网关、DNS
  • MySQL进阶实战:窗口函数 VS 聚合函数,性能与场景全对比
  • MyBatis 与 Spring 框架集成详解:构建企业级数据访问层
  • 泛型(1)
  • Elasticsearch实战:法律文档索引与管理的技术实践
  • Baklib的智能推荐系统核心是什么?
  • 【大模型】分词(Tokenization)
  • 做网站用新域名还是老域名/关键词优化报价推荐
  • 免费商城建站平台/深圳网络推广大师
  • 武汉网站建设jw100/免费的行情软件网站下载
  • 中小企业网站设计/广东疫情动态人民日报
  • 常见网站建设/广告软文
  • 青海省教育厅门户网站学籍查询/互联网公司有哪些