diff --git a/rclcpp_lifecycle/include/rclcpp_lifecycle/lifecycle_node.hpp b/rclcpp_lifecycle/include/rclcpp_lifecycle/lifecycle_node.hpp index 6b6c213fd5..0dfff0ad3e 100644 --- a/rclcpp_lifecycle/include/rclcpp_lifecycle/lifecycle_node.hpp +++ b/rclcpp_lifecycle/include/rclcpp_lifecycle/lifecycle_node.hpp @@ -613,6 +613,14 @@ class LifecycleNode : public node_interfaces::LifecycleNodeInterface, const State & deactivate(LifecycleNodeInterface::CallbackReturn & cb_return_code); + RCLCPP_LIFECYCLE_PUBLIC + const State & + raise_error(); + + RCLCPP_LIFECYCLE_PUBLIC + const State & + raise_error(LifecycleNodeInterface::CallbackReturn & cb_return_code); + RCLCPP_LIFECYCLE_PUBLIC const State & shutdown(); diff --git a/rclcpp_lifecycle/src/lifecycle_node.cpp b/rclcpp_lifecycle/src/lifecycle_node.cpp index 973ec04270..906f08d254 100644 --- a/rclcpp_lifecycle/src/lifecycle_node.cpp +++ b/rclcpp_lifecycle/src/lifecycle_node.cpp @@ -555,6 +555,28 @@ LifecycleNode::deactivate(LifecycleNodeInterface::CallbackReturn & cb_return_cod lifecycle_msgs::msg::Transition::TRANSITION_DEACTIVATE, cb_return_code); } +const State & +LifecycleNode::raise_error() +{ + if(get_current_state().id() == lifecycle_msgs::msg::State::PRIMARY_STATE_ACTIVE) + return impl_->trigger_transition( + lifecycle_msgs::msg::Transition::TRANSITION_ACTIVE_ERROR); + else + return impl_->trigger_transition( + lifecycle_msgs::msg::Transition::TRANSITION_INACTIVE_ERROR); +} + +const State & +LifecycleNode::raise_error(LifecycleNodeInterface::CallbackReturn & cb_return_code) +{ + if(get_current_state().id() == lifecycle_msgs::msg::State::PRIMARY_STATE_ACTIVE) + return impl_->trigger_transition( + lifecycle_msgs::msg::Transition::TRANSITION_ACTIVE_ERROR, cb_return_code); + else + return impl_->trigger_transition( + lifecycle_msgs::msg::Transition::TRANSITION_INACTIVE_ERROR, cb_return_code); +} + const State & LifecycleNode::shutdown() {