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
这样运维人员拥有可预测的控制界面,开发者也更容易测试故障模式。