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

ROS2 “通信方式” 参数服务器

为什么加“通信方式”引号,因为我觉得他就不算通信,最多最多就是一个动态加载参数方式

所以ros通信方式就三种,topic service  action  别犟,犟就是你对!

常用的 param参数方法如下:

# declare_parameter 声明和初始化一个参数

# describe_parameter(name) 通过参数名字获取参数的描述

# get_parameter 通过参数名字获取一个参数

# set_parameter 设置参数的值

1、代码创建

paramter_test.cpp

#include <chrono>
#include "rclcpp/rclcpp.hpp"

class ParametersNode : public rclcpp::Node
{
public:
    // 构造函数,有一个参数为节点名称
    explicit ParametersNode(std::string name) : Node(name)
    {
        RCLCPP_INFO(this->get_logger(), "node start:%s.", 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(&ParametersNode::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(), "DEBUG LOG!");
        RCLCPP_INFO(this->get_logger(), "INFO LOG!");
        RCLCPP_WARN(this->get_logger(), "WARN LOG!");
        RCLCPP_ERROR(this->get_logger(), "ERROR LOG!");
        RCLCPP_FATAL(this->get_logger(), "FATAL LOG!");
    }
};

int main(int argc, char** argv)
{
    rclcpp::init(argc, argv);
    /*创建对应节点的共享指针对象*/
    auto node = std::make_shared<ParametersNode>("parameter_node");
    /* 运行节点,并检测退出信号*/
    rclcpp::spin(node);
    rclcpp::shutdown();
    return 0;
}

2、测试

正常启动:

ros2 run param_moudle paramter_node

启动前更新参数:

ros2 run param_moudle paramter_node --ros-args -p rcl_log_level:=10

运行中更改参数:

ros2 param set /parameter_node rcl_log_level 50


http://www.kler.cn/a/350742.html

相关文章:

  • 重学SpringBoot3-Spring Retry实践
  • 生成树机制实验
  • HarmonyOS NEXT应用开发边学边玩系列:从零实现一影视APP (三、影视搜索页功能实现)
  • Transformer创新模型!Transformer+BO-SVR多变量回归预测,添加气泡图、散点密度图(Matlab)
  • 如何在服务器同一个端口下根据路径区分不同的应用
  • Vue2.0的安装
  • 数据挖掘示例分析
  • 一个检查OpenEuler版本的Python脚本的意义与实现
  • windows安装cuda与cudnn
  • 基于车辆轨迹时空数据的城市热点预测模型研究
  • AI工具推荐合集
  • 用html做跨平台应用程序——千丝冥缘应用——跨平台软件开发
  • 【Next.js 项目实战系列】03-查看 Issue
  • AI学习指南深度学习篇- 预训练模型的原理
  • 大衍数列——考研408考试科目之数据算法——未来之窗学习通
  • React之组件渲染性能优化
  • python教程:python中的异常,异常堆栈及其案例
  • 【Mysql/xtrabackup】主从恢复(高端操作)
  • 第三课:python学习之安装pygame
  • 安防监控摄像头图传模组,1公里WiFi无线传输方案,监控新科技
  • 如何使用Pillow库在背景图上添加文字的示例代码
  • 学习之高阶编程str方法
  • 路由器接交换机网速会变慢吗
  • JVM篇(Java内存区域与内存溢出异常(深入理解JVM第三版))(持续更新迭代)
  • LabVIEW提高开发效率技巧----图像处理加速
  • C语言 | Leetcode C语言题解之第485题最大连续1的个数