新闻详情

新闻详情

首页 / 资讯中心 / 详情

ROS话题通信实战:发布者-订阅者流程拆解与TaoToken配置验证

发布时间:2026/9/29 13:03:49来源:尧图网络
ROS话题通信实战:发布者-订阅者流程拆解与TaoToken配置验证
1. ROS 话题通信到底在解决什么问题ROS 话题通信是机器人系统里最常用的一种数据流转方式发布者节点把消息丢到某个话题上订阅者节点从话题上取消息两边不需要知道对方的存在。你可以把它理解成电台广播发布者是电台订阅者是收音机话题就是频道号。电台只管播收音机只管收谁也不用等谁。这种松耦合设计让机器人里的传感器驱动、算法处理、执行控制可以拆成独立节点各自编译、各自启动出问题也好定位。适合读这篇的人有两类一类是刚装好 ROS、想跑通第一个发布者-订阅者最小示例的初学者另一类是有一定 ROS 基础但想把节点通信和外部 API 通道串起来做端到端验证的机器人开发者。整篇会从工作空间、功能包、节点代码、CMakeLists 编译规则一路写到运行验证最后补一段 TaoToken 统一 Key/API 通道的 config.toml 配置骨架让节点在需要调用外部模型服务时有一个稳定的接入点。我试过把发布者和订阅者拆到两个包里跑也试过放在同一个包两种方式都能通区别只在编译规则和启动顺序。下面按“先跑通、再扩展”的顺序来每一步都给可复制的代码和命令。2. 前置准备工作空间、功能包与 TaoToken 通道ROS 程序不能只装单个节点必须以包为单位安装包是节点的容器。所以流程是先建工作空间再建功能包然后在包里写节点。工作空间本质就是一个带 src 子目录的文件夹编译产物会落在 devel 和 build 里。创建工作空间和功能包的命令如下工作空间名我用learn_ws包名用pub_sub_demo依赖roscpp rospy std_msgsmkdir -p ~/learn_ws/src cd ~/learn_ws/src catkin_create_pkg pub_sub_demo roscpp rospy std_msgs执行完你会看到pub_sub_demo里有include、src、CMakeLists.txt、package.xml四项。后续所有 C 节点都写在第二级src目录下。TaoToken 在这里的角色是统一 Key/API 通道。当你的 ROS 节点需要调用外部模型服务比如做语音指令解析、视觉描述生成时不要在节点里硬编码多个厂商的地址和密钥而是走一个统一的 API 入口。官网地址是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 入口是 https://taotoken.net/api 。先到控制台创建 Key再在项目里放一个 config.toml 骨架节点启动时读取即可。config.toml 骨架可以这样写放在功能包根目录或工作空间的 config 文件夹下# config.toml —— TaoToken 统一通道配置骨架 [taotoken] api_base https://taotoken.net/api api_key sk-你的Key timeout_ms 8000 [ros_bridge] publish_topic /taotoken/response subscribe_topic /taotoken/request queue_size 10这里api_base固定指向 API 入口api_key从控制台获取publish_topic和subscribe_topic是节点和 ROS 话题对接的桥接话题名。这样设计的好处是换模型、换 Key 只改配置文件节点代码不动。3. 可复制配置发布者与订阅者节点代码3.1 发布者节点 node_pub.cpp在pub_sub_demo/src下新建node_pub.cpp内容如下。核心是ros::init初始化、NodeHandle实例化句柄、advertise注册话题、循环publish发消息#include ros/ros.h #include std_msgs/String.h int main(int argc, char *argv[]) { setlocale(LC_ALL, ); // 支持中文输出 ros::init(argc, argv, node_pub); // 节点名 ros::NodeHandle nh; // 话题名 /chatter缓存 10 条 ros::Publisher pub nh.advertisestd_msgs::String(/chatter, 10); ros::Rate loop_rate(10); // 10Hz 发送频率 int count 0; while (ros::ok()) { std_msgs::String msg; msg.data hello ros std::to_string(count); pub.publish(msg); ROS_INFO(pub send: %s, msg.data.c_str()); loop_rate.sleep(); } return 0; }3.2 订阅者节点 node_sub.cpp同目录新建node_sub.cpp。订阅者用subscribe注册话题和回调函数ros::spinOnce()让回调有机会执行#include ros/ros.h #include std_msgs/String.h void chatterCallback(const std_msgs::String::ConstPtr msg) { ROS_INFO(sub recv: %s, msg-data.c_str()); } int main(int argc, char *argv[]) { setlocale(LC_ALL, ); ros::init(argc, argv, node_sub); ros::NodeHandle nh; ros::Subscriber sub nh.subscribe(/chatter, 10, chatterCallback); ros::Rate rate(10); while (ros::ok()) { ros::spinOnce(); // 处理到达的回调 rate.sleep(); } return 0; }3.3 CMakeLists.txt 编译规则打开pub_sub_demo/CMakeLists.txt在 build 章节末尾追加两条可执行文件声明和链接库。注意add_executable第一个参数是可执行文件名第二个是源码路径add_executable(node_pub src/node_pub.cpp) target_link_libraries(node_pub ${catkin_LIBRARIES}) add_executable(node_sub src/node_sub.cpp) target_link_libraries(node_sub ${catkin_LIBRARIES})3.4 package.xml 依赖确认catkin_create_pkg已经帮你写好了基础依赖确认这几行存在即可build_dependroscpp/build_depend build_dependrospy/build_depend build_dependstd_msgs/build_depend exec_dependroscpp/exec_depend exec_dependrospy/exec_depend exec_dependstd_msgs/exec_depend4. 验证请求与成功结果编译和运行分四个终端建议用 terminator 分屏省得来回切窗口。先编译cd ~/learn_ws catkin_make source devel/setup.bash第一个终端启动 roscoreroscore第二个终端启动发布者source ~/learn_ws/devel/setup.bash rosrun pub_sub_demo node_pub第三个终端启动订阅者source ~/learn_ws/devel/setup.bash rosrun pub_sub_demo node_sub第四个终端做话题检查rostopic list # 应看到 /chatter rostopic echo /chatter # 实时打印消息内容 rostopic hz /chatter # 统计发送频率约 10Hz成功时你会看到订阅者终端持续打印sub recv: hello ros 0/1/2...rostopic hz输出接近 10。如果发布者发了但订阅者没收到先确认两边话题名完全一致/chatter和chatter在 ROS 里会被解析成不同话题。TaoToken 通道的验证动作在节点里读取 config.toml 后向api_base发一个最小请求确认返回结构正常。可以用 curl 先单独验证 Key 是否可用curl -X POST https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer sk-你的Key \ -H Content-Type: application/json \ -d {model:gpt-4o-mini,messages:[{role:user,content:ping}]}返回带choices字段就说明通道通了再把这段逻辑封装进 ROS 节点的回调里把结果 publish 到/taotoken/response话题订阅者就能收到模型返回。5. 本篇常见错误排查找不到包或节点rosrun pub_sub_demo node_pub报[rospack] Error: package not found九成是没 source。每次新开终端都要source ~/learn_ws/devel/setup.bash嫌麻烦就写进~/.bashrc末尾。编译报 undefined referencetarget_link_libraries漏了${catkin_LIBRARIES}或者add_executable的源码路径写错。检查路径是相对功能包根目录的src/xxx.cpp。订阅者收不到消息先rostopic list看话题在不在再rostopic info /chatter看发布者和订阅者是否都挂上了。话题名不一致、节点没启动、回调没被spinOnce触发是三个高频原因。中文乱码在ros::init之前加setlocale(LC_ALL, )英文版 Ubuntu 可写setlocale(LC_ALL, zh_CN.UTF-8)。rostopic echo 没输出发布者可能没真正 publish或者loop_rate.sleep()位置不对导致循环卡死。用ROS_INFO在 publish 前后打日志确认。TaoToken 请求超时检查 config.toml 里api_base是否写成https://taotoken.net/apiKey 是否带Bearer前缀网络出口是否允许 HTTPS。超时时间可以适当调大到 15000ms。6. 接入与后续动作跑通发布者-订阅者只是第一步真正做机器人项目时节点往往还要和外部服务通信。这时候统一 Key/API 通道就派上用场所有模型调用走同一个入口配置集中管理换环境只改 config.toml。需要创建和管理 Key 的话到控制台的 API Keys 页面操作https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite 。接入细节和参数说明看文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite 。想先在网页里验证模型返回是否符合预期用模型对话页面https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite 。如果你打算长期在编码和 Agent 场景里用Coding Plan 会更省心https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite 。最后给一个实用习惯把source ~/learn_ws/devel/setup.bash写进.bashrc后新终端直接rosrun就行调试阶段用rostopic hz确认频率、rostopic echo确认内容比盯着节点日志快得多。发布者和订阅者都跑起来、话题频率稳定、TaoToken 通道返回正常这条端到端链路就算通了。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

