A managed (lifecycle) node implementing the ROS 2 Managed Node design.
A Rclex.LifecycleNode wraps a regular Rclex node and adds the four
primary states (:unconfigured, :inactive, :active, :finalized)
with the corresponding transitions. The five standard lifecycle services
are exposed under the node's namespace:
~/change_state(lifecycle_msgs/srv/ChangeState)~/get_state(lifecycle_msgs/srv/GetState)~/get_available_states(lifecycle_msgs/srv/GetAvailableStates)~/get_available_transitions(lifecycle_msgs/srv/GetAvailableTransitions)~/get_transition_graph(lifecycle_msgs/srv/GetAvailableTransitions)
Usage
defmodule MyNode do
use Rclex.LifecycleNode
@impl true
def on_configure(_state) do
# acquire resources...
{:ok, %{}}
end
@impl true
def on_activate(_state) do
# start publishing, etc.
{:ok, %{}}
end
end
Rclex.start_lifecycle_node(MyNode, "managed_node", namespace: "/example")
Rclex.lifecycle_change_state("managed_node", :configure, namespace: "/example")
Rclex.lifecycle_change_state("managed_node", :activate, namespace: "/example")Callbacks
All callbacks are optional and default to {:ok, user_state}. Each
receives the current user_state/0 and may return:
{:ok, new_user_state}— transition succeeds{:error, new_user_state}— transition fails (rolls back to the previous primary state){:fatal, new_user_state}— transition errors; goes to:finalized
Available callbacks:
on_configure/1on_cleanup/1on_activate/1on_deactivate/1on_shutdown/1on_error/1
Summary
Functions
Trigger a transition. Returns :ok if the transition succeeded,
{:error, reason} otherwise.
Returns a specification to start this module under a supervisor.
Return the current primary state.
Return the current user state (whatever the user callbacks return).
Types
@type callback_result() :: {:ok, user_state()} | {:error, user_state()} | {:fatal, user_state()}
@type primary_state() :: :unconfigured | :inactive | :active | :finalized
@type transition() :: :configure | :cleanup | :activate | :deactivate | :shutdown
@type user_state() :: any()
Callbacks
@callback on_activate(user_state()) :: callback_result()
@callback on_cleanup(user_state()) :: callback_result()
@callback on_configure(user_state()) :: callback_result()
@callback on_deactivate(user_state()) :: callback_result()
@callback on_error(user_state()) :: callback_result()
@callback on_shutdown(user_state()) :: callback_result()
Functions
@spec change_state(String.t(), transition(), keyword()) :: :ok | {:error, :invalid_transition | :callback_failed | :callback_errored}
Trigger a transition. Returns :ok if the transition succeeded,
{:error, reason} otherwise.
Returns a specification to start this module under a supervisor.
See Supervisor.
@spec get_state( String.t(), keyword() ) :: primary_state()
Return the current primary state.
@spec get_user_state( String.t(), keyword() ) :: user_state()
Return the current user state (whatever the user callbacks return).