diff --git a/example_cmake_python/cmake_generate_parameter_module_example/minimal_publisher.py b/example_cmake_python/cmake_generate_parameter_module_example/minimal_publisher.py index 58574c9..e80bb12 100644 --- a/example_cmake_python/cmake_generate_parameter_module_example/minimal_publisher.py +++ b/example_cmake_python/cmake_generate_parameter_module_example/minimal_publisher.py @@ -42,6 +42,7 @@ def __init__(self): self.param_listener = admittance_controller.ParamListener(self) self.params = self.param_listener.get_params() + self.param_listener.set_user_callback(self.reconfigure_callback) self.get_logger().info( "Initial control frame parameter is: '%s'" % self.params.control.frame.id ) @@ -64,6 +65,15 @@ def timer_callback(self): for d in self.params.fixed_array: self.get_logger().info("value: '%s'" % str(d)) + def reconfigure_callback(self, parameters): + self.get_logger().info('Reconfigure callback fired!') + self.get_logger().info( + "New control frame parameter is: '%s'" % parameters.control.frame.id + ) + self.get_logger().info("fixed string is: '%s'" % parameters.fixed_string) + for d in parameters.fixed_array: + self.get_logger().info("value: '%s'" % str(d)) + def main(args=None): rclpy.init(args=args) diff --git a/generate_parameter_library_py/generate_parameter_library_py/jinja_templates/python/parameter_library_header b/generate_parameter_library_py/generate_parameter_library_py/jinja_templates/python/parameter_library_header index 0bfb5b5..8ea5820 100644 --- a/generate_parameter_library_py/generate_parameter_library_py/jinja_templates/python/parameter_library_header +++ b/generate_parameter_library_py/generate_parameter_library_py/jinja_templates/python/parameter_library_header @@ -41,6 +41,7 @@ stamp_ = Time() self.declare_params() self.node_.add_on_set_parameters_callback(self.update) + self.user_callback = None self.clock_ = Clock() def get_params(self): @@ -79,6 +80,12 @@ stamp_ = Time() params_to_set = self.unpack_parameter_dict('', param_dict) self.update(params_to_set) + def set_user_callback(self, callback): + self.user_callback = callback + + def clear_user_callback(self): + self.user_callback = None + def refresh_dynamic_parameters(self): updated_params = self.get_params() # TODO remove any destroyed dynamic parameters @@ -109,6 +116,8 @@ for param in parameters: updated_params.stamp_ = self.clock_.now() self.update_internal_params(updated_params) + if self.user_callback: + self.user_callback(self.get_params()) return SetParametersResult(successful=True) def update_internal_params(self, updated_params):