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,讓晚加入的節點也能拿到最新內容。