QoS(服務品質)

定義

QoS(Quality of Service,服務品質)是底層 DDS 提供的一組通訊行為政策,決定訊息傳遞的可靠度與行為,最基礎的三個維度是 Reliability(可靠性)、Durability(持久性)、History(歷史紀錄深度),進階則有 Deadline、Liveliness、Lifespan 等監控機制。

關鍵特性

  • 相容性判斷,不是完全相同:Publisher 與 Subscriber 的 QoS 不需要逐項相同才能連線,而是有明確的相容矩陣,最常踩的坑是 Subscriber 要求 RELIABLE 但 Publisher 只提供 BEST_EFFORT,兩者不相容。
  • 不相容時完全沒有錯誤訊息:這是 QoS 最容易讓人誤判的地方——雙方各自建立成功,但底層判定不相容時,訊息就是靜默地無法傳遞,必須主動用 ros2 topic info -v 檢查才會發現。
  • Deadline/Liveliness 是連線健康監控:不是保證訊息一定送達,而是主動偵測「該來的資料有沒有按時來」「Publisher 是否還存活」,適合安全關鍵場景。

使用情境

  • 高頻率感測器資料流:BEST_EFFORT + VOLATILE + 淺的 KEEP_LAST,捨棄來不及處理的舊資料。
  • 地圖、機器人狀態這類資料:RELIABLE + TRANSIENT_LOCAL,讓晚加入的節點也能拿到最新內容。

延伸閱讀