ros先订阅后发布 无法收到消息的解决办法

在ROS1中,先订阅后发布可能导致订阅者无法接收到消息。通过检查发布者数量,若为0则重新订阅,确保订阅成功。此问题可能因环境不同而表现不一,解决方案是环境重装。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现象

今天遇到的问题是: 使用的是Ros1, 在先订阅后发布时, 会导致订阅者无法收到订阅的消息, 除非在发布者发布后重新订阅.

思考

以前使用的是Ros2似乎并不关心订阅和发布的先后顺序,  似乎都可以收到消息.  

这个问题后面再确认下, 今天也记录下.

因为计算机上已经没有Ros2的环境了, 所以这个问题暂时搁置, 等有机会的确认下, 不过如果有解决办法的话, 那么Ros2订阅和发布的先后顺序也就不重要了.

这个问题是个致命的问题, 因为在两个节点通信时, 如果一方没有订阅成功消息, 那么后面的操作也就没有用了.

如果在发布者发布后再订阅, 那么也不是个办法. 因为一个节点的不仅会有订阅者也会有发布者, 无法确定谁先谁后的顺序, 这样是无法解决这个问题的.

>以下是代码:

template<typename MsgConstPtr, typename funCallback>
void Subscriber::createSubscriber(funCallback &callback, uint32_t nSizeQueue) {
    m_subsriber = Handle::ptrNodeHandle->subscribe(m_strTopic, nSizeQueue, callback);
}

解决办法

经过查看Ros有关源码发现, 最后解决了这个问题

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贾大君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值