|
30 | 30 | from ..descriptions import ComposableNode |
31 | 31 | from ..utilities import evaluate_parameters |
32 | 32 | from ..utilities import to_parameters_list |
| 33 | +from ..utilities.normalize_parameters import normalize_parameter_dict |
33 | 34 |
|
34 | 35 |
|
35 | 36 | class LoadComposableNodes(Action): |
@@ -85,44 +86,7 @@ def _load_node( |
85 | 86 | ) |
86 | 87 | ) |
87 | 88 | return |
88 | | - request = composition_interfaces.srv.LoadNode.Request() |
89 | | - request.package_name = perform_substitutions( |
90 | | - context, composable_node_description.package |
91 | | - ) |
92 | | - request.plugin_name = perform_substitutions( |
93 | | - context, composable_node_description.node_plugin |
94 | | - ) |
95 | | - if composable_node_description.node_name is not None: |
96 | | - request.node_name = perform_substitutions( |
97 | | - context, composable_node_description.node_name |
98 | | - ) |
99 | | - if composable_node_description.node_namespace is not None: |
100 | | - request.node_namespace = perform_substitutions( |
101 | | - context, composable_node_description.node_namespace |
102 | | - ) |
103 | | - # request.log_level = perform_substitutions(context, node_description.log_level) |
104 | | - if composable_node_description.remappings is not None: |
105 | | - for from_, to in composable_node_description.remappings: |
106 | | - request.remap_rules.append('{}:={}'.format( |
107 | | - perform_substitutions(context, list(from_)), |
108 | | - perform_substitutions(context, list(to)), |
109 | | - )) |
110 | | - if composable_node_description.parameters is not None: |
111 | | - request.parameters = [ |
112 | | - param.to_parameter_msg() for param in to_parameters_list( |
113 | | - context, evaluate_parameters( |
114 | | - context, composable_node_description.parameters |
115 | | - ) |
116 | | - ) |
117 | | - ] |
118 | | - if composable_node_description.extra_arguments is not None: |
119 | | - request.extra_arguments = [ |
120 | | - param.to_parameter_msg() for param in to_parameters_list( |
121 | | - context, evaluate_parameters( |
122 | | - context, composable_node_description.extra_arguments |
123 | | - ) |
124 | | - ) |
125 | | - ] |
| 89 | + request = get_composable_node_load_request(composable_node_description, context) |
126 | 90 | response = self.__rclpy_load_node_client.call(request) |
127 | 91 | if not response.success: |
128 | 92 | self.__logger.error( |
@@ -173,3 +137,55 @@ def execute( |
173 | 137 | None, self._load_in_sequence, self.__composable_node_descriptions, context |
174 | 138 | ) |
175 | 139 | ) |
| 140 | + |
| 141 | + |
| 142 | +def get_composable_node_load_request( |
| 143 | + composable_node_description: ComposableNode, |
| 144 | + context: LaunchContext |
| 145 | +): |
| 146 | + """Get the request that will be send to the composable node container.""" |
| 147 | + request = composition_interfaces.srv.LoadNode.Request() |
| 148 | + request.package_name = perform_substitutions( |
| 149 | + context, composable_node_description.package |
| 150 | + ) |
| 151 | + request.plugin_name = perform_substitutions( |
| 152 | + context, composable_node_description.node_plugin |
| 153 | + ) |
| 154 | + if composable_node_description.node_name is not None: |
| 155 | + request.node_name = perform_substitutions( |
| 156 | + context, composable_node_description.node_name |
| 157 | + ) |
| 158 | + if composable_node_description.node_namespace is not None: |
| 159 | + request.node_namespace = perform_substitutions( |
| 160 | + context, composable_node_description.node_namespace |
| 161 | + ) |
| 162 | + # request.log_level = perform_substitutions(context, node_description.log_level) |
| 163 | + if composable_node_description.remappings is not None: |
| 164 | + for from_, to in composable_node_description.remappings: |
| 165 | + request.remap_rules.append('{}:={}'.format( |
| 166 | + perform_substitutions(context, list(from_)), |
| 167 | + perform_substitutions(context, list(to)), |
| 168 | + )) |
| 169 | + global_params = context.launch_configurations.get('ros_params', None) |
| 170 | + parameters = [] |
| 171 | + if global_params is not None: |
| 172 | + parameters.append(normalize_parameter_dict(global_params)) |
| 173 | + if composable_node_description.parameters is not None: |
| 174 | + parameters.extend(list(composable_node_description.parameters)) |
| 175 | + if parameters: |
| 176 | + request.parameters = [ |
| 177 | + param.to_parameter_msg() for param in to_parameters_list( |
| 178 | + context, evaluate_parameters( |
| 179 | + context, parameters |
| 180 | + ) |
| 181 | + ) |
| 182 | + ] |
| 183 | + if composable_node_description.extra_arguments is not None: |
| 184 | + request.extra_arguments = [ |
| 185 | + param.to_parameter_msg() for param in to_parameters_list( |
| 186 | + context, evaluate_parameters( |
| 187 | + context, composable_node_description.extra_arguments |
| 188 | + ) |
| 189 | + ) |
| 190 | + ] |
| 191 | + return request |
0 commit comments