ROS2-创建对象时,加载动态参数的方法

1.引言

ROS2中常见的参数加载方式是:通过启动文件加载。但是在集成化程度较高的系统中,不适合。我们提供通过创建对象时,加载动态参数的方法。

2.创建功能包,并实现在创建对象时动态加载参数文件

2.1 生成功能包:

ros2 pkg create ros_two_dynamic_parameter --build-type ament_cmake --dependencies rclcpp

2.2 创建配置文件my_params.yaml

my_dynamic_node:
  ros__parameters:
    my_int_param: 100
    my_double_param: 2.71
    my_string_param: "world"

2.2 创建dynamic_parameter.cpp文件

#include <rclcpp/rclcpp.hpp>

class MyDynamicNode : public rclcpp::Node {
public:
    MyDynamicNode() : Node("my_dynamic_node") {
        // 声明参数并指定默认值
        this->declare_parameter("my_int_param", 42);
        this->declare_parameter("my_double_param", 3.14);
        this->declare_parameter("my_string_param", "hello");         
    }
    
    void PrintParameters()
    {
        get_parameter("my_int_param", my_int_param_);
        get_parameter("my_double_param", my_double_param_);
        get_parameter("my_string_param", my_string_param_);
        RCLCPP_INFO(this->get_logger(), "my_int_param: %d", my_int_param_);
        RCLCPP_INFO(this->get_logger(), "my_double_param: %f", my_double_param_);
        RCLCPP_INFO(this->get_logger(), "my_string_param: %s", my_string_param_.c_str());
    }
private:
    int my_int_param_;
    double my_double_param_;
    std::string my_string_param_;
};
int main(int argc, char **argv) {
    rclcpp::init(argc, argv);
    auto node = std::make_shared<MyDynamicNode>();
    auto synchronous_client = std::make_shared<rclcpp::SyncParametersClient>(node);
    synchronous_client->load_parameters("/home/yahboom/ros2_ws/src/ros_two_dynamic_parameter/config/my_params.yaml");
    node->set_parameter(rclcpp::Parameter("my_int_param", 50));
    node->PrintParameters();
    rclcpp::spin(node);
    rclcpp::shutdown();
    return 0;
}

2.3 配置 CMakeLists.txt

修改 CMakeLists.txt 文件:

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

3.编译并执行

编译

colcon build --packages-select ros_two_dynamic_parameter

执行:

ros2 run ros_two_dynamic_parameter dynamic_node

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值