1. ROS2通信机制全景观察
在机器人操作系统ROS2的架构设计中,通信机制是连接各功能模块的神经系统。作为长期从事机器人系统开发的工程师,我经常需要根据场景特点在Action、Topic、Service等通信模式中做出选择。今天我们就来深入剖析Action Server与发布/订阅模式的核心差异。
先看一个典型工业分拣机器人的案例:当视觉系统通过摄像头识别到传送带上的物品时,需要通知机械臂执行抓取动作。这个过程可能持续数秒,期间需要持续反馈抓取进度,最终返回执行结果。这种场景下,单纯的发布/订阅模式就难以满足需求,而Action机制的优势就凸显出来了。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 发布/订阅模式深度解析
2.1 基础通信模型
发布/订阅(Publish/Subscribe)是ROS2中最基础的异步通信模式,其工作方式类似于报纸的发行:
- 发布者(Publisher)像报社,定期或不定期发布消息
- 订阅者(Subscriber)像读者,自主选择接收感兴趣的内容
- 话题(Topic)如同报纸专栏,作为消息的分类标识
cpp复制// 典型发布者实现
auto publisher = node->create_publisher<std_msgs::msg::String>("chatter", 10);
auto message = std_msgs::msg::String();
message.data = "Hello ROS2";
publisher->publish(message);
// 典型订阅者实现
auto callback = [](const std_msgs::msg::String::SharedPtr msg) {
RCLCPP_INFO(node->get_logger(), "I heard: '%s'", msg->data.c_str());
};
auto subscriber = node->create_subscription<std_msgs::msg::String>("chatter", 10, callback);
2.2 核心特征分析
- 单向数据流:信息只能从发布者流向订阅者,没有反向通道
- 松耦合:双方无需知道彼此存在,只需约定Topic
