我在C++中有两个节点使用相同的参数。如果我想通过rqt重新配置node1的parameter_x,如果node2的parameter_x也自动更改,那就太好了。有这种可能性吗?我尝试了node1:
auto node = rclcpp::Node::make_shared("node2"); node->set_parameter(rclcpp::Parameter("parameter_x", 50));
7xzttuei1#
我找到了解决办法:
auto parameter = rcl_interfaces::msg::Parameter(); auto request = std::make_shared<rcl_interfaces::srv::SetParametersAtomically::Request>(); client = this->create_client<rcl_interfaces::srv::SetParametersAtomically>(serviceName); // E.g.: serviceName = "/turtlesim/set_parameters_atomically" parameter.name = parameter_name; // E.g.: parameter_name = "background_b" parameter.value.type = 1 // bool = 1, int = 2, float = 3, string = 4 parameter.value.bool_value = true // .bool_value, .integer_value, .double_value, .string_value request->parameters.push_back(parameter); while (!client->wait_for_service(1s)) { if (!rclcpp::ok()) { RCLCPP_ERROR(rclcpp::get_logger("rclcpp"), "Interrupted while waiting for the service. Exiting."); return; } RCLCPP_INFO_STREAM(this->get_logger(), "service " << serviceName <<" not available, waiting again..."); } auto result = client->async_send_request(request);
cngwdvgl2#
不能在节点内部使用set_parameters,而是使用Service调用。可拨打两次服务电话
2条答案
按热度按时间7xzttuei1#
我找到了解决办法:
cngwdvgl2#
不能在节点内部使用set_parameters,而是使用Service调用。可拨打两次服务电话