笔记94:ROS2 中的 declare_parameter() 和 get_parameter() 函数

头文件:


注意:在使用函数 Node 定义节点时,要先包含头文件:

#include "rclcpp/rclcpp.hpp"

a

a

a

declare_parameter() 函数:


函数作用:在 ROS2 中,函数 declare_parameter() 用于声明节点所需的参数,并指定参数的类型和默认值;声明的参数都是该节点特有的;

函数原型:

template<typename T>
void declare_parameter(const std::string& name,
                       const T& default_value,
                       const rclcpp::ParameterOptions& options = rclcpp::ParameterOptions());

函数参数:

  • name:参数名称,为字符串类型;
  • default_value:参数的默认值,支持任何 C++ 数据类型,因为这个参数的类型由函数模板决定,而函数模板 T 可以设定为任何值;
  • options:参数选项,用于配置参数的行为,例如是否允许重新映射;

举例:

declare_parameter<int>("count", 0);
declare_parameter<std::string>("name", "unknown");
declare_parameter<bool>("enabled", false);
#include "rclcpp/rclcpp.hpp"

class MyNode : public rclcpp::Node {
public:
    MyNode(const std::string& name) : Node(name) {
        // 声明一个名为 "count" 的整数参数,默认值为 0,并允许重新映射
        rclcpp::ParameterOptions options;
        options.allow_remapping = true;
        declare_parameter<int>("count", 0, options);
    }
};

a

a

a

get_parameter() 函数:


函数作用:get_parameter() 函数用于从 ROS 参数服务器中检索参数值;get_parameter() 函数通常在节点的构造函数或初始化函数中使用,以获取所需的配置参数,它还可以用于运行时动态地检索参数值;

  • 参数服务器是一个存储和检索 ROS 参数的集中式系统;
  • 参数可以用于配置节点、发布消息或订阅主题;

函数原型:

template <typename T>
bool get_parameter(const std::string& param_name, T& value, T default_value = T());

函数参数:

  • param_name:是要检索的参数的名称;
  • value:用于存储检索到的参数值的引用;
  • default_value:是可选的默认值,如果参数不存在则使用该值;

举例:

int param_value;
get_parameter("my_int_param", param_value, 10)

  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ROS2,利用`declare_parameter()`和`get_parameter()`函数读取param.yaml文件的步骤如下: 1. 在你的ROS2节点的构造函数,创建一个`rclcpp::Node`对象。 2. 在构造函数调用`declare_parameter()`函数声明需要读取的参数,参数名应和param.yaml文件的键名一致。 ```cpp node->declare_parameter<int>("param_name", 10); ``` 上面的代码声明了一个名为`param_name`的整数类型参数,如果param.yaml文件没有该参数,则默认值为10。 3. 在需要获取参数的地方调用`get_parameter()`函数获取参数的值。 ```cpp int param_value; node->get_parameter<int>("param_name", param_value); ``` 上面的代码获取了名为`param_name`的整数类型参数的值,并将其存储到`param_value`变量。 完整的示例代码如下: ```cpp #include "rclcpp/rclcpp.hpp" int main(int argc, char **argv) { rclcpp::init(argc, argv); auto node = std::make_shared<rclcpp::Node>("my_node"); // 声明参数 node->declare_parameter<int>("param_name", 10); // 获取参数 int param_value; node->get_parameter<int>("param_name", param_value); RCLCPP_INFO(node->get_logger(), "Param value: %d", param_value); rclcpp::shutdown(); return 0; } ``` 在上面的代码,我们声明了一个名为`param_name`的整数类型参数,并将默认值设置为10。然后,我们获取该参数的值,并将其打印到终端上。如果param.yaml文件存在名为`param_name`的键,则该参数的值将从param.yaml文件获取。如果不存在该键,则使用默认值10。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值