ROS2 Humble启动时命令行参数失效问题排查求助
ROS2命令行参数不生效的问题排查与解决
你的问题出在两个地方:
1. 启动命令格式错误
你执行的启动命令里,-p test:=42后面多了一个多余的10,这会被ROS2解析为无效的额外参数,导致命令行传入的test:=42没有被正确识别。
修正后的启动命令:
ros2 run dip_sensors TI6843AOP_node --ros-args -p test:=42
2. 代码中参数声明的ignore_override设置错误
你调用rclcpp::Node::declare_parameter时,第四个参数传了true,这个参数是ignore_override,作用是强制忽略外部(包括命令行)传入的参数值,始终使用你指定的默认值10。这才是命令行参数不生效的核心原因。
修正后的代码片段:
const std::string name = "test"; const rclcpp::ParameterValue test(10); // 去掉第四个true参数(默认值为false,允许外部参数覆盖) const rclcpp::ParameterValue testArg(rclcpp::Node::declare_parameter(name, test, ParamDesc)); // 或者显式设置ignore_override为false,效果一致 // const rclcpp::ParameterValue testArg(rclcpp::Node::declare_parameter(name, test, ParamDesc, false)); cout << testArg.to_value_msg().integer_value << "\n";
为什么后续ros2 param set能生效?
ros2 param set是运行时动态修改参数的操作,不受ignore_override参数的限制,所以可以成功覆盖默认值。
内容的提问来源于stack exchange,提问作者Dimi
相关产品推荐
相关产品推荐

