<?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%AD%E3%83%9C%E3%83%83%E3%83%88%E3%83%AD%E3%82%B0/</link>
    <description>Recent content in ロボットログ on Physical AI Hub</description>
    <generator>Hugo</generator>
    <language>ja-jp</language>
    <lastBuildDate>Wed, 29 Jul 2026 09:10:27 +0900</lastBuildDate>
    <atom:link href="https://physicalaihub.net/tags/%E3%83%AD%E3%83%9C%E3%83%83%E3%83%88%E3%83%AD%E3%82%B0/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Physical AIの可観測性設計：センサー・推論・制御を横断して失敗を追跡する方法</title>
      <link>https://physicalaihub.net/posts/physical-ai-observability-sensor-inference-control-tracing/</link>
      <pubDate>Wed, 29 Jul 2026 09:10:27 +0900</pubDate>
      <guid>https://physicalaihub.net/posts/physical-ai-observability-sensor-inference-control-tracing/</guid>
      <description>&lt;p&gt;ロボットの「遅い」「失敗した」という記録を、原因の追跡につながる観測へ変えるには何が必要かを整理します。&lt;/p&gt;&#xA;&lt;h2 id=&#34;先に結論&#34;&gt;先に結論&lt;/h2&gt;&#xA;&lt;p&gt;ロボットの遅延や失敗を再現可能な形で調べるには、単一ノードのログではなく、センサー取得からアクチュエータ応答までを一つの実行単位として記録します。各境界に &lt;code&gt;run_id&lt;/code&gt;、&lt;code&gt;trace_id&lt;/code&gt;、&lt;code&gt;span_id&lt;/code&gt;、親子関係、メッセージのシーケンス番号、複数の時刻、処理状態を付与し、分散トレースとメッセージ記録を組み合わせるのが基本です。&lt;/p&gt;&#xA;&lt;p&gt;遅延は推論時間だけでなく、センサー取得、通信、キュー待ち、前処理、推論、制御計算、出力送信まで分解します。コード、モデル、設定、キャリブレーション、QoS、ファームウェア、乱数種、クロック設定も同じ調査単位に保存します。これにより、認識誤り、通信遅延、制御逸脱、安全停止の発生箇所と条件を追跡しやすくなります。&lt;/p&gt;&#xA;&lt;h2 id=&#34;なぜ横断的な観測が必要か&#34;&gt;なぜ横断的な観測が必要か&lt;/h2&gt;&#xA;&lt;p&gt;Physical AIでは、センサー、ROS 2通信、前処理、推論、計画、制御、ドライバ、アクチュエータが別々の処理として動きます。「入力を受けた」というノードの記録は、センサーの露光時刻を示すとは限りません。同様に、制御コマンドをpublishした時刻と、アクチュエータが実際に受け付けた時刻も異なる可能性があります。&lt;/p&gt;&#xA;&lt;p&gt;そのため「推論が遅い」という症状だけでは、原因が通信、executorの待ち時間、キュー滞留、前処理、推論、出力送信のどこにあるか分かりません。処理経路を共通の相関情報で結び、区間ごとの時間と状態を比較できるようにします。&lt;/p&gt;&#xA;&lt;h2 id=&#34;前提となる仕組み&#34;&gt;前提となる仕組み&lt;/h2&gt;&#xA;&lt;p&gt;OpenTelemetryのトレースは、処理経路を複数の &lt;code&gt;span&lt;/code&gt; の集合として表します。spanには開始・終了時刻、属性、イベント、ステータスを付けられます。ログが個別の出来事、メトリクスが集計値を扱うのに対し、トレースは一回の処理経路を表します。&lt;/p&gt;&#xA;&lt;p&gt;W3C Trace Contextは、&lt;code&gt;trace-id&lt;/code&gt; や &lt;code&gt;parent-id&lt;/code&gt; などを分散コンポーネント間で伝播する標準形式を定義しています。ただし、ROS 2のDDS通信でこのコンテキストが自動的に伝播するとは確認できません。ROS 2ノード、メッセージ、middleware、またはブリッジ側で接続方法を設計する必要があります。&lt;/p&gt;&#xA;&lt;p&gt;ROS 2には、LTTngとROS 2固有のtracepointを使い、ノード、通信、コールバック、executorなどを時系列で観測する &lt;code&gt;ros2_tracing&lt;/code&gt; があります。アプリケーション固有の前処理、推論、制御には追加の計測点を設けます。&lt;code&gt;rosbag2&lt;/code&gt; はROS 2のトピックメッセージを記録・再生する仕組みで、トレースとは異なり、入力や中間メッセージを再利用するための記録系です。&lt;/p&gt;&#xA;&lt;h2 id=&#34;計測する境界とデータフロー&#34;&gt;計測する境界とデータフロー&lt;/h2&gt;&#xA;&lt;p&gt;個別のspanまたはイベントとして、次の境界を計測します。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;センサー取得、ドライバ内のcapture&lt;/li&gt;&#xA;&lt;li&gt;middlewareへのpublishと受信&lt;/li&gt;&#xA;&lt;li&gt;キューへの投入・取り出し、callbackの開始・終了&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;/ul&gt;&#xA;&lt;p&gt;各記録には、ノード名、トピック名、入力・出力時刻、成功・失敗・期限超過などの状態も含めます。高頻度センサーのペイロードをトレースへ常時埋め込むのではなく、参照ID、ハッシュ、要約統計を置き、完全なデータは別の記録系で保持する構成が扱いやすくなります。&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;センサーからアクチュエータ応答までの各境界を、run_id、trace_id、span_id、シーケンス番号、処理状態、複数の時刻で相関させる設計を示します。&#34;&gt;flowchart LR&#xA;  A[&#34;センサー取得・ドライバcapture&#34;] --&gt; B[&#34;middleware publish&#34;]&#xA;  B --&gt; C[&#34;middleware受信&#34;]&#xA;  C --&gt; D[&#34;キュー投入・取り出し&#34;]&#xA;  D --&gt; E[&#34;callback開始・終了&#34;]&#xA;  E --&gt; F[&#34;前処理&#34;]&#xA;  F --&gt; G[&#34;推論&#34;]&#xA;  G --&gt; H[&#34;計画・ポリシー出力&#34;]&#xA;  H --&gt; I[&#34;制御計算・出力生成&#34;]&#xA;  I --&gt; J[&#34;アクチュエータ送信&#34;]&#xA;  J --&gt; K[&#34;アクチュエータ応答&#34;]&#xA;  M[&#34;共通の相関情報\nrun_id または episode_id\ntrace_id・span_id・親span\nシーケンス番号・処理状態&#34;] -.-&gt; A&#xA;  M -.-&gt; B&#xA;  M -.-&gt; C&#xA;  M -.-&gt; D&#xA;  M -.-&gt; E&#xA;  M -.-&gt; F&#xA;  M -.-&gt; G&#xA;  M -.-&gt; H&#xA;  M -.-&gt; I&#xA;  M -.-&gt; J&#xA;  M -.-&gt; K&#xA;  T[&#34;時刻の併記\nSteady Time: 経過時間\nROS Time: 再生・シミュレーション\nSystem Time: ホスト間相関&#34;] -.-&gt; A&#xA;  T -.-&gt; K&lt;/pre&gt;&lt;figcaption&gt;センサーからアクチュエータ応答までの各境界を、run_id、trace_id、span_id、シーケンス番号、処理状態、複数の時刻で相関させる設計を示します。&lt;/figcaption&gt;&lt;/figure&gt;&lt;h2 id=&#34;時刻を用途別に分ける&#34;&gt;時刻を用途別に分ける&lt;/h2&gt;&#xA;&lt;p&gt;遅延や経過時間の計測には、単調増加を前提とするSteady Timeを使います。シミュレーションや再生上の時系列にはROS Timeを使いますが、外部クロックやシミュレーション時間を扱える一方、クロック更新や時間のジャンプが起こり得ます。複数ホストの相関や人間向けの記録にはSystem Timeを併記します。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
