def send_request_to_change_parameters( self, # Arguments are alphabetically sorted expect, frame_rate: float, output_directory: Path, real_time_factor: float, scenario: Path, ): """Send request to change scenario interpreter's parameters.""" request = rcl_interfaces.srv.SetParameters.Request() request.parameters = [ Parameter( name="intended_result", value=ParameterValue(type=ParameterType.PARAMETER_STRING, string_value=str(expect.name)), ), Parameter( name="osc_path", value=ParameterValue(type=ParameterType.PARAMETER_STRING, string_value=str(scenario)), ), Parameter( name="output_directory", value=ParameterValue( type=ParameterType.PARAMETER_STRING, string_value=str(output_directory), ), ), Parameter( name="local_real_time_factor", value=ParameterValue(type=ParameterType.PARAMETER_DOUBLE, double_value=real_time_factor), ), Parameter( name="local_frame_rate", value=ParameterValue(type=ParameterType.PARAMETER_DOUBLE, double_value=frame_rate), ), ] future = self.client_set_parameters.call_async(request) rclpy.spin_until_future_complete(self, future, timeout_sec=self.timeout_sec) return future
def _set_param(node_name, name, value, parameter_type=None): """ Internal helper function for set_param. Attempts to set the given parameter in the target node with the desired value, deducing the parameter type if it's not specified. parameter_type allows forcing a type for the given value; this is useful to delete parameters. """ parameter = Parameter() parameter.name = name if parameter_type is None: parameter.value = get_parameter_value(string_value=value) else: parameter.value = ParameterValue() parameter.value.type = parameter_type if parameter_type != ParameterType.PARAMETER_NOT_SET: setattr(parameter.value, _parameter_type_mapping[parameter_type]) try: # call_get_parameters will fail if node does not exist. call_set_parameters(node=_node, node_name=node_name, parameters=[parameter]) except: pass