|
39 | 39 | from ..utilities import evaluate_parameters |
40 | 40 | from ..utilities import get_node_name_count |
41 | 41 | from ..utilities import to_parameters_list |
| 42 | +from ..utilities.normalize_parameters import normalize_parameter_dict |
42 | 43 |
|
43 | 44 |
|
44 | 45 | class LoadComposableNodes(Action): |
@@ -96,44 +97,7 @@ def _load_node( |
96 | 97 | ) |
97 | 98 | ) |
98 | 99 | return |
99 | | - request = composition_interfaces.srv.LoadNode.Request() |
100 | | - request.package_name = perform_substitutions( |
101 | | - context, composable_node_description.package |
102 | | - ) |
103 | | - request.plugin_name = perform_substitutions( |
104 | | - context, composable_node_description.node_plugin |
105 | | - ) |
106 | | - if composable_node_description.node_name is not None: |
107 | | - request.node_name = perform_substitutions( |
108 | | - context, composable_node_description.node_name |
109 | | - ) |
110 | | - if composable_node_description.node_namespace is not None: |
111 | | - request.node_namespace = perform_substitutions( |
112 | | - context, composable_node_description.node_namespace |
113 | | - ) |
114 | | - # request.log_level = perform_substitutions(context, node_description.log_level) |
115 | | - if composable_node_description.remappings is not None: |
116 | | - for from_, to in composable_node_description.remappings: |
117 | | - request.remap_rules.append('{}:={}'.format( |
118 | | - perform_substitutions(context, list(from_)), |
119 | | - perform_substitutions(context, list(to)), |
120 | | - )) |
121 | | - if composable_node_description.parameters is not None: |
122 | | - request.parameters = [ |
123 | | - param.to_parameter_msg() for param in to_parameters_list( |
124 | | - context, evaluate_parameters( |
125 | | - context, composable_node_description.parameters |
126 | | - ) |
127 | | - ) |
128 | | - ] |
129 | | - if composable_node_description.extra_arguments is not None: |
130 | | - request.extra_arguments = [ |
131 | | - param.to_parameter_msg() for param in to_parameters_list( |
132 | | - context, evaluate_parameters( |
133 | | - context, composable_node_description.extra_arguments |
134 | | - ) |
135 | | - ) |
136 | | - ] |
| 100 | + request = get_composable_node_load_request(composable_node_description, context) |
137 | 101 | response = self.__rclpy_load_node_client.call(request) |
138 | 102 | node_name = response.full_node_name if response.full_node_name else request.node_name |
139 | 103 | if response.success: |
@@ -208,3 +172,55 @@ def execute( |
208 | 172 | None, self._load_in_sequence, self.__composable_node_descriptions, context |
209 | 173 | ) |
210 | 174 | ) |
| 175 | + |
| 176 | + |
| 177 | +def get_composable_node_load_request( |
| 178 | + composable_node_description: ComposableNode, |
| 179 | + context: LaunchContext |
| 180 | +): |
| 181 | + """Get the request that will be send to the composable node container.""" |
| 182 | + request = composition_interfaces.srv.LoadNode.Request() |
| 183 | + request.package_name = perform_substitutions( |
| 184 | + context, composable_node_description.package |
| 185 | + ) |
| 186 | + request.plugin_name = perform_substitutions( |
| 187 | + context, composable_node_description.node_plugin |
| 188 | + ) |
| 189 | + if composable_node_description.node_name is not None: |
| 190 | + request.node_name = perform_substitutions( |
| 191 | + context, composable_node_description.node_name |
| 192 | + ) |
| 193 | + if composable_node_description.node_namespace is not None: |
| 194 | + request.node_namespace = perform_substitutions( |
| 195 | + context, composable_node_description.node_namespace |
| 196 | + ) |
| 197 | + # request.log_level = perform_substitutions(context, node_description.log_level) |
| 198 | + if composable_node_description.remappings is not None: |
| 199 | + for from_, to in composable_node_description.remappings: |
| 200 | + request.remap_rules.append('{}:={}'.format( |
| 201 | + perform_substitutions(context, list(from_)), |
| 202 | + perform_substitutions(context, list(to)), |
| 203 | + )) |
| 204 | + global_params = context.launch_configurations.get('ros_params', None) |
| 205 | + parameters = [] |
| 206 | + if global_params is not None: |
| 207 | + parameters.append(normalize_parameter_dict(global_params)) |
| 208 | + if composable_node_description.parameters is not None: |
| 209 | + parameters.extend(list(composable_node_description.parameters)) |
| 210 | + if parameters: |
| 211 | + request.parameters = [ |
| 212 | + param.to_parameter_msg() for param in to_parameters_list( |
| 213 | + context, evaluate_parameters( |
| 214 | + context, parameters |
| 215 | + ) |
| 216 | + ) |
| 217 | + ] |
| 218 | + if composable_node_description.extra_arguments is not None: |
| 219 | + request.extra_arguments = [ |
| 220 | + param.to_parameter_msg() for param in to_parameters_list( |
| 221 | + context, evaluate_parameters( |
| 222 | + context, composable_node_description.extra_arguments |
| 223 | + ) |
| 224 | + ) |
| 225 | + ] |
| 226 | + return request |
0 commit comments