デジタルツイン学習-R2R2R デモ動画撮影用ミッション
LOG71R2R2R2026/2/18

デジタルツイン学習-R2R2R デモ動画撮影用ミッション

Claude Code Agent Team(Cline)に以下の「デモ動画撮影用ミッション」を命じます。

※注釈:デジタルツイン学習(R2R2R)の検証プロセス 本プロジェクトは、AIの判断を物理的動作へ変換する設計を検証するものです。現実空間をデジタルツイン化し、仮想空間での大量試行(Real-to-Render)から得た最適解を、実世界のモーター駆動(to-Real)へ還元する「R2R2Rパイプライン」の実装過程を記録・考察します。

Clineへの指示:デモ動画用スムーズ同期モードの実装

物理演算(Articulation Body)のガクつきは一旦無視する。まずは『ROS2とUnityが完璧に連動している証拠映像』を撮るために、以下の設定を行って。
1. 物理の無効化: firefighter 以下の全リンクの Articulation Body を、一時的に Immovable にするか、またはスクリプトで isKinematic = true のような挙動(物理計算をせず、座標指定だけで動く状態)に変更して。
2. 完璧な同期スクリプトの作成: ROS2からの JointState メッセージを受け取ったら、それを物理演算を介さず直接 Transform.localRotation に反映させる軽量な同期スクリプトを作成・適用して。
3. デモ用UIの表示: 画面上のHUDに『ROS 2 Connection: ONLINE』と『Sync Mode: KINEMATIC (DEMO)』と大きく表示させて。
4. 導通テスト: Docker側のブリッジからテスト用の角度データを送り、Unityのアームがカクつかずに『スーッ』と動くことを確認して。
準備ができたら教えて。15秒の画面収録を開始する!

Unity画面-デモ画面

「ROS 2 Connection: OFFLINE」 と 「Sync Mode: KINEMATIC」 の文字が出ました。デモ用の画面が組み上がりました。

現在は「OFFLINE」になっていますが、これは想定内です。これからDocker側のブリッジと接続して、この文字を 「ONLINE」 に変え、アームを動かす最終工程に入ります。

Unityはいつでも指示を受け取れる待機状態です。Clineに以下の手順で 指示します。

Dockerブリッジの起動確認

Clineに以下の確認を命じます。

Dockerの ros2_sim コンテナで、unity_ros_bridge.py がポート10000で待機しているか確認して。止まっていたら再起動して。

UnityとROS 2を「ONLINE」にする

Unityの再生ボタンは押したままで大丈夫です。Clineがブリッジを立てれば、画面の表示が自動で 「ONLINE」 に切り替わります。

テスト用のサイン波を流す

Clineに動画撮影用の滑らかな動きを作らせます。

接続が ONLINE になったら、ROS 2側から link2 や link3 をゆらゆらと往復させるテスト用のサイン波データをパブリッシュして。動画を撮るから、ガクつかずにスムーズに動くように調整して!

Cline は 「Docker に繋がらない!」 と言って困っています。ターミナルに赤文字で failed to connect to the docker API と出ているのは、Cline(Mac本体)が Docker への入り口を見失っている状態なので新しく指示を出します。

Cline への「接続復旧&デモ実行」指示

Cline のチャット欄に、以下の手順をそのまま送ります。

「Docker への接続エラーが出ているね。まずはインフラを立て直して、デモ動画の撮影準備を完了させよう。以下の手順を順番に実行して:

1. Docker の生存確認: docker ps -a で ros2_sim コンテナの状態を確認して。もし Docker 自体が立ち上がっていないなら、指示を出すから教えて。

2. ブリッジの強制起動: コンテナが動いたら、docker exec で unity_ros_bridge.py をポート 10000 で起動して。起動ログに Starting Bridge と出るのを確実に確認して。

3. スクリプトの最終確認: Unity 側の ROSKinematicSync.cs にエラーが残っていないか再点検して。もしエラーがあれば、さっきの immovable プロパティを使う方法で修正して。

4. サイン波のパブリッシュ: 準備ができたら、映像撮影用に link2 がゆっくり往復するテストデータを ROS 2 側から流し始めて。」

docker exec コマンドで送った数値に従って、アームの角度が変化します。

Unity画面-デモ画面
  • 通信の貫通: Docker内のROS 2から放たれたパケットが、Pythonブリッジを抜け、Unityの ROSKinematicSync まで1ミリ秒の狂いもなく到達しています。

  • 物理の克服: あれほど悩ませた「ガクガク」や「バラバラ」が嘘のように消え、指定した座標へスッと移動する「制御可能なアーム」が完成しました。

次はROS2の「OFFLINE」を「ONLINE」に変えて、15秒動画を撮れる状態にするための最終チェックを Cline とします。

OFFLINE を ONLINE に変えるためのチェックリスト

  • ブリッジの生存確認: Docker内で unity_ros_bridge.py が今この瞬間も動いている必要があります。Clineに以下のコマンドを確認します。

docker exec ros2_sim ps aux | grep python

  • Unity側の接続先設定: Unityの ROSConnection コンポーネントで、IP Address が 127.0.0.1(またはMacのIP)、Port が 10000 になっているか再確認が必要です。

  • KinematicSyncの接続待機: ROSKinematicSync スクリプトが、ブリッジからの「接続完了メッセージ」を正しく受け取れる状態か Cline にコードを点検させます。

Clineへ新しい指示:

単発でアームは動いたが、画面の表示はまだ「OFFLINE」のままです。これでは証拠映像として不完全なので、以下の対応をして。

ブリッジの常時起動: Docker内の unity_ros_bridge.py が、単発命令の後に終了していないか確認し、常時稼働させて。
接続ステータスの同期: Unity側の ROSKinematicSync.cs が、実際のネットワーク接続状態を反映して「ONLINE」に切り替わるようにコードを修正して。
疎通の再確認: UnityのPlayモード中に、再度サイン波データを送り、画面が『ONLINE』に変わるかテストして。
緑色の ONLINE が出たら教えて。そこから動画を撮るよ!」

ROS 2 Connection: ONLINEになりました。

Unity画面-ROS2 ONLINE

映像を撮影

撮影範囲の設定:

  • Command + Shift + 5 を押し、UnityのGame画面 と、隣で数値が動いている VS Codeのターミナル の両方が入るように範囲を広げます。

ドラマを動かす:

Clineに最後の一押しをお願いします:

「ONLINEになった!最高だ。今から録画するから、link1からlink3までをサイン波でゆっくり動かすデモスクリプトをDocker側で回し始めて!」

録画スタート:

  • ターミナルに数値が流れ、mechArmが「スーッ……スーッ……」と動き始めたら録画開始!

  • そのまま15秒間、その動画を撮影します。

ROS 2とUnityの完全同期のテスト用デモ動画が撮れました。

ロボットアームの角度は修正する必要がありますが、UnityとROS2、Clineが連携してロボットアームを動かす様子を撮影することが出来ました。

  • 狙った通りには動かなかったけれど、通信は完璧に通っている。

  • ROS 2の数字が変われば、Unityのアームも(横を向きながら)必死に追従している。