Yu Ge Robotics
博客
2026-06-082 分钟阅读

为现场机器人设计 ROS2 生命周期节点

让机器人启动、恢复和关闭流程更可观察、更可复现的工程模式。

ROS2C++架构

生命周期节点让机器人系统更容易推理,因为每个节点都会暴露自己的状态。在生产系统中,我会把它用于传感器、规划器、控制器,以及所有依赖硬件或网络的组件。

先设计状态,再写逻辑

构造函数里应尽量少做事。耗时初始化放在 on_configure,运行态资源放在 on_activate,清理逻辑放在 on_cleanup

#include <rclcpp_lifecycle/lifecycle_node.hpp>

class MotorBridge : public rclcpp_lifecycle::LifecycleNode {
public:
  MotorBridge() : LifecycleNode("motor_bridge") {}

  CallbackReturn on_configure(const rclcpp_lifecycle::State &) override {
    port_ = declare_parameter<std::string>("port", "/dev/ttyUSB0");
    driver_.connect(port_);
    return CallbackReturn::SUCCESS;
  }

  CallbackReturn on_activate(const rclcpp_lifecycle::State &) override {
    command_sub_ = create_subscription<Twist>("cmd_vel", 10, onCommand);
    return CallbackReturn::SUCCESS;
  }
};

用参数固定启动行为

生命周期节点的参数应该显式化,并随机器人配置一起版本管理。

motor_bridge:
  ros__parameters:
    port: /dev/ttyUSB0
    watchdog_ms: 250
    frame_id: base_link

这样运维人员拥有可预测的控制界面,开发者也更容易测试故障模式。