<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>QoS on Physical AI Hub</title>
    <link>https://physicalaihub.net/tags/qos/</link>
    <description>Recent content in QoS on Physical AI Hub</description>
    <generator>Hugo</generator>
    <language>ja-jp</language>
    <lastBuildDate>Mon, 16 Mar 2026 00:29:08 +0900</lastBuildDate>
    <atom:link href="https://physicalaihub.net/tags/qos/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>ROS 2のQoS設計入門：センサー通信と制御通信の信頼性・遅延をどう両立するか</title>
      <link>https://physicalaihub.net/posts/ros2-qos-sensor-control-design/</link>
      <pubDate>Mon, 16 Mar 2026 00:29:08 +0900</pubDate>
      <guid>https://physicalaihub.net/posts/ros2-qos-sensor-control-design/</guid>
      <description>&lt;p&gt;QoSは設定項目が多く、通信できない原因と遅延の原因が同じ場所に見えやすい点が気になります。&lt;/p&gt;&#xA;&lt;h2 id=&#34;先に結論&#34;&gt;先に結論&lt;/h2&gt;&#xA;&lt;p&gt;ROS 2のQoSは、通信の種類ではなく「古いデータを待つべきか」「欠落を許せるか」「一定時間届かなければ停止すべきか」で決める。カメラ、LiDAR、IMUなどの高頻度センサーは、最新データを処理し続けることを優先し、まずは&lt;code&gt;SensorDataQoS&lt;/code&gt;（&lt;code&gt;KEEP_LAST&lt;/code&gt;、深度5、&lt;code&gt;BEST_EFFORT&lt;/code&gt;、&lt;code&gt;VOLATILE&lt;/code&gt;）を候補にする。一方、&lt;code&gt;cmd_vel&lt;/code&gt;のような制御指令は、受信側との互換性を確認したうえで、浅いキュー、&lt;code&gt;RELIABLE&lt;/code&gt;、&lt;code&gt;VOLATILE&lt;/code&gt;を出発点に検討する。ただし、再送による古い指令の到着を避けたい場合は、&lt;code&gt;BEST_EFFORT&lt;/code&gt;や短い&lt;code&gt;LIFESPAN&lt;/code&gt;の方が適することもある。&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;RELIABLE&lt;/code&gt;を設定するだけでハードリアルタイム性や安全性が得られるわけではない。&lt;code&gt;DEADLINE&lt;/code&gt;、&lt;code&gt;LIFESPAN&lt;/code&gt;、受信タイムアウト、ウォッチドッグを、アプリケーションやモーター制御側の停止処理へ接続して初めて、通信断や古い指令に対する動作を設計できる。&lt;/p&gt;&#xA;&lt;h2 id=&#34;なぜqosの使い分けが必要か&#34;&gt;なぜQoSの使い分けが必要か&lt;/h2&gt;&#xA;&lt;p&gt;ROS 2のQoSは、パブリッシャーとサブスクライバーという各通信エンドポイントに設定される。メッセージ型やトピック名が同じでも、両者のQoSが互換でなければ通信は成立しない。反対に、通信が成立しても、キューに古いデータを蓄積したり、再送を待ったりする設定では、ロボットの処理に必要な鮮度を失う可能性がある。&lt;/p&gt;&#xA;&lt;p&gt;センサーと制御指令では、失われたデータの意味が異なる。高頻度センサーでは、処理が追いつかないときに過去のフレームを順番に処理するより、最新フレームへ追従したい場合が多い。制御指令では、確実な配送が必要な場面がある一方、停止後の古い指令を遅れて適用することも避けなければならない。したがって、信頼性と低遅延を単純な優劣で比較するのではなく、データの有効時間と欠落の影響を基準にする。&lt;/p&gt;&#xA;&lt;h2 id=&#34;qosポリシーの基本用語&#34;&gt;QoSポリシーの基本用語&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;ポリシー&lt;/th&gt;&#xA;          &lt;th&gt;意味&lt;/th&gt;&#xA;          &lt;th&gt;設計時の問い&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;HISTORY&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;保存方式。&lt;code&gt;KEEP_LAST&lt;/code&gt;は直近の一定数を保持する&lt;/td&gt;&#xA;          &lt;td&gt;過去データをどれだけ残すか&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;DEPTH&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;KEEP_LAST&lt;/code&gt;で保存するサンプル数&lt;/td&gt;&#xA;          &lt;td&gt;処理遅延を許容して何件待つか&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;RELIABILITY&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;配送保証の方式。&lt;code&gt;RELIABLE&lt;/code&gt;は再送を含む保証、&lt;code&gt;BEST_EFFORT&lt;/code&gt;は届いたものを扱う&lt;/td&gt;&#xA;          &lt;td&gt;欠落と待ち時間のどちらを重く見るか&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;DURABILITY&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;新しく参加した受信者へ過去データを保持する方式&lt;/td&gt;&#xA;          &lt;td&gt;購読開始前の値が必要か&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;DEADLINE&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;データ到着間隔への期待値&lt;/td&gt;&#xA;          &lt;td&gt;周期が途切れたことを検知したいか&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;LIFESPAN&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;サンプルが有効でいられる期間&lt;/td&gt;&#xA;          &lt;td&gt;古いデータを破棄したいか&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;LIVELINESS&lt;/code&gt; / &lt;code&gt;LEASE_DURATION&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;送信者の生存確認に関する設定&lt;/td&gt;&#xA;          &lt;td&gt;送信ノードの停止を監視するか&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;&lt;code&gt;VOLATILE&lt;/code&gt;は過去データを新規参加者へ引き渡す用途ではなく、現在流れているデータを扱う通信に向く。設定値は単独で意味を持つのではなく、送信周期、処理能力、ネットワーク条件と組み合わせて評価する。&lt;/p&gt;&#xA;&lt;h2 id=&#34;センサー通信の設計&#34;&gt;センサー通信の設計&lt;/h2&gt;&#xA;&lt;p&gt;Jazzyの&lt;code&gt;SensorDataQoS&lt;/code&gt;は、&lt;code&gt;KEEP_LAST&lt;/code&gt;、深度5、&lt;code&gt;BEST_EFFORT&lt;/code&gt;、&lt;code&gt;VOLATILE&lt;/code&gt;を基本値とする事前定義プロファイルである。カメラやLiDARのようにデータ量と頻度が大きい通信では、多少の欠落よりも処理の停滞や古いデータの蓄積を避けることが優先される場合がある。そのため、浅いキューと&lt;code&gt;BEST_EFFORT&lt;/code&gt;を出発点にし、処理が常に新しい入力へ追従できるかを確認する。&lt;/p&gt;&#xA;&lt;p&gt;ただし、すべてのセンサーに同じ設定を適用してよいわけではない。欠落が許されないセンサー入力や安全判断に使う低頻度データでは、&lt;code&gt;RELIABLE&lt;/code&gt;を個別に検討する。&lt;code&gt;DEPTH&lt;/code&gt;を大きくすれば一時的な処理遅延を吸収できる可能性があるが、古いサンプルを処理する時間も増える。実機や対象ネットワークを確認せず、深度の最適値を決めることはできない。&lt;/p&gt;&#xA;&lt;h2 id=&#34;制御通信の設計&#34;&gt;制御通信の設計&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;cmd_vel&lt;/code&gt;には、ROS 2全体で強制された単一のQoS標準値はない。ドライバーやノードが選択したQoSに依存するため、トピック名だけから&lt;code&gt;RELIABLE&lt;/code&gt;や&lt;code&gt;BEST_EFFORT&lt;/code&gt;を推定してはいけない。&lt;/p&gt;&#xA;&lt;p&gt;初期案としては、&lt;code&gt;RELIABLE&lt;/code&gt;、&lt;code&gt;VOLATILE&lt;/code&gt;、&lt;code&gt;KEEP_LAST&lt;/code&gt;の深度1が考えられる。これは制御指令を確実に届けることと、キューに多数の古い指令を残さないことを両立させる方向である。ただし、通信損失時の再送で古い指令が遅れて届くことを避けたいシステムでは、&lt;code&gt;BEST_EFFORT&lt;/code&gt;や短い&lt;code&gt;LIFESPAN&lt;/code&gt;も候補になる。最終判断は、受信側の要求QoS、ネットワーク損失、指令の有効時間、モーターコントローラーのタイムアウト仕様を確認して行う。&lt;/p&gt;&#xA;&lt;figure class=&#34;mermaid-figure&#34;&gt;&#xA;    &lt;pre class=&#34;mermaid&#34; role=&#34;img&#34; aria-label=&#34;センサー通信では最新データへの追従を、制御通信ではQoS互換性、指令の有効期限、停止監視を重視する設計の流れを示す。図中の制御QoSは初期候補であり、単一の標準解を示すものではない。&#34;&gt;flowchart LR&#xA;  S[&#34;カメラ・LiDAR・IMUなどのセンサー入力&#34;] --&gt; SQ[&#34;SensorDataQoSの初期候補\nKEEP_LAST・深度5\nBEST_EFFORT・VOLATILE&#34;]&#xA;  SQ --&gt; SP[&#34;処理ノード\n最新データへ追従&#34;]&#xA;  SP --&gt; SF[&#34;センサー処理&#34;]&#xA;&#xA;  C[&#34;cmd_velなどの制御指令&#34;] --&gt; CQ[&#34;制御QoSの初期候補\nRELIABLE・VOLATILE\nKEEP_LAST・深度1&#34;]&#xA;  CQ --&gt; CM[&#34;受信側の要求QoSと互換性を確認&#34;]&#xA;  CM --&gt;|&#34;互換&#34;| CT[&#34;期限管理\n短いLIFESPANやDEADLINEを検討&#34;]&#xA;  CT --&gt; WD[&#34;受信タイムアウト・ウォッチドッグ\n停止処理へ接続&#34;]&#xA;  WD --&gt; A[&#34;アクチュエーター側の停止動作&#34;]&#xA;  CM --&gt;|&#34;非互換&#34;| X[&#34;通信経路が成立しない\nQoSを確認・調整&#34;]&#xA;&#xA;  R[&#34;要件に応じた再評価\n欠落・遅延・古いデータの影響&#34;] -.-&gt; SQ&#xA;  R -.-&gt; CQ&#xA;  CQ -.-&gt;|&#34;古い指令の到着を避けたい場合&#34;| BE[&#34;BEST_EFFORTや短いLIFESPANも候補&#34;]&#xA;  BE -.-&gt; CT&lt;/pre&gt;&lt;figcaption&gt;センサー通信では最新データへの追従を、制御通信ではQoS互換性、指令の有効期限、停止監視を重視する設計の流れを示す。図中の制御QoSは初期候補であり、単一の標準解を示すものではない。&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;図では、センサー経路を「最新データの継続処理」、制御経路を「指令の期限管理と停止監視」として分けると理解しやすい。QoS不一致の場合は、各種の遅延調整以前に通信経路そのものが成立しない。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
