Skip to content

Commit 6410f6c

Browse files
Set parameters from file for composable nodes (ros2#281)
* Set parameters from file for composable nodes Signed-off-by: Aditya Pande <[email protected]> * test case added Signed-off-by: Aditya Pande <[email protected]> * test case added Signed-off-by: Aditya Pande <[email protected]> * use pathlib instead of os.path Signed-off-by: Aditya Pande <[email protected]>
1 parent f6931de commit 6410f6c

File tree

2 files changed

+50
-1
lines changed

2 files changed

+50
-1
lines changed

launch_ros/launch_ros/actions/load_composable_nodes.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
"""Module for the LoadComposableNodes action."""
1616

17+
from pathlib import Path
1718
import threading
1819

1920
from typing import List
@@ -35,6 +36,7 @@
3536
from launch.utilities import is_a_subclass
3637
from launch.utilities import normalize_to_list_of_substitutions
3738
from launch.utilities import perform_substitutions
39+
from launch_ros.parameter_descriptions import ParameterFile
3840

3941
from .composable_node_container import ComposableNodeContainer
4042

@@ -281,6 +283,11 @@ def get_composable_node_load_request(
281283
if isinstance(param, tuple):
282284
subs = normalize_parameter_dict({param[0]: param[1]})
283285
parameters.append(subs)
286+
else:
287+
param_file_path = Path(param).resolve()
288+
assert param_file_path.is_file()
289+
subs = ParameterFile(param_file_path)
290+
parameters.append(subs)
284291
if composable_node_description.parameters is not None:
285292
parameters.extend(list(composable_node_description.parameters))
286293
if parameters:

test_launch_ros/test/test_launch_ros/actions/test_set_parameters_from_file.py

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424

2525
from launch_ros.actions import Node
2626
from launch_ros.actions import SetParameter, SetParametersFromFile
27+
from launch_ros.actions.load_composable_nodes import get_composable_node_load_request
28+
from launch_ros.descriptions import ComposableNode
2729

2830
import yaml
2931

@@ -133,4 +135,44 @@ def test_set_param_with_node():
133135
}
134136
}
135137

136-
# TODO: (Aditya) Add test case for composable node
138+
139+
def test_set_param_with_composable_node():
140+
lc = MockContext()
141+
node_description = ComposableNode(
142+
package='asd',
143+
plugin='my_plugin',
144+
name='my_node',
145+
namespace='my_ns',
146+
parameters=[{'asd': 'bsd'}]
147+
)
148+
param_file_path = os.path.dirname(os.path.abspath(__file__)) + '/example_parameters_1.yaml'
149+
set_param_1 = SetParametersFromFile(param_file_path)
150+
set_param_1.execute(lc)
151+
request = get_composable_node_load_request(node_description, lc)
152+
parameters = request.parameters
153+
assert len(parameters) == 3
154+
assert parameters[0].name == 'param_1_name'
155+
assert parameters[0].value.integer_value == 10
156+
assert parameters[1].name == 'param_2_name'
157+
assert parameters[1].value.integer_value == 20
158+
assert parameters[2].name == 'asd'
159+
assert parameters[2].value.string_value == 'bsd'
160+
161+
lc = MockContext()
162+
node_description = ComposableNode(
163+
package='asd',
164+
plugin='my_plugin',
165+
name='my_node_2',
166+
namespace='my_ns',
167+
parameters=[{'asd': 'bsd'}]
168+
)
169+
param_file_path = os.path.dirname(os.path.abspath(__file__)) + '/example_parameters_1.yaml'
170+
set_param_1 = SetParametersFromFile(param_file_path)
171+
set_param_1.execute(lc)
172+
request = get_composable_node_load_request(node_description, lc)
173+
parameters = request.parameters
174+
assert len(parameters) == 2
175+
assert parameters[0].name == 'param_1_name'
176+
assert parameters[0].value.integer_value == 10
177+
assert parameters[1].name == 'asd'
178+
assert parameters[1].value.string_value == 'bsd'

0 commit comments

Comments
 (0)