Skip to content

Commit 3da6c01

Browse files
authored
Add ability for param_listener to load values from yaml dictionary (#211)
1 parent bfc22d5 commit 3da6c01

File tree

1 file changed

+27
-0
lines changed

1 file changed

+27
-0
lines changed

generate_parameter_library_py/generate_parameter_library_py/jinja_templates/python/parameter_library_header

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ from rclpy.exceptions import InvalidParameterValueException
1010
from rclpy.time import Time
1111
import copy
1212
import rclpy
13+
import rclpy.parameter
1314
from generate_parameter_library_py.python_validators import ParameterValidators
1415

1516
{% if user_validation_file|length -%}
@@ -53,6 +54,32 @@ stamp_ = Time()
5354
def is_old(self, other_param):
5455
return self.params_.stamp_ != other_param.stamp_
5556

57+
@staticmethod
58+
def unpack_parameter_dict(namespace: str, parameter_dict: dict):
59+
"""
60+
Flatten a parameter dictionary recursively.
61+
62+
:param namespace: The namespace to prepend to the parameter names.
63+
:param parameter_dict: A dictionary of parameters keyed by the parameter names
64+
:return: A list of rclpy Parameter objects
65+
"""
66+
parameters = []
67+
for param_name, param_value in parameter_dict.items():
68+
full_param_name = namespace + param_name
69+
# Unroll nested parameters
70+
if isinstance(param_value, dict):
71+
nested_params = unpack_parameter_dict(
72+
namespace=full_param_name + rclpy.parameter.PARAMETER_SEPARATOR_STRING,
73+
parameter_dict=param_value)
74+
parameters.extend(nested_params)
75+
else:
76+
parameters.append(rclpy.parameter.Parameter(full_param_name, value=param_value))
77+
return parameters
78+
79+
def set_params_from_dict(self, param_dict):
80+
params_to_set = unpack_parameter_dict('', param_dict)
81+
self.update(params_to_set)
82+
5683
def refresh_dynamic_parameters(self):
5784
updated_params = self.get_params()
5885
# TODO remove any destroyed dynamic parameters

0 commit comments

Comments
 (0)