Quality of Service
目次
概要
公式ドキュメントによると、”ROS 2 can be as reliable as TCP or as best-effort as UDP”と書いてあります。TCP通信は信頼性が、UDPは高速性がそれぞれ高く、TCPでは確実にすべての情報を送ること、UDPでは時間通りに通信を行うことを重要視しています。
ROSの通信では、これらの2つの特徴のどちらを重要視するか、自分で決めることができるのです。
パラメータ
実際に決めることができるのは次のパラメータです。
History(履歴)
- keep last
最大いくつのサンプルまでを保存するか決めることができます。Depthパラメータで保存する個数を決めます。 - keep all
全てのサンプルを保存します。
Reliability(信頼性)
- Reliable
情報の信頼性が高い、TCP通信に近い通信です。 - Best Effort
時間的な信頼性が高い、UDP通信に近い通信です。
Durability(耐久性)
- Transient local
後から接続したsubscriberに対して、過去のtopicデータを渡します。 - Volatile
基本的にこっちで問題ないでしょう。
デフォルト
デフォルトは
keep last (Depth=10) / Reliable / Volatile
となっています。
Volatileは変えなくてもいいと思いますが、keep lastを増やすか、ReliableをBest Effortにする、など通信要件に従って変えましょう。
組み合わせ
publisher,subscriber同士で通信ができる組み合わせとできない組み合わせがあります。
| publisher | subscriber | 可能/不可能 | 通信状況 |
|---|---|---|---|
| Reliable | Best Effort | 可能 | 情報は正しく送るが、最新のもののみ使う |
| Reliable | Reliable | 可能 | 情報を正しく送り、すべて受け取る |
| Best Effort | Best Effort | 可能 | 最新のもののみやり取りする |
| Best Effort | Reliable | 不可能 | 受け手は情報を欲しているのに保存されていない状態 |
例えばReliableのpublisherに対してBest EffortとReliableの両方のsubscriberがいる、という状況が考えられますね。