https://github.com/ros-planning/navig...
Ask and ye shall receive
class SetExternalParam(Node):
def __init__(self, server_name):
super().__init__('nav2_simple_commander_parameter_setter')
self.cli = self.create_client(SetParameters, '/' + server_name + '/set_parameters')
while not self.cli.wait_for_service(timeout_sec=1.0):
self.get_logger().info('service not available, waiting again...')
self.req = SetParameters.Request()
def send_request(self, param_name, param_value):
if isinstance(param_value, float):
val = ParameterValue(double_value=param_value, type=ParameterType.PARAMETER_DOUBLE)
elif isinstance(param_value, int):
val = ParameterValue(integer_value=param_value, type=ParameterType.PARAMETER_INTEGER)
elif isinstance(param_value, str):
val = ParameterValue(string_value=param_value, type=ParameterType.PARAMETER_STRING)
elif isinstance(param_value, bool):
val = ParameterValue(bool_value=param_value, type=ParameterType.PARAMETER_BOOL)
self.req.parameters = [Parameter(name=param_name, value=val)]
self.future = self.cli.call_async(self.req)
while rclpy.ok():
rclpy.spin_once(self)
if self.future.done():
try:
response = self.future.result()
if response[0].successful:
return True
except Exception as e:
pass
return False