MIPI LP RX调试指南:从协议原理到FPGA实现与花屏排障 2026/9/29 13:03:46

MIPI LP RX调试指南:从协议原理到FPGA实现与花屏排障

干嵌入式显示这一行十年,我调过最多的接口就是MIPI。每次接到“屏没信号”的报障,我第一件事不是抓高速差分波形,而是先看LP模式有没有起来。这话说出来很多新人不太理解:MIPI LP RX这个角色,明明身处物理层最不起眼的…

阅读更多 →
Web 漏洞验证:SQL 注入手工复现技巧 2026/9/29 13:03:32

Web 漏洞验证:SQL 注入手工复现技巧

Web 漏洞验证:SQL 注入手工复现技巧 前言 上一篇 Xray 文章提到:扫描器给出的 SQL 注入高危漏洞只能作为线索,不能直接当作真实漏洞。很多新手拿到 Xray 的报告直接写进渗透报告,结果提交之后被判定为误报。SQL 注入的核心验证方式…

阅读更多 →
POE温湿度记录仪机房巡检升级:点位布设与供电链路实战复盘 2026/9/29 13:03:32

POE温湿度记录仪机房巡检升级:点位布设与供电链路实战复盘

机房巡检这事,干过的人都知道,看着简单,但真正做起来全是细节。我这次负责的机房巡检升级项目,核心就是给机房的温湿度监测换一套系统,换成POE以太网温湿度记录仪,重新规划点位布设。项目做完复盘下来&…

阅读更多 →
Meta新模型把AI推理成本打下来8倍:TaoToken统一Key接入Cline的config.json骨架与验证 2026/9/29 13:03:32

Meta新模型把AI推理成本打下来8倍:TaoToken统一Key接入Cline的config.json骨架与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Meterpreter 后渗透实战,内网横向移动入门 2026/9/29 13:03:32

Meterpreter 后渗透实战,内网横向移动入门

Meterpreter 后渗透实战,内网横向移动入门 前言 拿到 Meterpreter 会话,只是渗透的起点,而不是终点。很多新手利用永恒之蓝拿到靶机 shell 之后,不知道下一步该干什么,以为拿到一台机器就完成渗透。而**后渗透&#xf…

阅读更多 →
POE温湿度记录仪布设的物理层可靠性设计 2026/9/29 13:03:32

POE温湿度记录仪布设的物理层可靠性设计

1. 为什么传统机房巡检在POE温湿度记录仪落地时频频“掉链子”去年Q3我们接手了一个老数据中心的智能化升级项目,目标很明确:用POE供电的以太网温湿度记录仪替代原有分散部署的USB/RS485采集器人工抄表模式。听起来是标准的“换硬件、接网线、上平台”三…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