<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>リアルタイム性 on Physical AI Hub</title>
    <link>https://physicalaihub.net/tags/%E3%83%AA%E3%82%A2%E3%83%AB%E3%82%BF%E3%82%A4%E3%83%A0%E6%80%A7/</link>
    <description>Recent content in リアルタイム性 on Physical AI Hub</description>
    <generator>Hugo</generator>
    <language>ja-jp</language>
    <lastBuildDate>Sun, 14 Jun 2026 01:15:54 +0900</lastBuildDate>
    <atom:link href="https://physicalaihub.net/tags/%E3%83%AA%E3%82%A2%E3%83%AB%E3%82%BF%E3%82%A4%E3%83%A0%E6%80%A7/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>リアルタイムなロボットAI基盤：推論・制御・通信の実行予算を設計する</title>
      <link>https://physicalaihub.net/posts/robot-ai-real-time-execution-budget-inference-control/</link>
      <pubDate>Sun, 14 Jun 2026 01:15:54 +0900</pubDate>
      <guid>https://physicalaihub.net/posts/robot-ai-real-time-execution-budget-inference-control/</guid>
      <description>&lt;p&gt;AI推論のベンチマーク値だけで、ロボット全体のリアルタイム性を判断できるのかが気になるテーマです。&lt;/p&gt;&#xA;&lt;h2 id=&#34;先に結論&#34;&gt;先に結論&lt;/h2&gt;&#xA;&lt;p&gt;ロボットのAI処理に、制御30%、推論50%といった普遍的な固定比率はありません。先に制御ループの期限を予約し、センサー入力、アクチュエータ出力、ROS 2通信、スケジューリング干渉、安全余裕を見積もります。その残りをAIに割り当てるのではなく、AIにも独立した周期と期限を設定し、制御が推論の完了を同期的に待たない構成にするのが基本です。&lt;/p&gt;&#xA;&lt;p&gt;判断には平均推論時間ではなく、前処理、メモリ転送、GPU実行、同期、後処理、ROS 2メッセージ処理まで含むエンドツーエンドのp99.9、最大値、ジッター、期限超過率を使います。AIが期限に間に合わない場合は、直近の有効な結果を使うか、安全なフォールバックへ切り替えます。&lt;/p&gt;&#xA;&lt;h2 id=&#34;なぜ実行予算が必要か&#34;&gt;なぜ実行予算が必要か&lt;/h2&gt;&#xA;&lt;p&gt;ロボットでは、平均的に速い処理より、まれな期限超過をどう扱うかが重要です。AIが通常は短時間で完了しても、CPUやGPU、メモリ帯域、ドライバ、ログ処理などの競合で一部の周期が遅れれば、制御の決定性は崩れます。実行予算は、周期や締切の中で各処理が使える時間を明示するための枠組みです。&lt;/p&gt;&#xA;&lt;p&gt;ハードリアルタイム経路では、処理時間の上限を見積もり、動的メモリ割り当て、ページフォールト、無制限に待つロック、非リアルタイムなシステムコールを避けます。これらは平均値には表れにくい遅延要因です。&lt;/p&gt;&#xA;&lt;h2 id=&#34;前提となる仕組み&#34;&gt;前提となる仕組み&lt;/h2&gt;&#xA;&lt;p&gt;ROS 2のExecutorは、待機集合から実行可能なサブスクリプション、タイマー、サービス、アクションなどを取り出してコールバックを実行します。SingleThreadedExecutorは単一スレッド、MultiThreadedExecutorは複数スレッドを使います。ただし、一般的なExecutorはハードな優先度順やFIFO実行を保証しません。&lt;/p&gt;&#xA;&lt;p&gt;Callback Groupには、同時実行を制限するMutually Exclusiveと、同時実行を許すReentrantがあります。これはコールバック間の関係を制御しますが、設定だけで締切やリアルタイム性が保証されるわけではありません。&lt;/p&gt;&#xA;&lt;p&gt;QoSにはReliability、History、Deadline、Lifespan、Livelinessなどがあります。通信の信頼性、キュー保持、更新期限、データ鮮度を設計できますが、QoSのDeadlineはデータ更新を監視する機能であり、Executorのコールバック開始時刻や処理完了時刻を保証するものではありません。&lt;/p&gt;&#xA;&lt;h2 id=&#34;予算の分け方&#34;&gt;予算の分け方&lt;/h2&gt;&#xA;&lt;p&gt;まず制御周期を定め、次の順で予算を予約します。&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;制御計算、センサー入力、アクチュエータ出力&lt;/li&gt;&#xA;&lt;li&gt;リアルタイム通信処理&lt;/li&gt;&#xA;&lt;li&gt;スケジューリングや共有資源による干渉&lt;/li&gt;&#xA;&lt;li&gt;安全・ジッター余裕&lt;/li&gt;&#xA;&lt;li&gt;AIの前処理、推論、後処理&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;AIを制御周期の「残り時間」に詰め込むと、推論遅延が制御期限を直接圧迫します。制御スレッドまたはリアルタイム向けExecutorはAIの結果を待たず、利用可能な結果の鮮度を確認して使う構成にします。AIの前処理やROS 2通信は別の実行資源に分け、GPU推論は可能な範囲で非同期に投入します。&lt;/p&gt;&#xA;&lt;p&gt;設計上の仮置きとして、100 Hz、10 ms周期なら、制御とI/Oを2 ms、ROS 2通信処理を1 ms、AIのエンドツーエンド処理を6 ms、安全・ジッター余裕を1 msと置けます。ただし、これは標準値でも推奨値でもありません。対象のCPU、GPU、モデル、I/O、ROS 2構成を測定して再設定する必要があります。&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;制御とI/O、通信、安全余裕を先に確保し、AIを独立した期限で実行する予算設計の仮置き例。2・1・6・1 msは推奨標準値ではなく、対象ハードウェアでの計測後に再設定する。&#34;&gt;flowchart LR&#xA;  subgraph CYCLE[&#34;100 Hz・10 ms周期の仮置き例&#34;]&#xA;    CTRL[&#34;制御・I/O\n2 ms&#34;] --&gt; COMM[&#34;ROS 2通信処理\n1 ms&#34;]&#xA;    COMM --&gt; AI[&#34;AIエンドツーエンド処理\n6 ms&#34;]&#xA;    AI --&gt; MARGIN[&#34;安全・ジッター余裕\n1 ms&#34;]&#xA;  end&#xA;  SENSOR[&#34;センサー入力&#34;] --&gt; CTRL&#xA;  AI --&gt;|&#34;期限内に取得&#34;| FRESH[&#34;鮮度を確認して\n制御で利用&#34;]&#xA;  AI --&gt;|&#34;期限超過&#34;| FALLBACK[&#34;直近の有効値\nまたは安全なフォールバック&#34;]&#xA;  FRESH --&gt; ACT[&#34;アクチュエータ出力&#34;]&#xA;  FALLBACK --&gt; ACT&#xA;  CTRL -.-&gt;|&#34;AIの完了を同期的に待たない&#34;| FRESH&lt;/pre&gt;&lt;figcaption&gt;制御とI/O、通信、安全余裕を先に確保し、AIを独立した期限で実行する予算設計の仮置き例。2・1・6・1 msは推奨標準値ではなく、対象ハードウェアでの計測後に再設定する。&lt;/figcaption&gt;&lt;/figure&gt;&lt;h2 id=&#34;何を測るべきか&#34;&gt;何を測るべきか&lt;/h2&gt;&#xA;&lt;p&gt;AIの計測点は、センサー取得、ROS 2受信、前処理開始、ホストからデバイスへの転送、GPUカーネルの開始・終了、同期、デバイスからホストへの転送、後処理、制御入力、アクチュエータ出力です。GPU処理は非同期に実行できるため、推論APIの呼び出し時間だけでは実際の完了時間を表しません。&lt;/p&gt;</description>
    </item>
    <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>
