ROS2进阶—ROS2生命周期节点

文章目录

生命周期节点介绍

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
相关推荐
CoreTK_EMC2 小时前
机器人 EMC 深度解析:产业放量下的技术痛点与落地路径
机器人·芯通康·机器人emc·人形机器人电磁兼容·伺服关节 emc 防护·机器人灵巧手 emc·emc 整改
不会就选b2 小时前
Linux之文件--fd,重定向
linux
三十岁老牛再出发2 小时前
07.26每日总结
linux·c语言·mysql
fengyehongWorld3 小时前
Linux update-alternatives命令
linux
雨的旋律20993 小时前
ubuntu2604
linux·运维·服务器
一颗小树x3 小时前
机器人世界模型:2026 技术全景与工程选型指南
机器人·指南·操作·vla·世界模型
三言老师3 小时前
mkdir创建多级目录,目录创建基础实操
linux·运维·服务器
Discipline~Hai4 小时前
ARM03-蜂鸣器和中断
c语言·arm开发·单片机·嵌入式硬件·嵌入式
imc.114 小时前
linux EXT文件系统
linux·运维·服务器
三言老师5 小时前
mv移动文件、重命名文件实战案例
linux·服务器·网络·centos