Package Summary
| Tags | No category tags. |
| Version | 0.20.7 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/ros2/demos.git |
| VCS Type | git |
| VCS Version | humble |
| Last Updated | 2025-11-12 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Tags | No category tags. |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Audrow Nash
- Michael Jeronimo
Authors
- Karsten Knese
- Mabel Zhang
Introduction
What Is This?
ROS 2 introduces the concept of managed nodes, also called
LifecycleNodes. In the following tutorial, we explain the purpose of
these nodes, what makes them different from regular nodes and how they
comply to a lifecycle management.
Basic Concept and Nomenclature
Managed nodes contain a state machine with a set of predefined states. These states can be changed by invoking a transition, passing a specific transition ID which indicates the succeeding consecutive state. The state machine is implemented as described at the Managed nodes design page.
- The implementation differentiates between
Primary StatesandTransition States. -
-
Primary statesare supposed to be steady states in which any node can perform their respective task. -
Transition statesare used to indicate whether a transition between two primary states is considered successful or not.
-
In the end, any managed node can be in one of the following states:
Primary States (steady states):
- unconfigured
- inactive
- active
- finalized
Transition States (intermediate states):
- configuring
- activating
- deactivating
- cleaningup
- shuttingdown
The possible transitions to invoke are:
- configure
- activate
- deactivate
- cleanup
- shutdown
For a detailed explanation of the applied state machine, we refer again to the Managed nodes design page which provides specific info about each state and transition.
The demo
What's happening
The demo is split into 3 separate applications:
lifecycle_talkerlifecycle_listenerlifecycle_service_client
The lifecycle_talker represents a managed node and publishes according
to which state the node is in. Its primary task (in this example
publishing) is executed in the active state.
Lifecycle transitions invoke callback functions that prepare or tear down the resources required for publishing:
-
on_configure()(in theconfiguringstate): Create and initialize the publisher and timer. -
on_activate()(in theactivatingstate): Activate the publisher and timer so that publishing can occur in theactivestate. -
on_deactivate()(in thedeactivatingstate): Stop the publisher. -
on_cleanup()(in thecleaningUpstate): Release the pointers to publisher and timer. -
on_shutdown()(in theshuttingDownstate): In this case does the same ason_cleanup(), in general it would for example release system resources.
In summary, the node only performs its main functionality (publishing)
while in the active state. The transitions and their corresponding
callbacks ensure that resources are correctly initialized, activated,
deactivated, and cleaned up as the node moves between lifecycle states.
This demo shows a simple talker/listener pair of nodes. However, imagine
a more realistic scenario with attached hardware which may have a rather
long booting phase, i.e. a laser or camera. In that case, one could
initialize the device driver in the configuring transition state,
start and stop the publishing of the device’s data in the activating
and deactivating transition states, and only shut down the device
completely in the cleaningUp or shuttingdown transition states.
The lifecycle_listener is a regular (non-lifecycle) node that
subscribes to the lifecycle_talker's topics. It logs the published
messages as well as the transition events. The talker publishes only in
the active state and thus the listener obviously only receives messages
when the talker is in an active state.
File truncated at 100 lines see the full file
Changelog for package lifecycle
0.20.7 (2025-11-12)
0.20.6 (2025-09-17)
0.20.5 (2024-07-26)
0.20.4 (2024-05-15)
0.20.3 (2023-01-10)
0.20.2 (2022-05-10)
0.20.1 (2022-04-08)
- Make lifecycle demo automatically exit when done (#558)
- Contributors: Shane Loretz
0.20.0 (2022-03-01)
- Use default on_activate()/on_deactivate() implemenetation of Node (#552)
- Contributors: Ivan Santiago Paunovic
0.19.0 (2022-01-14)
0.18.0 (2021-12-17)
- Update maintainers to Audrow Nash and Michael Jeronimo (#543)
- Contributors: Audrow Nash
0.17.0 (2021-10-18)
- Fix use of future in lifecycle demo (#534)
- Fixing deprecated subscriber callback warnings (#532)
- Contributors: Abrar Rahman Protyasha, Christophe Bedard
0.16.0 (2021-08-11)
0.15.0 (2021-05-14)
0.14.2 (2021-04-26)
- Cleanup the README.rst for the lifecycle demo. (#508)
- Contributors: Chris Lalancette
0.14.1 (2021-04-19)
0.14.0 (2021-04-06)
- change ParameterEventHandler to take events as const ref instead of shared pointer (#494)
- Contributors: William Woodall
0.13.0 (2021-03-25)
0.12.1 (2021-03-18)
0.12.0 (2021-01-25)
0.11.0 (2020-12-10)
- Update the package.xml files with the latest Open Robotics maintainers (#466)
- Contributors: Michael Jeronimo
0.10.1 (2020-09-21)
- Add missing required parameter in LifecycleNode launch action (#456)
- Contributors: Ivan Santiago Paunovic
0.10.0 (2020-06-17)
0.9.3 (2020-06-01)
0.9.2 (2020-05-26)
- Fix typo (#445)
- Replace
ros2 msgcommand in lifecycle README (#446) - Contributors: Audrow Nash, Shota Aoki
0.9.1 (2020-05-12)
0.9.0 (2020-04-30)
- Replace deprecated launch_ros usage (#437)
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| lifecycle_msgs | |
| rclcpp_lifecycle | |
| std_msgs | |
| ament_cmake | |
| ament_lint_auto | |
| ament_lint_common | |
| ros_testing |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| lifecycle_py | |
| test_launch_ros | |
| desktop |
Launch files
Messages
Services
Plugins
Recent questions tagged lifecycle at Robotics Stack Exchange
Package Summary
| Tags | No category tags. |
| Version | 0.33.8 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/ros2/demos.git |
| VCS Type | git |
| VCS Version | jazzy |
| Last Updated | 2025-11-12 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Tags | No category tags. |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Aditya Pande
- Audrow Nash
Authors
- Karsten Knese
- Mabel Zhang
Introduction
What Is This?
ROS 2 introduces the concept of managed nodes, also called
LifecycleNodes. In the following tutorial, we explain the purpose of
these nodes, what makes them different from regular nodes and how they
comply to a lifecycle management.
Basic Concept and Nomenclature
Managed nodes contain a state machine with a set of predefined states. These states can be changed by invoking a transition, passing a specific transition ID which indicates the succeeding consecutive state. The state machine is implemented as described at the Managed nodes design page.
- The implementation differentiates between
Primary StatesandTransition States. -
-
Primary statesare supposed to be steady states in which any node can perform their respective task. -
Transition statesare used to indicate whether a transition between two primary states is considered successful or not.
-
In the end, any managed node can be in one of the following states:
Primary States (steady states):
- unconfigured
- inactive
- active
- finalized
Transition States (intermediate states):
- configuring
- activating
- deactivating
- cleaningup
- shuttingdown
The possible transitions to invoke are:
- configure
- activate
- deactivate
- cleanup
- shutdown
For a detailed explanation of the applied state machine, we refer again to the Managed nodes design page which provides specific info about each state and transition.
The demo
What's happening
The demo is split into 3 separate applications:
lifecycle_talkerlifecycle_listenerlifecycle_service_client
The lifecycle_talker represents a managed node and publishes according
to which state the node is in. Its primary task (in this example
publishing) is executed in the active state.
Lifecycle transitions invoke callback functions that prepare or tear down the resources required for publishing:
-
on_configure()(in theconfiguringstate): Create and initialize the publisher and timer. -
on_activate()(in theactivatingstate): Activate the publisher and timer so that publishing can occur in theactivestate. -
on_deactivate()(in thedeactivatingstate): Stop the publisher. -
on_cleanup()(in thecleaningUpstate): Release the pointers to publisher and timer. -
on_shutdown()(in theshuttingDownstate): In this case does the same ason_cleanup(), in general it would for example release system resources.
In summary, the node only performs its main functionality (publishing)
while in the active state. The transitions and their corresponding
callbacks ensure that resources are correctly initialized, activated,
deactivated, and cleaned up as the node moves between lifecycle states.
This demo shows a simple talker/listener pair of nodes. However, imagine
a more realistic scenario with attached hardware which may have a rather
long booting phase, i.e. a laser or camera. In that case, one could
initialize the device driver in the configuring transition state,
start and stop the publishing of the device’s data in the activating
and deactivating transition states, and only shut down the device
completely in the cleaningUp or shuttingdown transition states.
The lifecycle_listener is a regular (non-lifecycle) node that
subscribes to the lifecycle_talker's topics. It logs the published
messages as well as the transition events. The talker publishes only in
the active state and thus the listener obviously only receives messages
when the talker is in an active state.
File truncated at 100 lines see the full file
Changelog for package lifecycle
0.33.8 (2025-11-12)
0.33.7 (2025-09-17)
0.33.6 (2025-08-06)
0.33.5 (2024-09-06)
0.33.4 (2024-06-27)
0.33.3 (2024-05-13)
0.33.2 (2024-03-28)
- A few uncrustify fixes for 0.78. (#667)
- Update maintainer list in package.xml files (#665)
- Contributors: Chris Lalancette, Michael Jeronimo
0.33.1 (2024-02-07)
0.33.0 (2024-01-24)
- Migrate std::bind calls to lambda expressions (#659)
- Contributors: Felipe Gomes de Melo
0.32.1 (2023-12-26)
0.32.0 (2023-11-06)
0.31.1 (2023-09-07)
0.31.0 (2023-08-21)
- Switch to using RCLCPP logging macros in the lifecycle package. (#644)
- Contributors: Chris Lalancette
0.30.1 (2023-07-11)
0.30.0 (2023-06-12)
0.29.0 (2023-06-07)
0.28.1 (2023-05-11)
0.28.0 (2023-04-27)
0.27.0 (2023-04-13)
0.26.0 (2023-04-11)
- update launch file name format to match documentation (#588)
- Contributors: Patrick Wspanialy
0.25.0 (2023-03-01)
0.24.1 (2023-02-24)
0.24.0 (2023-02-14)
- Update the demos to C++17. (#594)
- [rolling] Update maintainers - 2022-11-07 (#589)
- Contributors: Audrow Nash, Chris Lalancette
0.23.0 (2022-11-02)
0.22.0 (2022-09-13)
0.21.0 (2022-04-29)
0.20.1 (2022-04-08)
- Make lifecycle demo automatically exit when done (#558)
- Contributors: Shane Loretz
0.20.0 (2022-03-01)
- Use default on_activate()/on_deactivate() implemenetation of Node (#552)
- Contributors: Ivan Santiago Paunovic
0.19.0 (2022-01-14)
0.18.0 (2021-12-17)
- Update maintainers to Audrow Nash and Michael Jeronimo
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_lint_auto | |
| ament_lint_common | |
| ros_testing | |
| lifecycle_msgs | |
| rclcpp | |
| rclcpp_lifecycle | |
| std_msgs |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| lifecycle_py | |
| test_launch_ros | |
| desktop |
Launch files
Messages
Services
Plugins
Recent questions tagged lifecycle at Robotics Stack Exchange
Package Summary
| Tags | No category tags. |
| Version | 0.36.3 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/ros2/demos.git |
| VCS Type | git |
| VCS Version | kilted |
| Last Updated | 2025-11-12 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Tags | No category tags. |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Aditya Pande
- Audrow Nash
Authors
- Karsten Knese
- Mabel Zhang
Introduction
What Is This?
ROS 2 introduces the concept of managed nodes, also called
LifecycleNodes. In the following tutorial, we explain the purpose of
these nodes, what makes them different from regular nodes and how they
comply to a lifecycle management.
Basic Concept and Nomenclature
Managed nodes contain a state machine with a set of predefined states. These states can be changed by invoking a transition, passing a specific transition ID which indicates the succeeding consecutive state. The state machine is implemented as described at the Managed nodes design page.
- The implementation differentiates between
Primary StatesandTransition States. -
-
Primary statesare supposed to be steady states in which any node can perform their respective task. -
Transition statesare used to indicate whether a transition between two primary states is considered successful or not.
-
In the end, any managed node can be in one of the following states:
Primary States (steady states):
- unconfigured
- inactive
- active
- finalized
Transition States (intermediate states):
- configuring
- activating
- deactivating
- cleaningup
- shuttingdown
The possible transitions to invoke are:
- configure
- activate
- deactivate
- cleanup
- shutdown
For a detailed explanation of the applied state machine, we refer again to the Managed nodes design page which provides specific info about each state and transition.
The demo
What's happening
The demo is split into 3 separate applications:
lifecycle_talkerlifecycle_listenerlifecycle_service_client
The lifecycle_talker represents a managed node and publishes according
to which state the node is in. Its primary task (in this example
publishing) is executed in the active state.
Lifecycle transitions invoke callback functions that prepare or tear down the resources required for publishing:
-
on_configure()(in theconfiguringstate): Create and initialize the publisher and timer. -
on_activate()(in theactivatingstate): Activate the publisher and timer so that publishing can occur in theactivestate. -
on_deactivate()(in thedeactivatingstate): Stop the publisher. -
on_cleanup()(in thecleaningUpstate): Release the pointers to publisher and timer. -
on_shutdown()(in theshuttingDownstate): In this case does the same ason_cleanup(), in general it would for example release system resources.
In summary, the node only performs its main functionality (publishing)
while in the active state. The transitions and their corresponding
callbacks ensure that resources are correctly initialized, activated,
deactivated, and cleaned up as the node moves between lifecycle states.
This demo shows a simple talker/listener pair of nodes. However, imagine
a more realistic scenario with attached hardware which may have a rather
long booting phase, i.e. a laser or camera. In that case, one could
initialize the device driver in the configuring transition state,
start and stop the publishing of the device’s data in the activating
and deactivating transition states, and only shut down the device
completely in the cleaningUp or shuttingdown transition states.
The lifecycle_listener is a regular (non-lifecycle) node that
subscribes to the lifecycle_talker's topics. It logs the published
messages as well as the transition events. The talker publishes only in
the active state and thus the listener obviously only receives messages
when the talker is in an active state.
File truncated at 100 lines see the full file
Changelog for package lifecycle
0.36.3 (2025-11-12)
0.36.2 (2025-09-17)
0.36.1 (2025-06-23)
0.36.0 (2025-04-25)
- Uniform CMAKE min VERSION (#714)
- Use target_link_libraries instead of ament_target_dependencies (#707)
- Contributors: Shane Loretz, mosfet80
0.35.1 (2024-11-20)
0.35.0 (2024-10-03)
0.34.2 (2024-07-29)
0.34.1 (2024-06-17)
0.34.0 (2024-04-26)
0.33.2 (2024-03-28)
- A few uncrustify fixes for 0.78. (#667)
- Update maintainer list in package.xml files (#665)
- Contributors: Chris Lalancette, Michael Jeronimo
0.33.1 (2024-02-07)
0.33.0 (2024-01-24)
- Migrate std::bind calls to lambda expressions (#659)
- Contributors: Felipe Gomes de Melo
0.32.1 (2023-12-26)
0.32.0 (2023-11-06)
0.31.1 (2023-09-07)
0.31.0 (2023-08-21)
- Switch to using RCLCPP logging macros in the lifecycle package. (#644)
- Contributors: Chris Lalancette
0.30.1 (2023-07-11)
0.30.0 (2023-06-12)
0.29.0 (2023-06-07)
0.28.1 (2023-05-11)
0.28.0 (2023-04-27)
0.27.0 (2023-04-13)
0.26.0 (2023-04-11)
- update launch file name format to match documentation (#588)
- Contributors: Patrick Wspanialy
0.25.0 (2023-03-01)
0.24.1 (2023-02-24)
0.24.0 (2023-02-14)
- Update the demos to C++17. (#594)
- [rolling] Update maintainers - 2022-11-07 (#589)
- Contributors: Audrow Nash, Chris Lalancette
0.23.0 (2022-11-02)
0.22.0 (2022-09-13)
0.21.0 (2022-04-29)
0.20.1 (2022-04-08)
- Make lifecycle demo automatically exit when done (#558)
- Contributors: Shane Loretz
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_lint_auto | |
| ament_lint_common | |
| ros_testing | |
| lifecycle_msgs | |
| rclcpp | |
| rclcpp_lifecycle | |
| std_msgs |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| lifecycle_py | |
| test_launch_ros | |
| desktop |
Launch files
Messages
Services
Plugins
Recent questions tagged lifecycle at Robotics Stack Exchange
Package Summary
| Tags | No category tags. |
| Version | 0.37.4 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/ros2/demos.git |
| VCS Type | git |
| VCS Version | rolling |
| Last Updated | 2025-11-12 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Tags | No category tags. |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Aditya Pande
- Audrow Nash
Authors
- Karsten Knese
- Mabel Zhang
Introduction
What Is This?
ROS 2 introduces the concept of managed nodes, also called
LifecycleNodes. In the following tutorial, we explain the purpose of
these nodes, what makes them different from regular nodes and how they
comply to a lifecycle management.
Basic Concept and Nomenclature
Managed nodes contain a state machine with a set of predefined states. These states can be changed by invoking a transition, passing a specific transition ID which indicates the succeeding consecutive state. The state machine is implemented as described at the Managed nodes design page.
- The implementation differentiates between
Primary StatesandTransition States. -
-
Primary statesare supposed to be steady states in which any node can perform their respective task. -
Transition statesare used to indicate whether a transition between two primary states is considered successful or not.
-
In the end, any managed node can be in one of the following states:
Primary States (steady states):
- unconfigured
- inactive
- active
- finalized
Transition States (intermediate states):
- configuring
- activating
- deactivating
- cleaningup
- shuttingdown
The possible transitions to invoke are:
- configure
- activate
- deactivate
- cleanup
- shutdown
For a detailed explanation of the applied state machine, we refer again to the Managed nodes design page which provides specific info about each state and transition.
The demo
What's happening
The demo is split into 3 separate applications:
lifecycle_talkerlifecycle_listenerlifecycle_service_client
The lifecycle_talker represents a managed node and publishes according
to which state the node is in. Its primary task (in this example
publishing) is executed in the active state.
Lifecycle transitions invoke callback functions that prepare or tear down the resources required for publishing:
-
on_configure()(in theconfiguringstate): Create and initialize the publisher and timer. -
on_activate()(in theactivatingstate): Activate the publisher and timer so that publishing can occur in theactivestate. -
on_deactivate()(in thedeactivatingstate): Stop the publisher. -
on_cleanup()(in thecleaningUpstate): Release the pointers to publisher and timer. -
on_shutdown()(in theshuttingDownstate): In this case does the same ason_cleanup(), in general it would for example release system resources.
In summary, the node only performs its main functionality (publishing)
while in the active state. The transitions and their corresponding
callbacks ensure that resources are correctly initialized, activated,
deactivated, and cleaned up as the node moves between lifecycle states.
This demo shows a simple talker/listener pair of nodes. However, imagine
a more realistic scenario with attached hardware which may have a rather
long booting phase, i.e. a laser or camera. In that case, one could
initialize the device driver in the configuring transition state,
start and stop the publishing of the device’s data in the activating
and deactivating transition states, and only shut down the device
completely in the cleaningUp or shuttingdown transition states.
The lifecycle_listener is a regular (non-lifecycle) node that
subscribes to the lifecycle_talker's topics. It logs the published
messages as well as the transition events. The talker publishes only in
the active state and thus the listener obviously only receives messages
when the talker is in an active state.
File truncated at 100 lines see the full file
Changelog for package lifecycle
0.37.4 (2025-11-12)
- r-simonelli/demos-lifecycle (#750)
- Contributors: r-simonelli
0.37.3 (2025-09-17)
0.37.2 (2025-07-29)
0.37.1 (2025-06-23)
0.37.0 (2025-04-25)
0.36.0 (2025-04-25)
- Uniform CMAKE min VERSION (#714)
- Use target_link_libraries instead of ament_target_dependencies (#707)
- Contributors: Shane Loretz, mosfet80
0.35.1 (2024-11-20)
0.35.0 (2024-10-03)
0.34.2 (2024-07-29)
0.34.1 (2024-06-17)
0.34.0 (2024-04-26)
0.33.2 (2024-03-28)
- A few uncrustify fixes for 0.78. (#667)
- Update maintainer list in package.xml files (#665)
- Contributors: Chris Lalancette, Michael Jeronimo
0.33.1 (2024-02-07)
0.33.0 (2024-01-24)
- Migrate std::bind calls to lambda expressions (#659)
- Contributors: Felipe Gomes de Melo
0.32.1 (2023-12-26)
0.32.0 (2023-11-06)
0.31.1 (2023-09-07)
0.31.0 (2023-08-21)
- Switch to using RCLCPP logging macros in the lifecycle package. (#644)
- Contributors: Chris Lalancette
0.30.1 (2023-07-11)
0.30.0 (2023-06-12)
0.29.0 (2023-06-07)
0.28.1 (2023-05-11)
0.28.0 (2023-04-27)
0.27.0 (2023-04-13)
0.26.0 (2023-04-11)
- update launch file name format to match documentation (#588)
- Contributors: Patrick Wspanialy
0.25.0 (2023-03-01)
0.24.1 (2023-02-24)
0.24.0 (2023-02-14)
- Update the demos to C++17. (#594)
- [rolling] Update maintainers - 2022-11-07 (#589)
- Contributors: Audrow Nash, Chris Lalancette
0.23.0 (2022-11-02)
0.22.0 (2022-09-13)
0.21.0 (2022-04-29)
0.20.1 (2022-04-08)
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_lint_auto | |
| ament_lint_common | |
| ros_testing | |
| lifecycle_msgs | |
| rclcpp | |
| rclcpp_lifecycle | |
| std_msgs |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| lifecycle_py | |
| test_launch_ros | |
| desktop |
Launch files
Messages
Services
Plugins
Recent questions tagged lifecycle at Robotics Stack Exchange
Package Summary
| Tags | No category tags. |
| Version | 0.0.0 |
| License | TODO: License declaration |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | ROS2 navigaiton tutorials and do quadruped robot |
| Checkout URI | https://github.com/duyongquan/openrobotics.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2024-01-16 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Tags | No category tags. |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- quan
Authors
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_lint_auto | |
| ament_lint_common |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged lifecycle at Robotics Stack Exchange
Package Summary
| Tags | No category tags. |
| Version | 0.14.4 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/ros2/demos.git |
| VCS Type | git |
| VCS Version | galactic |
| Last Updated | 2022-12-07 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Tags | No category tags. |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Mabel Zhang
- Michael Jeronimo
Authors
- Karsten Knese
Introduction
ROS 2 introduces the concept of managed nodes, also called
LifecycleNodes. In the following tutorial, we explain the purpose of
these nodes, what makes them different from regular nodes and how they
comply to a lifecycle management. Managed nodes contain a state machine
with a set of predefined states. These states can be changed by invoking
a transition id which indicates the succeeding consecutive state. The
state machine is implemented as described at the ROS 2 design
page.
Our implementation differentiates between Primary States and
Transition States. Primary States are supposed to be steady states in
which any node can do the respected task. On the other hand, Transition
States are meant as temporary intermediate states attached to a
transition. The result of these intermediate states are used to indicate
whether a transition between two primary states is considered successful
or not. Thus, any managed node can be in one of the following states:
Primary States (steady states):
- unconfigured
- inactive
- active
- shutdown
Transition States (intermediate states):
- configuring
- activating
- deactivating
- cleaningup
- shuttingdown
The possible transitions to invoke are:
- configure
- activate
- deactivate
- cleanup
- shutdown
For a more verbose explanation on the applied state machine, we refer to the design page which provides an in-detail explanation about each state and transition.
The demo
What's happening
The demo is split into 3 separate applications:
- lifecycle_talker
- lifecycle_listener
- lifecycle_service_client
The lifecycle_talker represents a managed node and publishes according
to which state the node is in. We split the tasks of the talker node
into separate pieces and execute them as follows:
- configuring: We initialize our publisher and timer
- activate: We activate the publisher and timer in order to enable a publishing
- deactivate: We stop the publisher and timer
- cleanup: We destroy the publisher and timer
This demo shows a typical talker/listener pair of nodes. However, imagine a real scenario with attached hardware which may have a rather long booting phase, i.e. a laser or camera. One could imagine bringing up the device driver in the configuring state, start and stop only the publishing of the device's data in active/deactive state, and only in the cleanup/shutdown state actually shutdown the device.
The lifecycle_listener is a simple listener which shows the
characteristics of the lifecycle talker. The talker enables message
publishing only in the active state and thus the listener only receives
messages when the talker is in an active state.
The lifecycle_service_client is a script calling different transitions
on the lifecycle_talker. This is meant as the external user
controlling the lifecycle of nodes.
Run the demo
In order to run this demo, we open three terminals and source our ROS 2 environment variables either from the binary distributions or the workspace we compiled from source.
lifecycle_talker lifecycle_listener lifecycle_service_client
———————————————————————————— ———————————————————————————— ————————————————————————————
$ ros2 run lifecycle lifecycle_talker $ ros2 run lifecycle lifecycle_listener $ ros2 run lifecycle lifecycle_service_client

Alternatively, these three programs can be run together in the same terminal using the launch file:
ros2 launch lifecycle lifecycle_demo.launch.py
File truncated at 100 lines see the full file
Changelog for package lifecycle
0.14.4 (2022-12-06)
0.14.3 (2021-05-10)
0.14.2 (2021-04-26)
- Cleanup the README.rst for the lifecycle demo. (#508)
- Contributors: Chris Lalancette
0.14.1 (2021-04-19)
0.14.0 (2021-04-06)
- change ParameterEventHandler to take events as const ref instead of shared pointer (#494)
- Contributors: William Woodall
0.13.0 (2021-03-25)
0.12.1 (2021-03-18)
0.12.0 (2021-01-25)
0.11.0 (2020-12-10)
- Update the package.xml files with the latest Open Robotics maintainers (#466)
- Contributors: Michael Jeronimo
0.10.1 (2020-09-21)
- Add missing required parameter in LifecycleNode launch action (#456)
- Contributors: Ivan Santiago Paunovic
0.10.0 (2020-06-17)
0.9.3 (2020-06-01)
0.9.2 (2020-05-26)
- Fix typo (#445)
- Replace
ros2 msgcommand in lifecycle README (#446) - Contributors: Audrow Nash, Shota Aoki
0.9.1 (2020-05-12)
0.9.0 (2020-04-30)
- Replace deprecated launch_ros usage (#437)
- Update launch_ros action usage (#431)
- code style only: wrap after open parenthesis if not in one line (#429)
- Contributors: Dirk Thomas, Jacob Perron
0.8.4 (2019-11-19)
0.8.3 (2019-11-11)
0.8.2 (2019-11-08)
- Remove unnecessary dependency on ros2run (#413)
- Contributors: Michel Hidalgo
0.8.1 (2019-10-23)
- Replace ready_fn with ReadyToTest action (#404)
- Contributors: Peter Baughman
0.8.0 (2019-09-26)
- Fix lifecycle_service_client namespace (#369)
- Contributors: Cameron Evans
0.7.6 (2019-05-30)
0.7.5 (2019-05-29)
- Update asciinema recordings (#360)
- Use rate instead of thread::sleep to react to Ctrl-C (#348)
- Contributors: Dirk Thomas, Karsten Knese
0.7.4 (2019-05-20)
- Add lifecycle rostest (#336)
- Contributors: Michel Hidalgo
0.7.3 (2019-05-10)
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| lifecycle_msgs | |
| rclcpp_lifecycle | |
| std_msgs | |
| ament_cmake | |
| ament_lint_auto | |
| ament_lint_common | |
| ros_testing |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| test_launch_ros | |
| desktop |
Launch files
Messages
Services
Plugins
Recent questions tagged lifecycle at Robotics Stack Exchange
Package Summary
| Tags | No category tags. |
| Version | 0.27.2 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/ros2/demos.git |
| VCS Type | git |
| VCS Version | iron |
| Last Updated | 2024-07-11 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Tags | No category tags. |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Aditya Pande
- Audrow Nash
- Michael Jeronimo
Authors
- Karsten Knese
- Mabel Zhang
Introduction
ROS 2 introduces the concept of managed nodes, also called
LifecycleNodes. In the following tutorial, we explain the purpose of
these nodes, what makes them different from regular nodes and how they
comply to a lifecycle management. Managed nodes contain a state machine
with a set of predefined states. These states can be changed by invoking
a transition id which indicates the succeeding consecutive state. The
state machine is implemented as described at the ROS 2 design
page.
Our implementation differentiates between Primary States and
Transition States. Primary States are supposed to be steady states in
which any node can do the respected task. On the other hand, Transition
States are meant as temporary intermediate states attached to a
transition. The result of these intermediate states are used to indicate
whether a transition between two primary states is considered successful
or not. Thus, any managed node can be in one of the following states:
Primary States (steady states):
- unconfigured
- inactive
- active
- shutdown
Transition States (intermediate states):
- configuring
- activating
- deactivating
- cleaningup
- shuttingdown
The possible transitions to invoke are:
- configure
- activate
- deactivate
- cleanup
- shutdown
For a more verbose explanation on the applied state machine, we refer to the design page which provides an in-detail explanation about each state and transition.
The demo
What's happening
The demo is split into 3 separate applications:
- lifecycle_talker
- lifecycle_listener
- lifecycle_service_client
The lifecycle_talker represents a managed node and publishes according
to which state the node is in. We split the tasks of the talker node
into separate pieces and execute them as follows:
- configuring: We initialize our publisher and timer
- activate: We activate the publisher and timer in order to enable a publishing
- deactivate: We stop the publisher and timer
- cleanup: We destroy the publisher and timer
This demo shows a typical talker/listener pair of nodes. However, imagine a real scenario with attached hardware which may have a rather long booting phase, i.e. a laser or camera. One could imagine bringing up the device driver in the configuring state, start and stop only the publishing of the device's data in active/deactive state, and only in the cleanup/shutdown state actually shutdown the device.
The lifecycle_listener is a simple listener which shows the
characteristics of the lifecycle talker. The talker enables message
publishing only in the active state and thus the listener only receives
messages when the talker is in an active state.
The lifecycle_service_client is a script calling different transitions
on the lifecycle_talker. This is meant as the external user
controlling the lifecycle of nodes.
Run the demo
In order to run this demo, we open three terminals and source our ROS 2 environment variables either from the binary distributions or the workspace we compiled from source.
lifecycle_talker lifecycle_listener lifecycle_service_client
———————————————————————————— ———————————————————————————— ————————————————————————————
$ ros2 run lifecycle lifecycle_talker $ ros2 run lifecycle lifecycle_listener $ ros2 run lifecycle lifecycle_service_client

Alternatively, these three programs can be run together in the same terminal using the launch file:
ros2 launch lifecycle lifecycle_demo_launch.py
File truncated at 100 lines see the full file
Changelog for package lifecycle
0.27.2 (2024-07-10)
0.27.1 (2023-05-11)
0.27.0 (2023-04-13)
0.26.0 (2023-04-11)
- update launch file name format to match documentation (#588)
- Contributors: Patrick Wspanialy
0.25.0 (2023-03-01)
0.24.1 (2023-02-24)
0.24.0 (2023-02-14)
- Update the demos to C++17. (#594)
- [rolling] Update maintainers - 2022-11-07 (#589)
- Contributors: Audrow Nash, Chris Lalancette
0.23.0 (2022-11-02)
0.22.0 (2022-09-13)
0.21.0 (2022-04-29)
0.20.1 (2022-04-08)
- Make lifecycle demo automatically exit when done (#558)
- Contributors: Shane Loretz
0.20.0 (2022-03-01)
- Use default on_activate()/on_deactivate() implemenetation of Node (#552)
- Contributors: Ivan Santiago Paunovic
0.19.0 (2022-01-14)
0.18.0 (2021-12-17)
- Update maintainers to Audrow Nash and Michael Jeronimo (#543)
- Contributors: Audrow Nash
0.17.0 (2021-10-18)
- Fix use of future in lifecycle demo (#534)
- Fixing deprecated subscriber callback warnings (#532)
- Contributors: Abrar Rahman Protyasha, Christophe Bedard
0.16.0 (2021-08-11)
0.15.0 (2021-05-14)
0.14.2 (2021-04-26)
- Cleanup the README.rst for the lifecycle demo. (#508)
- Contributors: Chris Lalancette
0.14.1 (2021-04-19)
0.14.0 (2021-04-06)
- change ParameterEventHandler to take events as const ref instead of shared pointer (#494)
- Contributors: William Woodall
0.13.0 (2021-03-25)
0.12.1 (2021-03-18)
0.12.0 (2021-01-25)
0.11.0 (2020-12-10)
- Update the package.xml files with the latest Open Robotics maintainers (#466)
- Contributors: Michael Jeronimo
0.10.1 (2020-09-21)
- Add missing required parameter in LifecycleNode launch action (#456)
- Contributors: Ivan Santiago Paunovic
0.10.0 (2020-06-17)
0.9.3 (2020-06-01)
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| lifecycle_msgs | |
| rclcpp_lifecycle | |
| std_msgs | |
| ament_cmake | |
| ament_lint_auto | |
| ament_lint_common | |
| ros_testing |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| lifecycle_py | |
| test_launch_ros | |
| desktop |
Launch files
Messages
Services
Plugins
Recent questions tagged lifecycle at Robotics Stack Exchange
Package Summary
| Tags | No category tags. |
| Version | 0.20.7 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/ros2/demos.git |
| VCS Type | git |
| VCS Version | humble |
| Last Updated | 2025-11-12 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Tags | No category tags. |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Audrow Nash
- Michael Jeronimo
Authors
- Karsten Knese
- Mabel Zhang
Introduction
What Is This?
ROS 2 introduces the concept of managed nodes, also called
LifecycleNodes. In the following tutorial, we explain the purpose of
these nodes, what makes them different from regular nodes and how they
comply to a lifecycle management.
Basic Concept and Nomenclature
Managed nodes contain a state machine with a set of predefined states. These states can be changed by invoking a transition, passing a specific transition ID which indicates the succeeding consecutive state. The state machine is implemented as described at the Managed nodes design page.
- The implementation differentiates between
Primary StatesandTransition States. -
-
Primary statesare supposed to be steady states in which any node can perform their respective task. -
Transition statesare used to indicate whether a transition between two primary states is considered successful or not.
-
In the end, any managed node can be in one of the following states:
Primary States (steady states):
- unconfigured
- inactive
- active
- finalized
Transition States (intermediate states):
- configuring
- activating
- deactivating
- cleaningup
- shuttingdown
The possible transitions to invoke are:
- configure
- activate
- deactivate
- cleanup
- shutdown
For a detailed explanation of the applied state machine, we refer again to the Managed nodes design page which provides specific info about each state and transition.
The demo
What's happening
The demo is split into 3 separate applications:
lifecycle_talkerlifecycle_listenerlifecycle_service_client
The lifecycle_talker represents a managed node and publishes according
to which state the node is in. Its primary task (in this example
publishing) is executed in the active state.
Lifecycle transitions invoke callback functions that prepare or tear down the resources required for publishing:
-
on_configure()(in theconfiguringstate): Create and initialize the publisher and timer. -
on_activate()(in theactivatingstate): Activate the publisher and timer so that publishing can occur in theactivestate. -
on_deactivate()(in thedeactivatingstate): Stop the publisher. -
on_cleanup()(in thecleaningUpstate): Release the pointers to publisher and timer. -
on_shutdown()(in theshuttingDownstate): In this case does the same ason_cleanup(), in general it would for example release system resources.
In summary, the node only performs its main functionality (publishing)
while in the active state. The transitions and their corresponding
callbacks ensure that resources are correctly initialized, activated,
deactivated, and cleaned up as the node moves between lifecycle states.
This demo shows a simple talker/listener pair of nodes. However, imagine
a more realistic scenario with attached hardware which may have a rather
long booting phase, i.e. a laser or camera. In that case, one could
initialize the device driver in the configuring transition state,
start and stop the publishing of the device’s data in the activating
and deactivating transition states, and only shut down the device
completely in the cleaningUp or shuttingdown transition states.
The lifecycle_listener is a regular (non-lifecycle) node that
subscribes to the lifecycle_talker's topics. It logs the published
messages as well as the transition events. The talker publishes only in
the active state and thus the listener obviously only receives messages
when the talker is in an active state.
File truncated at 100 lines see the full file
Changelog for package lifecycle
0.20.7 (2025-11-12)
0.20.6 (2025-09-17)
0.20.5 (2024-07-26)
0.20.4 (2024-05-15)
0.20.3 (2023-01-10)
0.20.2 (2022-05-10)
0.20.1 (2022-04-08)
- Make lifecycle demo automatically exit when done (#558)
- Contributors: Shane Loretz
0.20.0 (2022-03-01)
- Use default on_activate()/on_deactivate() implemenetation of Node (#552)
- Contributors: Ivan Santiago Paunovic
0.19.0 (2022-01-14)
0.18.0 (2021-12-17)
- Update maintainers to Audrow Nash and Michael Jeronimo (#543)
- Contributors: Audrow Nash
0.17.0 (2021-10-18)
- Fix use of future in lifecycle demo (#534)
- Fixing deprecated subscriber callback warnings (#532)
- Contributors: Abrar Rahman Protyasha, Christophe Bedard
0.16.0 (2021-08-11)
0.15.0 (2021-05-14)
0.14.2 (2021-04-26)
- Cleanup the README.rst for the lifecycle demo. (#508)
- Contributors: Chris Lalancette
0.14.1 (2021-04-19)
0.14.0 (2021-04-06)
- change ParameterEventHandler to take events as const ref instead of shared pointer (#494)
- Contributors: William Woodall
0.13.0 (2021-03-25)
0.12.1 (2021-03-18)
0.12.0 (2021-01-25)
0.11.0 (2020-12-10)
- Update the package.xml files with the latest Open Robotics maintainers (#466)
- Contributors: Michael Jeronimo
0.10.1 (2020-09-21)
- Add missing required parameter in LifecycleNode launch action (#456)
- Contributors: Ivan Santiago Paunovic
0.10.0 (2020-06-17)
0.9.3 (2020-06-01)
0.9.2 (2020-05-26)
- Fix typo (#445)
- Replace
ros2 msgcommand in lifecycle README (#446) - Contributors: Audrow Nash, Shota Aoki
0.9.1 (2020-05-12)
0.9.0 (2020-04-30)
- Replace deprecated launch_ros usage (#437)
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| lifecycle_msgs | |
| rclcpp_lifecycle | |
| std_msgs | |
| ament_cmake | |
| ament_lint_auto | |
| ament_lint_common | |
| ros_testing |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| lifecycle_py | |
| test_launch_ros | |
| desktop |
Launch files
Messages
Services
Plugins
Recent questions tagged lifecycle at Robotics Stack Exchange
Package Summary
| Tags | No category tags. |
| Version | 0.20.7 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/ros2/demos.git |
| VCS Type | git |
| VCS Version | humble |
| Last Updated | 2025-11-12 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Tags | No category tags. |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Audrow Nash
- Michael Jeronimo
Authors
- Karsten Knese
- Mabel Zhang
Introduction
What Is This?
ROS 2 introduces the concept of managed nodes, also called
LifecycleNodes. In the following tutorial, we explain the purpose of
these nodes, what makes them different from regular nodes and how they
comply to a lifecycle management.
Basic Concept and Nomenclature
Managed nodes contain a state machine with a set of predefined states. These states can be changed by invoking a transition, passing a specific transition ID which indicates the succeeding consecutive state. The state machine is implemented as described at the Managed nodes design page.
- The implementation differentiates between
Primary StatesandTransition States. -
-
Primary statesare supposed to be steady states in which any node can perform their respective task. -
Transition statesare used to indicate whether a transition between two primary states is considered successful or not.
-
In the end, any managed node can be in one of the following states:
Primary States (steady states):
- unconfigured
- inactive
- active
- finalized
Transition States (intermediate states):
- configuring
- activating
- deactivating
- cleaningup
- shuttingdown
The possible transitions to invoke are:
- configure
- activate
- deactivate
- cleanup
- shutdown
For a detailed explanation of the applied state machine, we refer again to the Managed nodes design page which provides specific info about each state and transition.
The demo
What's happening
The demo is split into 3 separate applications:
lifecycle_talkerlifecycle_listenerlifecycle_service_client
The lifecycle_talker represents a managed node and publishes according
to which state the node is in. Its primary task (in this example
publishing) is executed in the active state.
Lifecycle transitions invoke callback functions that prepare or tear down the resources required for publishing:
-
on_configure()(in theconfiguringstate): Create and initialize the publisher and timer. -
on_activate()(in theactivatingstate): Activate the publisher and timer so that publishing can occur in theactivestate. -
on_deactivate()(in thedeactivatingstate): Stop the publisher. -
on_cleanup()(in thecleaningUpstate): Release the pointers to publisher and timer. -
on_shutdown()(in theshuttingDownstate): In this case does the same ason_cleanup(), in general it would for example release system resources.
In summary, the node only performs its main functionality (publishing)
while in the active state. The transitions and their corresponding
callbacks ensure that resources are correctly initialized, activated,
deactivated, and cleaned up as the node moves between lifecycle states.
This demo shows a simple talker/listener pair of nodes. However, imagine
a more realistic scenario with attached hardware which may have a rather
long booting phase, i.e. a laser or camera. In that case, one could
initialize the device driver in the configuring transition state,
start and stop the publishing of the device’s data in the activating
and deactivating transition states, and only shut down the device
completely in the cleaningUp or shuttingdown transition states.
The lifecycle_listener is a regular (non-lifecycle) node that
subscribes to the lifecycle_talker's topics. It logs the published
messages as well as the transition events. The talker publishes only in
the active state and thus the listener obviously only receives messages
when the talker is in an active state.
File truncated at 100 lines see the full file
Changelog for package lifecycle
0.20.7 (2025-11-12)
0.20.6 (2025-09-17)
0.20.5 (2024-07-26)
0.20.4 (2024-05-15)
0.20.3 (2023-01-10)
0.20.2 (2022-05-10)
0.20.1 (2022-04-08)
- Make lifecycle demo automatically exit when done (#558)
- Contributors: Shane Loretz
0.20.0 (2022-03-01)
- Use default on_activate()/on_deactivate() implemenetation of Node (#552)
- Contributors: Ivan Santiago Paunovic
0.19.0 (2022-01-14)
0.18.0 (2021-12-17)
- Update maintainers to Audrow Nash and Michael Jeronimo (#543)
- Contributors: Audrow Nash
0.17.0 (2021-10-18)
- Fix use of future in lifecycle demo (#534)
- Fixing deprecated subscriber callback warnings (#532)
- Contributors: Abrar Rahman Protyasha, Christophe Bedard
0.16.0 (2021-08-11)
0.15.0 (2021-05-14)
0.14.2 (2021-04-26)
- Cleanup the README.rst for the lifecycle demo. (#508)
- Contributors: Chris Lalancette
0.14.1 (2021-04-19)
0.14.0 (2021-04-06)
- change ParameterEventHandler to take events as const ref instead of shared pointer (#494)
- Contributors: William Woodall
0.13.0 (2021-03-25)
0.12.1 (2021-03-18)
0.12.0 (2021-01-25)
0.11.0 (2020-12-10)
- Update the package.xml files with the latest Open Robotics maintainers (#466)
- Contributors: Michael Jeronimo
0.10.1 (2020-09-21)
- Add missing required parameter in LifecycleNode launch action (#456)
- Contributors: Ivan Santiago Paunovic
0.10.0 (2020-06-17)
0.9.3 (2020-06-01)
0.9.2 (2020-05-26)
- Fix typo (#445)
- Replace
ros2 msgcommand in lifecycle README (#446) - Contributors: Audrow Nash, Shota Aoki
0.9.1 (2020-05-12)
0.9.0 (2020-04-30)
- Replace deprecated launch_ros usage (#437)
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| lifecycle_msgs | |
| rclcpp_lifecycle | |
| std_msgs | |
| ament_cmake | |
| ament_lint_auto | |
| ament_lint_common | |
| ros_testing |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| lifecycle_py | |
| test_launch_ros | |
| desktop |