From 0a78750a43025ba92d94ac8dda2fab06612e4628 Mon Sep 17 00:00:00 2001 From: Yannick de Hoop <48760205+YannickdeHoop@users.noreply.github.com> Date: Tue, 1 Apr 2025 10:53:41 +0200 Subject: [PATCH 1/3] feat: Add user callback python (#3) --- .../minimal_publisher.py | 3 +++ .../jinja_templates/python/parameter_library_header | 9 +++++++++ 2 files changed, 12 insertions(+) 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 58574c96..36b99347 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,8 @@ 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!") 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 0bfb5b57..8ea58206 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): From 2574b4a3ff75ac949c020b250d69ceae2f34ac1d Mon Sep 17 00:00:00 2001 From: Yannick de Hoop Date: Tue, 3 Jun 2025 09:32:38 +0200 Subject: [PATCH 2/3] resolve comments --- .../minimal_publisher.py | 6 ++++++ 1 file changed, 6 insertions(+) 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 36b99347..be45a2df 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 @@ -67,6 +67,12 @@ def timer_callback(self): 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) From 0cddf5c61fb5f0a6dfa40bc92d7238fa68b69ca9 Mon Sep 17 00:00:00 2001 From: Yannick de Hoop Date: Thu, 5 Jun 2025 13:10:27 +0200 Subject: [PATCH 3/3] run pre-commit hook --- .../minimal_publisher.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 be45a2df..e80bb124 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 @@ -66,7 +66,7 @@ def timer_callback(self): self.get_logger().info("value: '%s'" % str(d)) def reconfigure_callback(self, parameters): - self.get_logger().info("Reconfigure callback fired!") + self.get_logger().info('Reconfigure callback fired!') self.get_logger().info( "New control frame parameter is: '%s'" % parameters.control.frame.id ) @@ -74,6 +74,7 @@ def reconfigure_callback(self, parameters): for d in parameters.fixed_array: self.get_logger().info("value: '%s'" % str(d)) + def main(args=None): rclpy.init(args=args) node = MinimalParam()