ROS2 参数
ROS2 节点可以声明多个参数,其它节点可以查看或修改参数,参数的设置和获取实际是通过服务实现的,只是 ROS2 提供了针对参数提供了更加方便的 API
C++ 节点声明参数
创建一个功能包
1ros2 pkg create cpp_param_declare_demo --destination-directory src --build-type ament_cmake --dependencies rclcpp --license Apache-2.0声明参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26#include "rclcpp/executors.hpp" class ParamNode : public rclcpp::Node { public: ParamNode() : Node("param_node") { // 声明参数 declare_parameter("int_param", 10086); // 获取参数默认值 get_parameter("int_param", int_param_); RCLCPP_INFO(rclcpp::get_logger("rclcpp"), "int param default value is : %ld", int_param_); } private: int64_t int_param_; }; int main(int argc, char* argv[]) { rclcpp::init(argc, argv); auto node = std::make_shared<ParamNode>(); rclcpp::spin(node); rclcpp::shutdown(); return 0; }
可以通过 ros2 param get param_node int_param 命令获取节点的参数
监听节点参数被修改的事件
通过节点的 add_on_set_parameters_callback API 添加参数改变的回调函数
| |
使用 ros2 param set param_node int_param 11111 可以看到参数修改为指定的值,输出下面日志:
| |
获取和设置其它节点的参数
节点自动提供了以下服务用于操作参数:
| |
所以设置或获取其它节点可以用调用服务的方式,具体参考 [[Denote query for ‘20251228T140129’]]
启动时修改参数
使用 ros2 run 启动节点时可以设置参数的值
| |
启动后可以看到参数为设置的值,而不是代码中的默认值
| |