# ハエの運動場

[運動場を開く](../walk.html)

NeuroMechFlyの身体をMuJoCoで動かす、手動の歩行実験です。既存の音楽・お絵かき・会話で使うMaleCNS脳モデルは、このページではまだ接続していません。飛行も未実装です。

## 試し方

1. 「身体を読み込む」を押します。身体・脚の軌道・物理エンジンなどを約15 MB取得します。ログインや追加のインストールは不要です。
2. 「前へ」を選び、「計算を始める」を押します。指令は次の指令を選ぶまで続きます。
3. 「左へ」「右へ」で曲がり方を比べます。身体の向きは初期の前方を0°とし、左回りが正です。表示は−180°〜180°で折り返します。
4. 「歩行指令を止める」で左右の振幅目標をゼロへ戻します。脚の振幅は徐々に収束し、重力・慣性による身体の動きは続きます。「一時停止」は物理時間そのものを止めます。
5. 一時停止中は「0.1秒進める」で一定の物理時間だけ計算できます。表示される時間は実際の物理時間で、壁時計の経過時間ではありません。
6. 「初めから」で、表示されたシードを使って身体と制御器を初期化します。「指令と動きを保存」でJSONを取得できます。

運動場の中にフォーカスがある時は、W / A / D / Qで指令を選べます。運動場自体にフォーカスした状態ではSpaceで一時停止・再開できます。各ボタンは通常のTab・Enter・Space操作にも対応します。画面を離れると計算を休止します。

PC版Chromeを推奨します。目標は実時間の0.1倍速で、端末によってさらに遅くなります。30秒の物理時間で自動休止します。Mac・Safari・スマホ実機の動作はまだ確認していません。

## 何を動かしているか

左右の指令 → 6脚のCPG → 用意された脚の軌道 → 関節の目標角と接着 → MuJoCoの接触・剛体計算 → 身体の移動

CPGは脚の周期運動を作る発振器です。NeuroMechFly公式ブラウザ実装の制御器と、公式に生成された関節軌道を使っています。42の位置制御と6つの接着指令があり、物理時間の刻みは0.1 msです。前進は左右とも1、左旋回は左0.4・右1.2、右旋回は左1.2・右0.4、停止は左右とも0です。

身体の位置を直接書き換えるアニメーションではなく、脚の制御と床との接触から身体が動きます。ただし、身体モデルと既定の制御器による運動であり、全脳モデルによる運動の獲得や生物学的な正しさを証明するものではありません。前進指令も完全な直進を保証せず、偏りを実測値として表示します。

足元の点はMuJoCoの床との接触位置です。脚ごとの数字は接触点の数で、押す力の大きさではありません。床の目盛りは1 mmです。軌跡は20 msごとの胸部位置を床へ投影したものです。「開始位置からの距離」は開始位置との水平直線距離で、歩いた道のりとは異なります。

初期状態から床へ落ち着くまでの短い着地過程も計算に含まれます。ゼロ指令でも位置は少し変わります。転倒や計算の発散を防ぐ万能な姿勢制御ではありません。

## 記録と再現性

JSONにはモデルと各アセットの版・ハッシュ、初期シード、物理時間刻み、指令が変わったtick、20 msごとの実測値と48個のアクチュエーター指令、最終qpos・qvelが入ります。観測していない神経活動は記録しません。

同じシードに加えて、**同じ物理tickで同じ指令を与えること**が再現の条件です。手作業で同じ順にボタンを押しただけでは、切替時刻が異なるため同じ結果にはなりません。初期位相にはxorshift32を使い、描画の速さと物理の刻みを分離しています。同一Chrome内での再現性と、異なる端末・ブラウザでの数値一致は別に評価します。

JSONの読み戻し画面はまだありません。開発用の `tests/walk-browser.mjs` では、一定tickの指令列を再実行して実測結果を比較します。

## 出典と実装

- [NeuroMechFly / FlyGym](https://neuromechfly.org/) — 身体モデルと歩行制御
- [公式ブラウザ実装](https://github.com/NeLy-EPFL/flygym/tree/38c8ec61034cd59bc5ba0de20688d4a3c0000d60/wasm) — 取り込み元の固定版
- [MuJoCo](https://github.com/google-deepmind/mujoco) 3.9.0 — 物理計算
- [Three.js](https://github.com/mrdoob/three.js/tree/r169) 0.169.0 — このページだけで使う描画ライブラリ
- [ライセンスと変更箇所](../vendor/neuromechfly/NOTICE.md)、[取得ファイルとSHA-256](../public/embodied/manifest.json)

身体・制御器・MuJoCoはApache-2.0、Three.jsはMITです。元のslalomモデルは変更せず、衝突応答を持たないコースの飾りだけ描画時に隠しています。身体や関節は削減していません。FlyBodyとは別の身体モデルです。

ローカルでは `npm run prepare:body` で固定アセットを取得してから `npm start` で起動します。全配線データの準備は、この歩行ページ単独には不要です。ファイルは同じ配信元から取得し、外部のAIサービス・推論サーバーは使いません。

読む順序は `src/walk-ui.js`（操作と時刻）、`src/walk-model.js`（物理状態と記録）、`vendor/neuromechfly/controller.js`（脚の制御）、`src/walk-view.js`（実測姿勢の表示）です。
