文章目录
生命周期节点介绍
ROS 2 生命周期节点(Lifecycle Node)通过显式状态机管理节点的启停过程,确保资源按正确顺序初始化/释放,避免"半启动"导致系统异常。
其中生命周期节点的状态流转如下:

而当流转到某个状态时,会触发对应的状态变更回调。但生命周期节点不能自己转换状态,需要由外部触发
节点示例
c
#include "rclcpp_lifecycle/lifecycle_node.hpp"
using CallbackReturn = rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn;
class MyLifecycleNode : public rclcpp_lifecycle::LifecycleNode {
public:
MyLifecycleNode() : LifecycleNode("my_lifecycle_node") {}
CallbackReturn on_configure(const rclcpp_lifecycle::State & state) override {
RCLCPP_INFO(get_logger(), "Configuring...");
// 分配资源:创建订阅者、发布者(但不激活)
pub_ = create_publisher<std_msgs::msg::String>("topic", 10);
sub_ = create_subscription<std_msgs::msg::String>(
"topic", 10, [this](auto msg){});
return CallbackReturn::SUCCESS;
}
CallbackReturn on_activate(const rclcpp_lifecycle::State & state) override {
RCLCPP_INFO(get_logger(), "Activating...");
// 激活发布者(开始实际发送数据)
pub_->on_activate();
return CallbackReturn::SUCCESS;
}
CallbackReturn on_deactivate(const rclcpp_lifecycle::State & state) override {
RCLCPP_INFO(get_logger(), "Deactivating...");
pub_->on_deactivate(); // 停止发送
return CallbackReturn::SUCCESS;
}
CallbackReturn on_cleanup(const rclcpp_lifecycle::State & state) override {
RCLCPP_INFO(get_logger(), "Cleaning up...");
pub_.reset();
sub_.reset();
return CallbackReturn::SUCCESS;
}
CallbackReturn on_shutdown(const rclcpp_lifecycle::State & state) override {
RCLCPP_INFO(get_logger(), "Shutting down from %s...", state.label().c_str());
return CallbackReturn::SUCCESS;
}
private:
rclcpp_lifecycle::LifecyclePublisher<std_msgs::msg::String>::SharedPtr pub_;
rclcpp::Subscription<std_msgs::msg::String>::SharedPtr sub_;
};
常用命令
c
# 查看生命周期节点列表
ros2 lifecycle nodes
# 查看当前状态
ros2 lifecycle get /my_lifecycle_node
# 查看节点状态变换记录
ros2 lifecycle list /my_lifecycle_node