当前位置: 首页 > news >正文

ROS 2 的发布/订阅通信验证

ROS 2 自带了一个经典的demo_nodes_cpp包,包含talker(发布者)和listener(订阅者)节点。我们可以通过官方提供的方法去验证。

下面命令 验证了 ROS 2 的核心通信机制:

写在前面的定义:

  • talker= 发布者(Publisher)

  • listener= 订阅者(Subscriber)

  • /chatter= 话题(Topic)

  • ros2 topic echo= 窥探话题上流动的数据

  • demo_nodes_cpp:这个包主要用于学习和验证。核心作用是为开发者提供大量可直接运行的 C++ 代码示例,用于演示 ROS 2 中各种核心通信机制和高级特性的用法。它源自 ROS 2 的examples仓库,被独立出来作为演示用途。因此,在开发实际项目时,应将其代码作为参考,

完整命令速查表

命令作用
ros2 run demo_nodes_cpp talker启动发布者节点
ros2 run demo_nodes_cpp listener启动订阅者节点
ros2 topic list列出所有活跃话题
ros2 topic info /chatter查看话题的发布/订阅统计
ros2 topic type /chatter查看话题的消息类型
ros2 topic echo /chatter实时打印话题上的消息内容
ros2 topic pub /chatter std_msgs/msg/String "{data: 'test'}"手动向话题发布一条消息(无需 talker)

动手环节:

下面是完整的操作步骤:


📡 第一步:启动 Talker(发布者)

打开终端1,运行:

source /opt/ros/humble/setup.bash ros2 run demo_nodes_cpp talker

你会看到类似这样的输出(每 0.5 秒更新一次):

[INFO] [1700000000.123456789] [talker]: Publishing: 'Hello World: 1' [INFO] [1700000000.623456789] [talker]: Publishing: 'Hello World: 2' [INFO] [1700000001.123456789] [talker]: Publishing: 'Hello World: 3'

这个节点在话题/chatter上持续发布std_msgs/msg/String类型的消息。


👂 第二步:启动 Listener(订阅者)

保持 talker 运行,打开终端2,运行:

source /opt/ros/humble/setup.bash ros2 run demo_nodes_cpp listener

你会看到:

[INFO] [1700000000.223456789] [listener]: I heard: 'Hello World: 1' [INFO] [1700000000.723456789] [listener]: I heard: 'Hello World: 2' [INFO] [1700000001.223456789] [listener]: I heard: 'Hello World: 3'

talker 发布的消息被 listener 成功接收。


📋 第三步:查看所有活跃话题

打开终端3(保持 talker 和 listener 运行),执行:

source /opt/ros/humble/setup.bash ros2 topic list

输出:

/chatter /parameter_events /rosout

/chatter就是 talker 和 listener 通信使用的话题。


🔍 第四步:查看话题详细信息

# 查看话题的发布者、订阅者数量 ros2 topic info /chatter

输出示例:

Type: std_msgs/msg/String Publisher count: 1 Subscription count: 1
# 查看话题的消息类型结构 ros2 topic type /chatter

输出:std_msgs/msg/String

# 查看话题的实时消息内容(非常重要!) ros2 topic echo /chatter

你会看到 topic 上正在传输的原始数据:

text

data: 'Hello World: 42' --- data: 'Hello World: 43' ---

ros2 topic echo会持续输出,按Ctrl + C停止。

🛑 第五步:停止所有节点

在 talker 和 listener 的终端中分别按Ctrl + C即可停止。

🧪 额外:手动发布消息(无需启动 talker)

你可以直接手动向/chatter发布消息,测试 listener 是否正常工作:

# 发布一条消息 ros2 topic pub --once /chatter std_msgs/msg/String "{data: 'Hello manually'}"

如果 listener 正在运行,会立即显示I heard: 'Hello manually'

http://www.gsyq.cn/news/1628883.html

相关文章:

  • 2026年AI原生安全公司竞争力分析:谁在领先?
  • Dsniff实战指南:Kali与Termux双平台网络嗅探与中间人攻击防御
  • 超声脑机接口潜力大,思昇科技获数千万元种子轮融资剑指千亿市场
  • API安全实战:从400错误到纵深防御体系构建
  • 电机铁芯冲压油残留的实验室检测方法
  • 长行程高速工况下同步带模组的选型优势与场景适配性指南
  • 一线观察:市面上热门厨房空调生产商的长期真实表现
  • 第115页的gtk+编程例子——进度条改写网上的例子用gtk4编译
  • 特斯拉Cybercab无方向盘路测曝光!20个月落地,成本优势能否弯道超车?
  • 告别手动刷课:智慧职教学习伴侣的30分钟高效学习法
  • 领域驱动设计实战--战略建模
  • 阿里70亿-90亿出售灵犀互娱,All in AI下游戏业务缘何成弃子?
  • SSL证书验证失败全解析:从原理到实战解决方案
  • 飞牛NAS安全实战:高危漏洞分析与应急响应指南
  • [特殊字符]《京东开放平台JOS接入全指南:注册、AppKey、OAuth2.0授权与沙箱调试(2026最新)》(附Python源码)
  • Java SpringBoot+Vue3+MyBatis 物业管理系统系统源码|前后端分离+MySQL数据库
  • Qwen2-7B本地轻量部署:喂饭级一键推理工作流
  • Markdown 语法完全指南:一篇学完全部语法
  • 靠谱的汽车保养排名
  • 心电自监督分类论文分享(1)-read your heart
  • 盘锦门窗窗纱一体防风要看哪里
  • 模型端侧适配技能之ONNX 模型拆分
  • Python+Django构建轻量级企业员工管理系统实战
  • EM3080-W条形码解码器与STM32F303RC的硬件协同设计
  • AI时代,为什么视频号作品数据和评论数据越来越重要?
  • USB3.0总线高速数据采集卡,8通道、16位分辨率、5MHz同步采样,程控增益±10V、±5V、±2V、±1V
  • 项目进度实时监控与资源优化:项目制服务解决方案落地方法论
  • 想提升企业资源管理效能?ERP系统优化是关键!
  • Qwen3vl+Midscene+Playwright自动化AI测试框架搭建流程(win11本地安装)
  • 2026淮北黄金回收白银回收铂金回收旧料回收怎么选?五家高实价铂金白银线下门店测评清单 + 联系方式