ros先訂閱後發布 無法收到訊息的解決辦法

2021-10-02 17:16:17 字數 640 閱讀 8995

今天遇到的問題是: 使用的是ros1, 在先訂閱後發布時, 會導致訂閱者無法收到訂閱的訊息, 除非在發布者發布後重新訂閱.

以前使用的是ros2似乎並不關心訂閱和發布的先後順序,  似乎都可以收到訊息.  

這個問題後面再確認下, 今天也記錄下.

因為計算機上已經沒有ros2的環境了, 所以這個問題暫時擱置, 等有機會的確認下, 不過如果有解決辦法的話, 那麼ros2訂閱和發布的先後順序也就不重要了.

這個問題是個致命的問題, 因為在兩個節點通訊時, 如果一方沒有訂閱成功訊息, 那麼後面的操作也就沒有用了.

如果在發布者發布後再訂閱, 那麼也不是個辦法. 因為乙個節點的不僅會有訂閱者也會有發布者, 無法確定誰先誰後的順序, 這樣是無法解決這個問題的.

>以下是**:

templatevoid subscriber::createsubscriber(funcallback &callback, uint32_t nsizequeue)
經過檢視ros有關原始碼發現, 最後解決了這個問題

根據迴圈判斷訂閱者查詢發布者的數量, 如果為0那麼說明訂閱失敗, 重新訂閱直到訂閱成功.

> >以下是**:

templatevoid

無法收到redis訂閱訊息

現網程式執行一段時間後,經常發現收不到redis訂閱訊息。輸入client list查詢redis連線資訊,輸出如下資訊 id 2375018 addr 120.15.207.135 9159 fd 663 name subarea age 3324 idle 563 flags n db 0 su...

ROS教程(十二) 測試訊息發布器和訂閱器

description 本教程將測試上一教程所寫的訊息發布器和訂閱器。tutorial level beginner next tutorial 寫乙個簡單的服務端和客戶端 python c 目錄 啟動發布器 啟動訂閱器 確保roscore可用,並執行 roscore catkin specific...

ROS中自定義訊息的發布和訂閱

因為需要傳輸目標跟蹤的結果,因此需要進行自定義訊息的發布和訂閱。首先,如果我們需要傳輸自定義訊息的話,需要建立一系列的準備檔案。我是直接修改的經典教程中的beginner tutorials中的talker.cpp和listen.cpp檔案,因此,均是在beginner tutorials這個pac...