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