@@ -49,6 +49,10 @@ def load_parameter_file(*, node, node_name, parameter_file, use_wildcard):
49
49
parameters = list (parameter_dict_from_yaml_file (parameter_file , use_wildcard ).values ())
50
50
rclpy .spin_until_future_complete (node , future )
51
51
response = future .result ()
52
+ if response is None :
53
+ raise RuntimeError ('Exception while calling service of node '
54
+ f'{ node_name } : { future .exception ()} ' )
55
+
52
56
assert len (response .results ) == len (parameters ), 'Not all parameters set'
53
57
for i in range (0 , len (response .results )):
54
58
result = response .results [i ]
@@ -65,6 +69,26 @@ def load_parameter_file(*, node, node_name, parameter_file, use_wildcard):
65
69
print (msg , file = sys .stderr )
66
70
67
71
72
+ def load_parameter_file_atomically (* , node , node_name , parameter_file , use_wildcard ):
73
+ client = AsyncParameterClient (node , node_name )
74
+ ready = client .wait_for_services (timeout_sec = 5.0 )
75
+ if not ready :
76
+ raise RuntimeError ('Wait for service timed out' )
77
+ future = client .load_parameter_file_atomically (parameter_file , use_wildcard )
78
+ parameters = list (parameter_dict_from_yaml_file (parameter_file , use_wildcard ).values ())
79
+ rclpy .spin_until_future_complete (node , future )
80
+ response = future .result ()
81
+ if response is None :
82
+ raise RuntimeError ('Exception while calling service of node '
83
+ f'{ node_name } : { future .exception ()} ' )
84
+
85
+ if response .result .successful :
86
+ msg = 'Set parameters {} successful' .format (' ' .join ([i .name for i in parameters ]))
87
+ if response .result .reason :
88
+ msg += ': ' + response .result .reason
89
+ print (msg )
90
+
91
+
68
92
def call_describe_parameters (* , node , node_name , parameter_names = None ):
69
93
client = AsyncParameterClient (node , node_name )
70
94
ready = client .wait_for_services (timeout_sec = 5.0 )
@@ -93,6 +117,18 @@ def call_get_parameters(*, node, node_name, parameter_names):
93
117
return response
94
118
95
119
120
+ def call_set_parameters_atomically (* , node , node_name , parameters ):
121
+ client = AsyncParameterClient (node , node_name )
122
+ client .wait_for_services (timeout_sec = 5.0 )
123
+ future = client .set_parameters_atomically (parameters )
124
+ rclpy .spin_until_future_complete (node , future )
125
+ response = future .result ()
126
+ if response is None :
127
+ raise RuntimeError ('Exception while calling service of node '
128
+ f'{ node_name } : { future .exception ()} ' )
129
+ return response
130
+
131
+
96
132
def call_set_parameters (* , node , node_name , parameters ):
97
133
client = AsyncParameterClient (node , node_name )
98
134
ready = client .wait_for_services (timeout_sec = 5.0 )
0 commit comments