话题存在但订阅无消息,除了网络还应核对发布订阅 QoS 兼容性。
可靠性、耐久性和队列深度影响匹配与传输。传感器数据和命令有不同取舍,可靠传输可能增加等待,保留旧消息也可能不适合实时控制。
一、问题的范围与前提
感知、定位、规划、控制与机械执行有不同状态。坐标系、时间、单位和消息有效期决定数据能否安全使用。上层请求受理不表示下位机已完成动作,视觉目标丢失也不等于抓取或到达成功。
二、技术分析与方案取舍
发布者提供的可靠性和订阅者请求需要相容,发现话题不证明两端完成匹配。传感器流可能更重视新鲜度,命令更重视可靠身份与反馈。持久性还影响新订阅者是否收到旧消息,旧命令不能因此重新执行。测试不同负载与丢包,观察实际数据年龄和错误,而不只确认 topic list。
先做只读状态核对和受控的最小动作,再逐步组合流程。传感器外参和变换方向用实物验证,任务状态明确进入、等待、完成与异常退出。需要硬件执行时,由设备侧联锁和控制器维护确定性边界,网络或模型输出不承担全部安全保护。
三、实现与排查的顺序
- 查询两端 QoS。
- 核对请求与提供兼容。
- 按数据用途选策略。
- 测试丢包与重连。
按这个顺序保留中间结果,可以区分输入条件、处理过程和最终输出。前一阶段的条件不成立时,先解释对应错误,再继续后面的试验;单次返回成功不足以覆盖整条链路。
最小示例
1
2
3
ros2 topic list
ros2 topic info /example_topic
ros2 topic echo /example_topic
这些查询用于观察通道和消息,不发送控制命令。CLI 选项与默认 QoS 以安装发行版为准,话题存在不证明订阅兼容或消息新鲜。
四、验证和结果解释
关联上层请求、通信发送、下位机反馈与实际动作。定位结果需要独立尺度或位置参考,地图图像只能提供部分证据。每轮测试按动作和运行条件保存范围,早期成功不能覆盖后来不同状态下的失败。
| 需要验证的结果 | 保留的对照 | 不能由此推出的结论 |
|---|---|---|
| 订阅确实匹配 | 固定输入与配置、对应输出 | 一次成功代表所有条件成功 |
| 旧消息不会误执行 | 中断前后状态与错误阶段 | 没有报错代表结果正确 |
| 高负载延迟有记录 | 恢复后的同条件复测 | 临时恢复代表根因已经消失 |
测试目标丢失、时间过期、反馈超时和重启恢复。有效停止与异常出口先于复杂连续动作,避免旧坐标或旧回执驱动下一步。机械风险下保持受控速度与区域,文章只讨论通用方法,不公开现场动作库或生产阈值。
五、适用边界与结论
QoS 不是业务完成确认,动作仍需要自己的状态与反馈。具体默认值按发行版核对。
这条路径把“查询两端 QoS”与“测试丢包与重连”连在一起,中间保留可复查的条件。实施时优先确认“订阅确实匹配”,再检查“高负载延迟有记录”;两者都满足,才能在当前样本与配置范围内评价方案。设备、数据或软件版本改变以后,相关假设需要重新验证。