<?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/%E5%AE%9F%E6%A9%9F%E3%83%AD%E3%82%B0/</link>
    <description>Recent content in 実機ログ on Physical AI Hub</description>
    <generator>Hugo</generator>
    <language>ja-jp</language>
    <lastBuildDate>Sat, 17 Oct 2026 13:08:07 +0900</lastBuildDate>
    <atom:link href="https://physicalaihub.net/tags/%E5%AE%9F%E6%A9%9F%E3%83%AD%E3%82%B0/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>ロボットのデジタルツイン実装：実機状態とシミュレーションを同期する設計原則</title>
      <link>https://physicalaihub.net/posts/robot-digital-twin-state-synchronization/</link>
      <pubDate>Sat, 17 Oct 2026 13:08:07 +0900</pubDate>
      <guid>https://physicalaihub.net/posts/robot-digital-twin-state-synchronization/</guid>
      <description>&lt;p&gt;デジタルツインの同期を「高頻度にすればよい」と考えると、ログの再現性や安全境界を見落としやすい点が気になります。&lt;/p&gt;&#xA;&lt;h2 id=&#34;結論同期周期は一つに統一しない&#34;&gt;結論：同期周期は一つに統一しない&lt;/h2&gt;&#xA;&lt;p&gt;ロボットのデジタルツインでは、すべてのデータを同じ周期で同期するのではなく、データクラスごとに同期粒度、更新トリガー、許容遅延、欠損時の動作を定義するのが基本です。&lt;/p&gt;&#xA;&lt;p&gt;関節位置・速度・トルク、ベース姿勢・速度、インターロックなど、制御や安全に直結する状態は、実機の制御・計測周期または状態変化イベントに近い粒度で扱います。環境・シーン、ロボット形状、質量や摩擦などのモデルパラメータ、劣化・保全情報は、状態変更、再キャリブレーション、保全イベント、モデル再同定などを契機に更新します。運用ログは最新値への上書きではなく、後から時系列を再現できる記録として保存します。&lt;/p&gt;&#xA;&lt;p&gt;つまり、問うべきなのは「何Hzで同期するか」だけではありません。何の時刻を表すデータか、どの値を正当な実機状態とみなすか、遅延や欠損が起きたときどう扱うかを、データクラス別の同期契約として明文化することが重要です。&lt;/p&gt;&#xA;&lt;h2 id=&#34;なぜ同期粒度が重要か&#34;&gt;なぜ同期粒度が重要か&lt;/h2&gt;&#xA;&lt;p&gt;ISO 23247は、製造要素、デジタルツイン、サービスや利用者の関係を整理する参照枠組みを示しています。一方で、すべてのロボットやデータに共通する同期周期を規定しているわけではありません。ロボットの制御周期、通信構成、シミュレータ、利用目的によって適切な粒度は変わります。&lt;/p&gt;&#xA;&lt;p&gt;また、文献によってデジタルモデル、デジタルシャドウ、デジタルツインの区分も異なります。一般には、実体からデジタル側への一方向のデータ連携と、デジタル側から実体への自動反映を含む双方向連携を区別します。監視のための読み取りと、実機へ影響を与える書き戻しを同じ経路で扱うと、権限や安全性の境界が曖昧になります。&lt;/p&gt;&#xA;&lt;h2 id=&#34;四つのデータクラスに分ける&#34;&gt;四つのデータクラスに分ける&lt;/h2&gt;&#xA;&lt;h3 id=&#34;制御安全状態&#34;&gt;制御・安全状態&lt;/h3&gt;&#xA;&lt;p&gt;関節状態、ベース状態、インターロックなどは、シミュレーションの状態推定や安全判断に直接影響します。値には取得時刻とシーケンス番号などの順序情報を付け、受信時刻だけで実機状態の時刻を表さないようにします。&lt;/p&gt;&#xA;&lt;p&gt;OPC UAのデータモデルにあるSourceTimestampとServerTimestampのように、値が生成された時刻とサーバーが受け付けた時刻を分ければ、通信遅延や到着順を分析できます。&lt;/p&gt;&#xA;&lt;h3 id=&#34;環境シーン情報&#34;&gt;環境・シーン情報&lt;/h3&gt;&#xA;&lt;p&gt;周囲の物体、作業空間、配置、経路などは、制御状態と同じ周期で送る必要があるとは限りません。配置変更やシーン再構成をイベントとして同期し、シミュレーション側では、どの時点の環境を表す情報かを保持します。&lt;/p&gt;&#xA;&lt;h3 id=&#34;モデル保全情報&#34;&gt;モデル・保全情報&lt;/h3&gt;&#xA;&lt;p&gt;ロボットの形状、質量、摩擦などのパラメータ、再キャリブレーション結果、劣化状態、保全履歴は、モデル再同定や保全イベントを更新トリガーにします。高頻度に送るより、変更理由、適用範囲、バージョンを管理する方が、検証と保全に向いています。&lt;/p&gt;&#xA;&lt;h3 id=&#34;運用ログ&#34;&gt;運用ログ&lt;/h3&gt;&#xA;&lt;p&gt;運用ログには、実機側の取得時刻、受信時刻、クロックの種類、シーケンス番号、通信状態、モデル・設定バージョンを残します。シミュレーション入力用のデータと、改変しない原記録を分離すれば、再生検証と監査に利用できます。&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、権威性を検査し、シミュレーション入力と改変しない原記録を分離する同期構成。&#34;&gt;flowchart LR&#xA;  subgraph Physical[&#34;実機&#34;]&#xA;    Sensor[&#34;センサー・計測&#34;]&#xA;    Controller[&#34;制御器&#34;]&#xA;    RobotState[&#34;関節・姿勢・トルク・安全状態&#34;]&#xA;    Scene[&#34;環境・シーン情報&#34;]&#xA;    Model[&#34;モデル・保全情報&#34;]&#xA;    Events[&#34;イベント・運用ログ&#34;]&#xA;    Sensor --&gt; RobotState&#xA;    Controller --&gt; RobotState&#xA;    Scene --&gt; Events&#xA;    Model --&gt; Events&#xA;    RobotState --&gt; Events&#xA;  end&#xA;&#xA;  subgraph Ingest[&#34;収集・記録&#34;]&#xA;    Collector[&#34;データ収集&#34;]&#xA;    Timestamp[&#34;時刻・順序付与\nSourceTimestamp / ServerTimestamp / シーケンス番号&#34;]&#xA;    RawLog[&#34;不変の原記録\n取得時刻・受信時刻・通信状態・版情報&#34;]&#xA;    Collector --&gt; Timestamp&#xA;    Timestamp --&gt; RawLog&#xA;  end&#xA;&#xA;  subgraph Gate[&#34;同期契約・判定&#34;]&#xA;    Contract[&#34;データクラス別の同期契約\n更新トリガー・鮮度上限・欠損時動作・権威性&#34;]&#xA;    QoS[&#34;QoS判定\nReliability・Deadline・Durability・History・Liveliness&#34;]&#xA;    Freshness[&#34;鮮度・順序・版の検査&#34;]&#xA;    Contract --&gt; QoS --&gt; Freshness&#xA;  end&#xA;&#xA;  subgraph Twin[&#34;シミュレーション&#34;]&#xA;    SimInput[&#34;シミュレーション入力&#34;]&#xA;    SimTime[&#34;シミュレーション時刻&#34;]&#xA;    Sim[&#34;デジタルツイン&#34;]&#xA;    SimInput --&gt; SimTime --&gt; Sim&#xA;  end&#xA;&#xA;  RobotState --&gt; Collector&#xA;  Scene --&gt; Collector&#xA;  Model --&gt; Collector&#xA;  Events --&gt; Collector&#xA;  Timestamp --&gt; Contract&#xA;  Timestamp --&gt; RawLog&#xA;  Freshness --&gt; SimInput&#xA;  RawLog --&gt; Replay[&#34;再生・監査・再現検証&#34;]&#xA;  Sim --&gt; CommandGate[&#34;コマンドゲート\n認証・認可・妥当性検査・範囲制限・監査&#34;]&#xA;  CommandGate -. &#34;双方向反映が必要な場合のみ&#34; .-&gt; Controller&lt;/pre&gt;&lt;figcaption&gt;データクラスごとに時刻、順序、鮮度、QoS、権威性を検査し、シミュレーション入力と改変しない原記録を分離する同期構成。&lt;/figcaption&gt;&lt;/figure&gt;&lt;h2 id=&#34;時刻と実行方式を分ける&#34;&gt;時刻と実行方式を分ける&lt;/h2&gt;&#xA;&lt;p&gt;シミュレーション時刻は壁時計時刻と同一ではありません。ROS 2ではシステム時刻、安定した経過時間を扱う時刻、ROS時刻を区別でき、シミュレーション時には&lt;code&gt;/clock&lt;/code&gt;でROS時刻を提供できます。ROS時刻は一時停止、速度変更、時刻ジャンプの影響を受けるため、受信時刻や単調増加する経過時間と混同しない設計が必要です。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Sim-to-Realの性能劣化を分解する：物理パラメータ・センサー・制御の補正手順</title>
      <link>https://physicalaihub.net/posts/sim-to-real-performance-gap-diagnosis/</link>
      <pubDate>Sat, 14 Feb 2026 00:12:29 +0900</pubDate>
      <guid>https://physicalaihub.net/posts/sim-to-real-performance-gap-diagnosis/</guid>
      <description>&lt;p&gt;シミュレーション上の成功が実機で崩れるとき、物理モデルだけを疑う前に、ログと時間の整合性を確認したくなります。&lt;/p&gt;&#xA;&lt;h2 id=&#34;先に結論&#34;&gt;先に結論&lt;/h2&gt;&#xA;&lt;p&gt;Sim-to-Realで性能が落ちたとき、いきなり摩擦や質量を調整するのは得策ではありません。まず単位、座標系、アクションスケール、時刻、制御周期などのインターフェースを確認し、次にセンサーと遅延、アクチュエータと低レベル制御、剛体・運動学、接触・環境の順で補正します。その後、残る不確実性に対してダイナミクスランダム化、実機データによる分布更新、オンライン適応、方策の再調整を検討します。&lt;/p&gt;&#xA;&lt;p&gt;この順序は、すべてのロボットやタスクで保証された標準手順ではありません。各段階で学習に使っていない実機ログを検証し、残差のパターンが変わったかを確認することが前提です。&lt;/p&gt;&#xA;&lt;h2 id=&#34;なぜ原因分解が必要か&#34;&gt;なぜ原因分解が必要か&lt;/h2&gt;&#xA;&lt;p&gt;実機で方策が失敗すると、物理モデルが間違っていると考えがちです。しかし性能差は、観測・レンダリング、時間同期と通信遅延、アクチュエータと低レベル制御、剛体・接触ダイナミクス、環境分布、方策の汎化誤差に分かれます。複数の要因が同じ軌道誤差を生むこともあるため、単一種類のログだけではパラメータを一意に決められない場合があります。&lt;/p&gt;&#xA;&lt;p&gt;たとえば、定常的な位置や角度のずれはゼロ点や座標系、位相遅れはタイムスタンプ・通信・制御遅延、自由空間での振幅差はゲイン・摩擦・慣性を優先的に疑います。接触時の衝撃や滑りは摩擦、剛性、接触形状の不一致と結び付きやすく、視覚入力時だけ失敗するならカメラやレンダリング分布の差を調べます。&lt;/p&gt;&#xA;&lt;h2 id=&#34;まず確認する用語&#34;&gt;まず確認する用語&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;システム同定&lt;/strong&gt;は、実機の入力と状態のログから、質量、摩擦、遅延などのモデルパラメータを推定する考え方です。&lt;strong&gt;ダイナミクスランダム化&lt;/strong&gt;は、質量、摩擦、モーター出力などをエピソードごとに変化させ、単一モデルへの過適合を避ける方法です。視覚系ではテクスチャ、照明、カメラ姿勢、背景、オブジェクト配置などを変化させます。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;オンライン適応&lt;/strong&gt;は、実機の履歴から環境やダイナミクスの潜在状態を推定し、方策を適応させる方法です。固定パラメータの精密化だけでは扱いにくい、時間変化する差への選択肢になります。&lt;/p&gt;&#xA;&lt;h2 id=&#34;実機データでの補正手順&#34;&gt;実機データでの補正手順&lt;/h2&gt;&#xA;&lt;h3 id=&#34;1-ログとインターフェースを監査する&#34;&gt;1. ログとインターフェースを監査する&lt;/h3&gt;&#xA;&lt;p&gt;最初に、単位、座標系、アクションのスケール、飽和処理、ログ時刻、制御周期をそろえます。センサー、制御入力、状態推定、時刻情報は同一試験単位で保存し、後から再生できる形にします。ROS 2では&lt;code&gt;ros2 bag&lt;/code&gt;に指定トピックを記録・再生できます。&lt;/p&gt;&#xA;&lt;p&gt;ここが崩れていると、後段で物理パラメータを調整しても、入力と観測の対応がずれたままになります。まず再生ログとシミュレーションの入出力インターフェースが一致するかを確認します。&lt;/p&gt;&#xA;&lt;h3 id=&#34;2-センサー座標系時間を合わせる&#34;&gt;2. センサー、座標系、時間を合わせる&lt;/h3&gt;&#xA;&lt;p&gt;センサーのバイアス、ゼロ点、外部パラメータ、ノイズ、観測遅延を調べます。視覚入力を使う場合は、テクスチャ、照明、カメラ姿勢、背景、物体配置の差も対象です。実機画像に近い観測分布を作るだけでなく、視覚以外の状態推定値についても、シミュレーションと同じ前処理になっているか確認します。&lt;/p&gt;&#xA;&lt;h3 id=&#34;3-アクチュエータと低レベル制御を合わせる&#34;&gt;3. アクチュエータと低レベル制御を合わせる&lt;/h3&gt;&#xA;&lt;p&gt;指令値が同じでも、モーターの応答、トルク制限、内部制御器、フィルタ、遅れによって実際の運動は変わります。脚ロボットなどでは、アクチュエータモデルをシミュレーションに含めることが、剛体パラメータを合わせることとは別の補正対象になります。&lt;/p&gt;&#xA;&lt;h3 id=&#34;4-剛体運動学を調整する&#34;&gt;4. 剛体・運動学を調整する&lt;/h3&gt;&#xA;&lt;p&gt;質量、重心、慣性、関節減衰などを確認します。重力姿勢や自由空間の運動を使い、剛体モデルと運動学の誤差を切り分けます。MuJoCoのモデル定義では、ボディ、関節、アクチュエータ、センサー、接触・摩擦関連の要素を個別に設定でき、パラメータをカテゴリ別に管理する際の参照になります。&lt;/p&gt;&#xA;&lt;h3 id=&#34;5-接触と環境を調整する&#34;&gt;5. 接触と環境を調整する&lt;/h3&gt;&#xA;&lt;p&gt;接触時だけ残差が増える場合は、摩擦、接触剛性、反発、接触形状、床など環境側の条件を調べます。自由空間の運動が合っていても、接触ダイナミクスがずれていれば、滑りや衝撃を再現できません。&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;実機ログに現れる残差パターンを手掛かりに、優先して確認する原因カテゴリを切り分ける。&#34;&gt;flowchart LR&#xA;  A[&#34;実機で性能劣化&#34;] --&gt; B[&#34;残差パターンを観測&#34;]&#xA;  B --&gt; C[&#34;定常的な位置・角度オフセット&#34;]&#xA;  B --&gt; D[&#34;位相遅れ&#34;]&#xA;  B --&gt; E[&#34;自由空間での振幅差&#34;]&#xA;  B --&gt; F[&#34;接触時の衝撃・滑り&#34;]&#xA;  B --&gt; G[&#34;視覚入力時だけの失敗&#34;]&#xA;  B --&gt; H[&#34;時間変化する差&#34;]&#xA;  C --&gt; C1[&#34;ゼロ点・座標系・初期姿勢&#34;]&#xA;  D --&gt; D1[&#34;時刻・通信・制御遅延&#34;]&#xA;  E --&gt; E1[&#34;ゲイン・摩擦・慣性・アクチュエータ&#34;]&#xA;  F --&gt; F1[&#34;摩擦・剛性・接触形状・環境&#34;]&#xA;  G --&gt; G1[&#34;カメラ・レンダリング分布・前処理&#34;]&#xA;  H --&gt; H1[&#34;オンライン適応・履歴からの状態推定&#34;]&lt;/pre&gt;&lt;figcaption&gt;実機ログに現れる残差パターンを手掛かりに、優先して確認する原因カテゴリを切り分ける。&lt;/figcaption&gt;&lt;/figure&gt;&lt;h3 id=&#34;6-不確実性と方策を扱う&#34;&gt;6. 不確実性と方策を扱う&lt;/h3&gt;&#xA;&lt;p&gt;点推定したモデルで実機を再現できない場合は、同定値の周囲に不確実性を持たせたダイナミクスランダム化を行います。実機ロールアウトとシミュレーション軌道の差を使い、ランダム化分布やシミュレーションパラメータを更新する方法もあります。それでも時間変化する差が残るなら、オンライン適応や残差方策を追加し、最後に方策自体を再調整します。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
