From 0c39f888d0d34ed2bab01cb8b05651a50ac4da16 Mon Sep 17 00:00:00 2001 From: yadnyeshwar Date: Sun, 8 Mar 2026 07:31:51 +0000 Subject: [PATCH 1/3] Add minimal rclpy timer example demonstrating create_timer() usage Signed-off-by: yadnyeshwar --- rclpy/topics/minimal_timer/README.md | 33 +++++++++++++++++++++ rclpy/topics/minimal_timer/minimal_timer.py | 29 ++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 rclpy/topics/minimal_timer/README.md create mode 100644 rclpy/topics/minimal_timer/minimal_timer.py diff --git a/rclpy/topics/minimal_timer/README.md b/rclpy/topics/minimal_timer/README.md new file mode 100644 index 00000000..4094f457 --- /dev/null +++ b/rclpy/topics/minimal_timer/README.md @@ -0,0 +1,33 @@ +# Minimal Timer Example + +This example demonstrates how to create a simple timer node in ROS 2 using rclpy. + +## Overview + +ROS 2 timers allow nodes to execute a callback function periodically. +They are commonly used for tasks such as monitoring loops, periodic updates, +or scheduled processing. + +This example creates a node that executes a callback every second using +`create_timer()`. + +## Running the Example + +Run the node with: + +```bash +python3 minimal_timer.py + +``` + +You should see log messages printed once per second. + +## Example output + +Timer callback triggered +Timer callback triggered +Timer callback triggered + +## Key Concept + +`create_timer()` schedules a callback to be executed periodically. diff --git a/rclpy/topics/minimal_timer/minimal_timer.py b/rclpy/topics/minimal_timer/minimal_timer.py new file mode 100644 index 00000000..d0eee4bd --- /dev/null +++ b/rclpy/topics/minimal_timer/minimal_timer.py @@ -0,0 +1,29 @@ +import rclpy +from rclpy.node import Node + + +class MinimalTimer(Node): + + def __init__(self): + super().__init__('minimal_timer') + + timer_period = 1.0 + self.timer = self.create_timer(timer_period, self.timer_callback) + + def timer_callback(self): + self.get_logger().info('Timer callback triggered') + + +def main(args=None): + rclpy.init(args=args) + + minimal_timer = MinimalTimer() + + rclpy.spin(minimal_timer) + + minimal_timer.destroy_node() + rclpy.shutdown() + + +if __name__ == '__main__': + main() From 4ca020b1d7db2944e35131c2dd32145c2e2f8704 Mon Sep 17 00:00:00 2001 From: yadnyeshwar Date: Mon, 9 Mar 2026 17:04:25 +0000 Subject: [PATCH 2/3] Move minimal_timer example under rclpy/timers to align with rclcpp examples Signed-off-by: yadnyeshwar --- rclpy/{topics => timers}/minimal_timer/README.md | 0 rclpy/{topics => timers}/minimal_timer/minimal_timer.py | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename rclpy/{topics => timers}/minimal_timer/README.md (100%) rename rclpy/{topics => timers}/minimal_timer/minimal_timer.py (100%) diff --git a/rclpy/topics/minimal_timer/README.md b/rclpy/timers/minimal_timer/README.md similarity index 100% rename from rclpy/topics/minimal_timer/README.md rename to rclpy/timers/minimal_timer/README.md diff --git a/rclpy/topics/minimal_timer/minimal_timer.py b/rclpy/timers/minimal_timer/minimal_timer.py similarity index 100% rename from rclpy/topics/minimal_timer/minimal_timer.py rename to rclpy/timers/minimal_timer/minimal_timer.py From ea852707f3abb2c5348e009f15e1f5fe0a119225 Mon Sep 17 00:00:00 2001 From: yadnyeshwar Date: Tue, 31 Mar 2026 06:11:37 +0000 Subject: [PATCH 3/3] Create installable package for minimal rclpy timer example Signed-off-by: yadnyeshwar --- .../examples_rclpy_minimal_timer/__init__.py | 0 .../minimal_timer.py | 29 +++++++++++++++++++ .../examples_rclpy_minimal_timer/package.xml | 17 +++++++++++ .../resource/examples_rclpy_minimal_timer | 0 .../examples_rclpy_minimal_timer/setup.py | 25 ++++++++++++++++ .../resource/examples_rclpy_minimal_timer | 0 6 files changed, 71 insertions(+) create mode 100644 rclpy/topics/examples_rclpy_minimal_timer/examples_rclpy_minimal_timer/__init__.py create mode 100644 rclpy/topics/examples_rclpy_minimal_timer/examples_rclpy_minimal_timer/minimal_timer.py create mode 100644 rclpy/topics/examples_rclpy_minimal_timer/package.xml create mode 100644 rclpy/topics/examples_rclpy_minimal_timer/resource/examples_rclpy_minimal_timer create mode 100644 rclpy/topics/examples_rclpy_minimal_timer/setup.py create mode 100644 rclpy/topics/resource/examples_rclpy_minimal_timer diff --git a/rclpy/topics/examples_rclpy_minimal_timer/examples_rclpy_minimal_timer/__init__.py b/rclpy/topics/examples_rclpy_minimal_timer/examples_rclpy_minimal_timer/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/rclpy/topics/examples_rclpy_minimal_timer/examples_rclpy_minimal_timer/minimal_timer.py b/rclpy/topics/examples_rclpy_minimal_timer/examples_rclpy_minimal_timer/minimal_timer.py new file mode 100644 index 00000000..d0eee4bd --- /dev/null +++ b/rclpy/topics/examples_rclpy_minimal_timer/examples_rclpy_minimal_timer/minimal_timer.py @@ -0,0 +1,29 @@ +import rclpy +from rclpy.node import Node + + +class MinimalTimer(Node): + + def __init__(self): + super().__init__('minimal_timer') + + timer_period = 1.0 + self.timer = self.create_timer(timer_period, self.timer_callback) + + def timer_callback(self): + self.get_logger().info('Timer callback triggered') + + +def main(args=None): + rclpy.init(args=args) + + minimal_timer = MinimalTimer() + + rclpy.spin(minimal_timer) + + minimal_timer.destroy_node() + rclpy.shutdown() + + +if __name__ == '__main__': + main() diff --git a/rclpy/topics/examples_rclpy_minimal_timer/package.xml b/rclpy/topics/examples_rclpy_minimal_timer/package.xml new file mode 100644 index 00000000..1460b2f7 --- /dev/null +++ b/rclpy/topics/examples_rclpy_minimal_timer/package.xml @@ -0,0 +1,17 @@ + + + examples_rclpy_minimal_timer + 0.0.0 + Minimal rclpy timer example demonstrating create_timer usage. + + Yadnyeshwar Sakhare + Apache-2.0 + + ament_python + + rclpy + + ament_lint_auto + ament_lint_common + + diff --git a/rclpy/topics/examples_rclpy_minimal_timer/resource/examples_rclpy_minimal_timer b/rclpy/topics/examples_rclpy_minimal_timer/resource/examples_rclpy_minimal_timer new file mode 100644 index 00000000..e69de29b diff --git a/rclpy/topics/examples_rclpy_minimal_timer/setup.py b/rclpy/topics/examples_rclpy_minimal_timer/setup.py new file mode 100644 index 00000000..79e21509 --- /dev/null +++ b/rclpy/topics/examples_rclpy_minimal_timer/setup.py @@ -0,0 +1,25 @@ +from setuptools import setup + +package_name = 'examples_rclpy_minimal_timer' + +setup( + name=package_name, + version='0.0.0', + packages=[package_name], + data_files=[ + ('share/ament_index/resource_index/packages', + ['resource/' + package_name]), + ('share/' + package_name, ['package.xml']), + ], + install_requires=['setuptools'], + zip_safe=True, + maintainer='Yadnyeshwar Sakhare', + maintainer_email='yadnyeshwarasa@gmail.com', + description='Minimal rclpy timer example demonstrating create_timer() usage.', + license='Apache License 2.0', + entry_points={ + 'console_scripts': [ + 'minimal_timer = examples_rclpy_minimal_timer.minimal_timer:main', + ], + }, +) diff --git a/rclpy/topics/resource/examples_rclpy_minimal_timer b/rclpy/topics/resource/examples_rclpy_minimal_timer new file mode 100644 index 00000000..e69de29b