# ROS 启动时发布消息在 rostopic echo 中丢失

> 原文链接：https://robotics.hellobike.com/pitfalls/2015-01-14-robotics-se-6374
> 频道：pitfalls | 更新日期：2015-01-14 | 标签：auto, stackexchange, ros, c++
> 核心摘要：节点刚 advertise 后立即发布，rostopic 尚未订阅；可延迟发布，或用 ROS service 表示节点已就绪。

# ROS 启动时发布消息在 rostopic echo 中丢失

::: v-pre
> 本文由 AI 根据公开内容整理，可能有误，请以原文为准：[ros send message on startup doesn't seem to work](https://robotics.stackexchange.com/questions/6374/ros-send-message-on-startup-doesnt-seem-to-work)（Robotics Stack Exchange #6374）

**状态**：已解决

## 问题

C++ ROS 节点启动时调用 `askMath()`，日志显示已发布到 `/questions`，但启动中的 `rostopic echo /questions` 看不到第一条消息；每轮循环发布则能看到但会重复发送。

## 环境

Linux / ROS 机器人软件与控制通用开发环境

## 解决办法

1. 若只验证或临时绕过，在 `nc.init()` 完成 topic `advertise` 后、`nc.spin()` 前加入较长 sleep，让 `rostopic` 有时间订阅，再发布首条消息。
2. 更推荐不要用启动时一次性 topic 消息作为就绪触发；节点完成初始化后提供一个 ROS service，始终返回 true。
3. 依赖该节点的其他节点轮询此 service；调用成功即认为节点已运行，再继续后续动作。

原问题作者：Thijser；采纳答案作者：Shahbaz。原内容依 CC BY-SA 4.0 授权，本页摘要同样依 CC BY-SA 4.0 授权。
:::

## 原始参考来源 (Sources)

- [Robotics Stack Exchange #6374：ros send message on startup doesn't seem to work](https://robotics.stackexchange.com/questions/6374/ros-send-message-on-startup-doesnt-seem-to-work)