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

现象

今天遇到的问题是: 使用的是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有关源码发现, 最后解决了这个问题

根据循环判断订阅者查询发布者的数量, 如果为0那么说明订阅失败, 重新订阅直到订阅成功.

> >以下是代码:

    template<typename MsgConstPtr, typename funCallback>
    void Su
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章