ROS2学习(六).ROS概念 - 服务质量设置
ROS Quality of Service settings
- QoS策略[^1]
- 同ROS 1比較
- QoS配置文件
- QoS兼容性
- ROS1的QoS體系
- QoS事件
- 發布者相關事件
- 訂閱者相關事件
- 參考
QoS(Quality of Service)是在通信中非常常見的一個概念,用來定義通信的質量等級,以適配不同的場景。
對通信來說,最理想的情況,當然是所有的消息都無損地實時地被傳輸到接收端。但這帶來的代價幾乎是不可接受的,因此我們通過不同的服務質量等級QoS定義來使得這個代價可被接受同時保證不對業務產生影響。
例如:
“我不想去動物園”,傳輸中丟失了“不”字,則意思就完全相反了。因此這種場景下,我們需要定義相對高的QoS等級確保信息不被丟失。
一段視頻,以24幀/秒的速率傳輸,一般來說,丟失了個別幀,不對整段視頻的意義帶來影響,這種場景下,我們的QoS等級就可以相對較低,容忍一定程度的信息丟失。
上面的例子中,只用了簡單的高低來描述QoS,當然,實際場景要復雜得多。
因此,ROS 2提供了豐富的服務質量(QoS)策略,允許我們對節點之間的通信進行調優。在QoS的不同策略下,ROS 2可以像TCP一樣可靠,或者像UDP一樣提供盡力服務,當然也可以調整為兩者之間任意可能的服務質量狀態。
相較于ROS 1僅支持TCP,DDS為ROS 2提供了傳輸的靈活性:在有損的無線網絡環境中,“盡力服務”策略將會更合適;在實時計算系統中,合適的服務質量配置則可以滿足通信對實時時限的要求。
一組QoS策略結合形成一個QoS配置文件(profile)。ROS 2為常見場景提供了預設的QoS策略配置。當然我們也可以控制QoS配置文件。
QoS配置文件可以根據發布者、訂閱者、服務的服務端和客戶端加以指定。一個QoS配置文件可以被獨立應用于上述實體的每個實例。當然,如果使用不同的配置文件,可能會導致不兼容,從而無法傳遞消息。
QoS策略1
QoS基本配置包括了一下策略的設置:
現在包含以下策略:
- 歷史History
- 保留最后Keep last:只存儲N個數據,可通過隊列深度選項變更相關配置。
- 保留所有Keep all:存儲所有數據,根據底層中間件的配置進行資源限制。
- 深度Depth
- 隊列深度Queue size:僅當“歷史”策略為“保持最后”時生效。
- 可靠性Reliability
- 盡力服務Best effort:嘗試發送數據,但若網絡不夠健壯,則可能會丟失。
- 可靠Reliable:通過多次重試保證數據送達。
- 耐用性Durability
- 暫存本地Transient local:發布者將負責對數據進行持久化,以便“遲加入”的訂閱者可獲取數據。
- 揮發性Volatile:不嘗試保存數據。
- 截止時間Deadline
- 持續時間Duration:將連續消息發布到主題時的預期最大時間。
- 壽命Lifespan
- 持續時間Duration:在發布和接收消息之間的最長時間,在此時間內,消息不會被認為是過期的(過期的消息會被安靜地丟棄,永遠不會再被接收到)。
- 活躍程度Liveliness
- 自動Automatic:若任意節點發布了一條消息,系統將認為所有節點在接下來的租賃周期(Lease Duration)中都是活躍的。
- 按主題手動Manual by topic:若任意節點發布了一條消息,系統僅將認為該節點在接下來的租賃周期(Lease Duration)中是活躍的(通過調用發布的API)。
- 租賃周期Lease Duration
- 持續時間Duration:系統認為發布者失活的最大周期時間(失活將會導致失敗)。
對沒有指定持續時間的策略,通常使用底層中間件的默認值。
對于每一個有持續時間的策略,都存在一個默認的持續時間,底層中間件通常將其解釋為無限長的持續時間。
同ROS 1比較
在ROS 2中,“歷史”和“深度”策略聯合使用,基本等效于ROS 1的queue size。
“可靠性”策略在ROS 1中等效于UDPROS(盡力服務)和TCPROS(可靠)。其中UDPROS僅在roscpp中存在,TCPROS是ROS 1的默認值。注意ROS 2的可靠性策略是基于UDP實現的,它仍允許組播的存在。
“耐用性”策略中的“暫存本地”,加上任意的深度,提供了類似發布者“鎖存”的功能。
ROS 2中的其余策略都同ROS 1中的策略沒有相似之處。
QoS配置文件
配置文件允許開發者集中精力于他們的應用本身,而無需關注到每個QoS的設置。一個QoS配置文件為一個特定的用戶場景定義了一系列策略。
預定義的QoS配置文件如下:
- 默認:適用于發布訂閱
為了可以更簡單地從ROS1遷移至ROS2,需要采用同ROS1相似的網絡配置。默認情況下,ROS2中的發布訂閱使用“保留最后”的策略,且隊深為10;可靠性設置為“可靠”;耐用性設置為“揮發性”;活躍程度設置為“系統默認”。截止時間、壽命、租賃周期也均設為“默認”。 - 服務
服務也設置為與發布訂閱相同的可靠性。對服務來說,使用揮發性的耐用性設置尤為重要,否則服務端將可能會收到過期的請求。此時,客戶端可以避免收到多個響應,而服務端則會收到過期請求。 - 傳感數據
大部分情況下,我們希望能夠實時地接收到傳感器的數據,而不會過多地關注于所有的數據都被送達。對開發者來說,我們需要的是最新的采樣數據,可以接受部分數據被丟棄。因此,傳感器的配置文件將使用盡力的可靠性和一個較小的隊列深度。 - 參數
ROS2的參數是基于服務的,因此使用同服務相同的配置文件。不同點僅在于參數會使用更大的隊列深度,以便在參數的請求方無法獲取服務時盡可能地保留相關請求不被丟棄。 - 系統默認
對所有的策略使用RMW實現的默認設置。不同的RMW實現可能有不同的默認值。
可以在此鏈接中找到上述的配置文件。此配置文件中的設定將根據社區的反饋進行調整。
QoS兼容性
注意本節涉及的發布者和訂閱者的內容,也覆蓋了服務中的服務端和客戶端。
我們可以為發布者和訂閱者獨立地設置QoS配置文件,只有在具有相兼容的的配置文件時,二者才能正確連接。
QoS配置文件基于“請求/提供”模型來確定器兼容性。訂閱者請求一個它可接受的最低質量的QoS配置文件,發布者提供一個它可提供的最高質量的QoS配置文件。只有當請求的QoS配置文件的每個策略都松于提供的QoS配置文件的對應策略時,連接才會被建立。發布者和訂閱者之間的兼容性不受其它發布者和訂閱者的存在影響,這意味著,即使多個訂閱者請求的配置文件不同,它們也可以同時連接到同一個發布者。
不同策略的配置兼容性如下表所示:
reliability QoS策略兼容性
| Best effort | Best effort | Yes |
| Best effort | Reliable | No |
| Reliable | Best effort | Yes |
| Reliable | Reliable | Yes |
durability QoS策略兼容性
| Volatile | Volatile | Yes |
| Volatile | Transient local | No |
| Transient local | Volatile | Yes |
| Transient local | Transient local | Yes |
deadline QoS策略兼容性
假設x與y為可用的任意持續時間值
| Default | Default | Yes |
| Default | x | No |
| x | Default | Yes |
| x | x | Yes |
| x | y (y>x) | Yes |
| x | y (y<x) | No |
liveliness QoS策略兼容性
| Automatic | Automatic | Yes |
| Automatic | Manual by topic | No |
| Manual by topic | Automatic | Yes |
| Manual by topic | Manual by topic | Yes |
lease duration QoS策略兼容性
假設x與y為可用的任意持續時間值
| Default | Default | Yes |
| Default | x | No |
| x | Default | Yes |
| x | x | Yes |
| x | y (y>x) | Yes |
| x | y (y<x) | No |
只有所有影響兼容性策略的策略都為兼容時,方可建立連接。反之,即使請求的和提供的某一QoS配置文件不具有兼容性時,則他們仍不會建立連接。
當無法建立連接時,發布者和訂閱者之間不會傳遞任何消息。有一些機制可以檢測這種情況,可以在后續的小節中進行討論。
ROS1的QoS體系
在ROS1中的QoS體系更為寬松,任何在相同主題上具有相同消息類型的發布者和訂閱者之間都能通信,并不考慮相互間的服務質量。
QoS事件
在某些QoS策略下,系統將提供相關的事件,我們可以對發布者和訂閱者提供回調函數。回調函數由前述的QoS事件觸發,我們可以在回調函數中書寫相應的處理,典型的例如如何處理接收到的主題消息。
發布者相關事件
-
發布者過期Offered deadline missed
發布者未能在deadline QoS策略期望的時間內發布相應的消息。 -
失活Liveliness lost
發布者未能在周期內聲明其活躍性。 -
QoS設置不兼容Offered incompatible QoS
發布者的QoS配置不能滿足訂閱者請求的相關配置要求,導致二者無法連接。
訂閱者相關事件
-
訂閱者過期Requested deadline missed
訂閱者未能在deadline QoS策略期望的時間內收到相應的消息。 -
活躍性變化Liveliness changed
訂閱者發現任意發布者未能在周期內聲明其活躍性。 -
QoS設置不兼容Requested incompatible QoS
發布者的QoS配置不能滿足訂閱者請求的相關配置要求,導致二者無法連接。
參考
About Quality of Service settings ??
總結
以上是生活随笔為你收集整理的ROS2学习(六).ROS概念 - 服务质量设置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ROS2学习(五).ROS概念 - RO
- 下一篇: ROS2学习(七).ROS概念 - RO