Greymouth · West Coast · South Island · NZ — 8 Julai 2026

GREYMOUTH

Projek R&D fizik: Active Ragdoll kelas Euphoria yang berjalan lightweight dalam browser — Three.js + physics WASM + neural policy dilatih di GX10. Dinamakan sempena bandar tempat idea ini lahir.

Buka Explainer penuh → Tip: mana-mana term bergaris titik boleh diklik untuk penerangan segera.

LaluanML (RL motion imitation)
RenderingThree.js (boleh custom/fork)
Training rigGX10 (GB10 ARM, DGX Spark class)
RuntimeBrowser — WASM physics + ONNX policy
ConsumersLANGGAR · cospace

Status Semasa kemaskini 17 Julai 2026 (hari ke-10 projek)

Papan pemuka progress — dikemaskini setiap sesi. Kedudukan ringkas: P0 & P1 SIAP · L1 SIAP · L2 GRADUATE 18 Jul — tahan tolakan 0.6 m/s SEMUA arah (depan/kiri 1.0, kanan 0.8). Visual kini avatar mannequin + Standard Idle + jari hidup. Training baru sahaja berpindah ke DGX Spark MSI (mesin Neo) — GX10 bersara dari projek ini. Operator training seterusnya: Neo.

Milestone Progress · ✗ merah = kegagalan (hover utk detail) · ✓ hijau = kegagalan yang dah dibaiki · bar emas berdenyut = sedang berjalan

KESELURUHAN PROJEK — idea → library kelas Euphoria (ladder LOCK di L4)L2 ✅ GRADUATE 18 Jul · L3 berjalan: +4-7 hari · L4 bangun: +3-5 hari
78%
P0 — Spikes de-risk (6/6) + Gate 0✅ SIAP 9 Jul (jangkaan: 1-2 minggu · sebenar: 2 hari)
100%
P1 — Badan manusia kita (rig builder + skin)✅ SIAP 9 Jul (jangkaan: 1 minggu · sebenar: 1 hari)
100%
P2 — Training otak (L1 ✅ browser · L2: 8/8 gerakan termasuk brek+undur+sisi, kick 1.0 m/s 3/4 arah)🎓 L2 GRADUATE 18 Jul (kanan 0.4→0.8 @ Spark) · L3 seterusnya
85%
Kurikulum L2 kini 8 gerakan (52.6s): standing, Standard Idle, busy, walking, hit_recover (brek), walking backward, strafe kiri/kanan. Benchmark kick 4-arah rasmi jadi kayu ukur graduate. Run greymouth_L2V3C warm-start berterusan — kini di DGX Spark.
P3 — Export + sim2sim gauntlet🔵 pertempuran aktif: gap Isaac→MuJoCo (ubat dua-serampang jalan)
65%
Gate 3 LULUS — risiko #1 (R1) mati: training kini atas fizik SAMA dengan browser (Newton/MuJoCo-GPU). Export→native→browser jadi rutin harian (parity terbukti berulang kali).
P4 — Browser runtime + demo public🔵 anggaran Gate 4: ~13-14 Jul
40%
Siap: viewer fizik+otak+skin @60fps, interaksi usik/tolak. Baki: Web Worker, perf pass phone, deploy greymouth.lantodak.com
P5 — Behaviors kelas Euphoria (brace/stumble/MaskedMimic/library)⚪ anggaran mula: minggu depan · LANGGAR-ready: ~akhir Julai
0%
  • Sejarah kegagalan penuh (8 ✗, semua dah dibaiki ✓):
  • 9 Jul — run klasik obs tak serasi deployment → config BM dari awal
  • 10 Jul — data gerakan rosak (FKerr 0.93m) → FK MuJoCo recompute
  • 10 Jul — resipi biar otak malas T-pose → penguatkuasa jejak
  • 10 Jul — gate 0.25 terlalu ketat → 0.5 (curriculum)
  • 10 Jul — v4 klon senyap → fail baru + verify pre-masak
  • 10 Jul — 4 zombie GPU (SIGTERM ditelan) → kill -9 + watchdog cron 10-min
  • 10 Jul — getting-up heret training → menu fokus 4 gerakan
  • 10 Jul — "misteri export" ditutup: probe kawalan G1 sahkan pipeline bersih

MVP Ladder — kedudukan sekarang

TanggaStatus
L1 — BERDIRITERCAPAI idle natural (Standard Idle) dlm browser, jari hidup, blend kosmetik
L2 — MELAWAN✅ GRADUATE 18 Jul 8/8 gerakan; kick semua arah 0.6 m/s (depan/kiri 1.0, kanan 0.8) — verify native + browser real-time
L3 — BERJALANSETERUSNYA perlukan clip walk mannequin-baked + React From Front
L4 — BANGUNDIRANCANG clip getting-up bersih (teknik trim sama)
L5 — BERLAKONDIPOTONG (keputusan scope 13 Jul — L4 = 90% persepsi Euphoria)

Sedang jalan SEKARANG (17 Jul)

  • 🚚 MIGRASI KE DGX SPARK (17 Jul): training berpindah dari GX10 ke MSI EdgeXpert DGX Spark (mesin Neo) — node share Tailscale, persekitaran dibina semula ikut SOP, resume dari checkpoint sama. Operator training seterusnya: Neo. GX10 bebas untuk OPENCOMM.
  • 🎓 L2 GRADUATE (18 Jul): Benchmark kick 4-arah LULUS — semua arah tahan 0.6 m/s (depan/kiri 1.0, kanan melonjak 0.4→0.8 selepas ~640 epoch di DGX Spark). Verify dalam browser real-time: 4/4 survive + berdiri 45s. Otak graduate dah dalam viewer, turut live untuk Neo di greymouth.todak.io/viewer.
  • 🏅 L2 hampir graduate (17 Jul): 8/8 gerakan pass — termasuk skill BREK (berhenti selepas melangkah), langkah undur & sisi. Benchmark kick 4-arah: depan/kiri/belakang tahan 1.0 m/s, kanan 0.4 (data cermin baru masuk, sedang menyusul). Demo browser: tolak avatar dari mana-mana arah → dia melangkah, brek, sambung idle.
  • 🏆 OTAK GRADUATE (10 Jul 22:26): greymouth_L3_focus tamat 200M langkah — success 100% semua 4 gerakan dlm Isaac (ralat purata 0.12). Jumlah kegagalan dibaiki sepanjang perjalanan kini: 15+ (lihat penanda pada bar).
  • ⚔️ PERTEMPURAN TERAKHIR — gap Isaac→MuJoCo (risiko #1 ramalan research): otak 100% dlm Isaac = 25% dlm MuJoCo. Bonus penemuan: demo gen-1 "berdiri" selama ni ditopang bug spring-gear, bukan otak — browser kini jalankan fizik jujur buat pertama kali (gains per-DOF dari ONNX + gear=1).
  • Kemaskini 11 Jul petang — pertempuran berterusan, hipotesis dinipiskan: DR-Isaac sahaja ✗ (native tetap jatuh), tombol deployment ✗ (9 kombo diuji), kaki kapsul ✗ (rupanya dah kotak). Newton/MuJoCo-GPU (bakal turbo 500x) di-park selepas 6 patch — fizik NaN perlukan sesi khusus. Trek aktif: demo-run v2 (fine-tune lembut dlm MuJoCo, fokus berdiri-natural) + focusdr (Isaac, 100% @ 3,200 epoch). Anggaran disemak: demo natural bergantung Newton/demo-run — 1-2 hari; suspek fizikal berbaki: semantik sendi 3-hinge vs D6, parameter kontak.

00Verdict Research

Deep research 8 Jul 2026 — 105 agent, 23 sumber primer, 111 claim, 25 claim di-verify adversarial (3 undi setiap satu): 21 confirmed, 4 killed. Kesimpulan: architecture SAH boleh jadi, dengan beberapa correction penting di bawah.

CONFIRMED 3-0

Jangan bina RL dari kosong — bina atas NVIDIA ProtoMotions (MaskedMimic). Apache-2.0, aktif (commit 2–6 Jul 2026 oleh author MaskedMimic sendiri). Satu unified controller untuk keyframe, teks, objek & sparse tracking — tanpa reward engineering per-task. Gantikan keperluan train DeepMimic/AMP berasingan.

CONFIRMED 3-0

Training di GX10 confirmed jalan. Isaac Lab RL verified di GB10/DGX Spark sejak Okt 2025 — TAPI mesti guna branch yang support Spark (era release/2.3.0; check mainline terkini). Branch salah = nvrtc invalid --gpu-architecture (GB10 = sm_121, PyTorch pinned tak kenal). Fix = tukar branch, bukan driver. Rujukan Arm: ~65K sim steps/sec PPO untuk humanoid 19-DOF di satu Spark.

CONFIRMED — BAHAYA

Physics-engine domain gap adalah risiko #1 projek ni. Zero-shot transfer Isaac→MuJoCo boleh jatuh sampai success rate 0.036 (PolySim). Mitigasi terbukti (Humanoid-Gym — survive sampai sim-to-real robot sebenar): action space = PD joint-position targets (bukan raw torque) + domain randomization + multi-simulator training + sim2sim validation harness sebelum ship.

CONFIRMED 2-1 — GOTCHA

Rapier.js ada PD motor (position+velocity target) — tapi HANYA pada joint 1-DOF (revolute/prismatic). Spherical motor dah dibuang sejak 0.12.0-alpha — dokumentasi rasmi pun stale. Bahu/pinggul 3-DOF kena: (a) compose 3 revolute joints, atau (b) manual PD torque via applyTorqueImpulse. Gotcha kedua: configureMotorModel (AccelerationBased vs ForceBased) tukar UNIT stiffness/damping.

REFUTED 0-3

ProtoMotions TIDAK export ONNX siap-pakai (dengan observation computation baked-in). Laluan export → onnxruntime-web kena kita bina dan verify sendiri, termasuk reimplement observation vector dalam JS supaya match Python bit-by-bit.

LICENSING TRAP

Produk komersial TAK BOLEH ship policy yang dilatih atas AMASS/SMPL. Kod ProtoMotions Apache-2.0 (OK), tapi DATA: AMASS = non-commercial research only, SMPL = terma Max Planck non-commercial, LAFAN1 = CC BY-NC. Strategi: prototype guna AMASS, tapi versi ship (LANGGAR jual duit) kena retrain atas mocap berlesen komersial — Mixamo (verify terma untuk ML training) / mocap sendiri / dataset CC-BY.

TAK DI-VERIFY

3 paksi TIADA data verified — browser inference latency (onnxruntime-web), prior art (takde sesiapa confirmed dah buat RL active-ragdoll dalam browser — tapi absence of claim ≠ evidence of absence), dan performance Three.js/WebGPU/worker-physics. Semua ni jadi SPIKE wajib dalam Phase 0 — bukti tangan sendiri, bukan andaian.

PELUANG

MuJoCo dah ada port WASM rasmi + community (google-deepmind/mujoco/wasm, zalo/mujoco_wasm, playground.mujoco.org). Kalau kita train dalam MuJoCo dan deploy MuJoCo-WASM dalam browser → domain gap = SIFAR. Trade-off: saiz bundle & speed vs Rapier belum diukur — ini keputusan Gate 0.

01Architecture & Flow

Dua dunia: Latihan (berat, sekali-sekala, di GX10) dan Runtime (ringan, setiap frame, dalam browser). Yang merentas dua dunia tu cuma satu fail kecil: neural policy (~ratusan KB ONNX).

Data
Mocap ClipsMixamo (komersial-safe) / AMASS (prototype je). Retarget ke skeleton kanonik kita.
GX10 · Latihan
ProtoMotions + Isaac Lab / MuJoCoMaskedMimic/motion-tracker, PD-target action space, domain randomization, ribuan env selari atas GPU.
GX10 · Semakan
Sim2Sim HarnessPolicy diuji dalam engine DEPLOYMENT (headless Rapier Rust / MuJoCo) sebelum lepas. Gate wajib.
▼   export ONNX (bina sendiri — obs computation match bit-by-bit)   ▼
Browser · 30Hz
Policy (onnxruntime-web)MLP kecil 2–4 layer. Input: state badan (pose, velocity, contact). Output: PD joint targets.
Browser · 60Hz
Physics WASM (Rapier / MuJoCo-WASM)Articulated humanoid ~20 DOF. Motor PD pegang target dari policy. Idealnya dalam Worker + SharedArrayBuffer.
Browser · 60fps
Three.js RendererPhysics pose → bone transforms → skinned mesh (pipeline Mixamo cospace kita). Boleh fork/custom kalau perlu.

Keputusan dikunci

Nama: GREYMOUTH Laluan B: ML ProtoMotions/MaskedMimic base PD-target action space Sim2sim gate wajib Three.js rendering Policy 30Hz / Physics 60Hz Repo: BroLanTodak/greymouth

Keputusan TERTANGGUH (Gate 0)

Engine browser: Rapier.js vs MuJoCo-WASM Backend inference: WASM-SIMD vs WebGPU Isaac Lab vs MuJoCo untuk training 3-DOF joints: composed revolute vs manual PD

Semua ni diputuskan dengan NOMBOR dari spike Phase 0 — bukan dengan rasa.

01.5MVP Ladder & Design-untuk-Expand (baru dalam v1.1)

Dua prinsip yang ditambah selepas kritikan plan v1.0: menang paling kecil ditakrifkan dengan jelas, dan setiap keputusan design dibuat supaya GREYMOUTH boleh berkembang jadi platform, bukan sekadar satu demo.

MVP Ladder — tangga menang, dari paling kecil

Setiap anak tangga ialah kemenangan LENGKAP yang boleh ditunjuk dan dikongsi. Kalau projek berhenti di mana-mana tangga, kita tetap ada sesuatu yang belum wujud kat internet. JANGAN kejar tangga 3 sebelum tangga 1 solid.

TanggaKeupayaanNilai kalau berhenti di sini
L1 — BERDIRIBalance statik: watak berdiri, lawan graviti + hingar kecilBukti konsep penuh pipeline GX10→browser. Dah boleh demo
L2 — MELAWANPush-recovery: ditolak → terhuyung → recover. Tanpa berjalan"Euphoria moment" pertama — demo viral, first-of-its-kind web
L3 — BERJALANLocomotion + boleh diarah (WASD/target)Boleh guna dalam game sebenar (cospace roaming)
L4 — BANGUNGetup dari terlentang/meniarap; kitaran jatuh-bangun penuhCukup untuk LANGGAR fight loop
L5 — BERLAKONMaskedMimic: brace, stumble directional, boleh diarah sparse goalsKelas Euphoria penuh — produk/library

Prinsip platform (buat dari hari pertama, kos rendah)

  • Physics Adapter API: runtime TAK cakap terus dengan Rapier — cakap dengan interface (step / setTargets / getState). Rapier, MuJoCo-WASM, Jolt = plugin boleh tukar.
  • Rig JSON = spec generik: mana-mana hierarchy tulang + DOF, bukan hardcode humanoid. Esok: kuda, anjing, monster, dinosaur — creature active-ragdoll lagi jarang & bernilai dari humanoid.
  • Policy Zoo: setiap otak = artifact bernama + versi + manifest (stand-v1.onnx, walk-v2.onnx, zombie-v1.onnx). GREYMOUTH jadi "perpustakaan perangai" — bukak model bisnes policy-pack untuk web-game devs.

Trek expand masa depan (backlog, bukan sekarang)

  • Video-to-motion: jana mocap sendiri dari video biasa (pose estimation) — 100% licensing-bersih + boleh rakam gerakan unik (silat untuk LANGGAR). Data jadi moat kita.
  • Open-source runtime + demo viral: reputasi & komuniti; LANGGAR kekal dapat teknologi eksklusif di lapisan atas.
  • Telemetry demo: FPS/device anonim dari pengunjung = data perf percuma beribu device.

02Phases

6 fasa + 1 opsyenal. Setiap fasa ada Gate — kriteria keluar yang boleh diukur. Jangan lompat gate; setiap gate direka untuk tangkap failure mode yang research dah kenal pasti. Checklist di bawah boleh di-tick — progress disimpan dalam browser (localStorage). Nota timeline (v1.1): anggaran masa di bawah ialah realistik ×2 dari anggaran optimis — RL debugging memang perlahan; masuk bulan kedua BUKAN tanda projek gagal. Peraturan momentum: setiap sesi GREYMOUTH mesti tamat dengan sesuatu yang boleh ditunjuk (video / demo / graf).

P0

Spikes — De-risk Semua Unknown1–2 minggu · Jawab semua soalan yang research tak dapat jawab, dengan kod sebenar

  • Spike A — Inference latency: onnxruntime-web + MLP dummy (256×256, obs~100, act~20). Ukur ms/inference WASM-SIMD vs WebGPU di MacBook + phone mid-range. Sasaran: <2ms @ 30Hz.
  • Spike B — Rapier humanoid stability: bina ragdoll ~20 DOF guna composed revolute joints (workaround spherical-motor-takde). Uji: jatuh, tindih, 4× substep. Ukur ms/step & kestabilan (letupan joint? jitter?).
  • Spike C — MuJoCo-WASM eval: load zalo/mujoco_wasm / port rasmi, humanoid.xml standard. Ukur saiz bundle (gzip), ms/step, API ergonomics vs Rapier.
  • Spike D — GX10 training smoke test: install Isaac Lab branch Spark-compatible (check dulu kalau mainline dah merge support — issue #3761), run PPO humanoid contoh. Sahkan takde sm_121 nvrtc error, catat steps/sec.
  • Spike E — ProtoMotions setup: clone, pilih simulator backend yang jalan di ARM (MuJoCo CPU / Newton / IsaacLab), run training kecil 1 clip. Faham format checkpoint & struktur observation.
  • Spike F — PRETRAINED-BRAIN GAUNTLET (de-risk #1, baru v1.1): guna pretrained SMPL checkpoint ProtoMotions (non-komersial = OK untuk spike) dan angkut dia melalui SELURUH jambatan: checkpoint → export ONNX → onnxruntime-web → drive humanoid dalam engine browser. Tak perlu cantik — perlu BUKTI jambatan tu wujud. Kalau otak siap orang lain boleh sampai ke browser, baru berbaloi train otak sendiri (P2). Kalau tak boleh, kita tahu SEKARANG, bukan selepas 3 minggu training.
  • Prior-art scan tangan sendiri: cari & cuba demo RL-ragdoll browser sedia ada (three.js forum thread active-ragdoll, mjswan, SimbiconJS, SIMBICON-Web). Kalau ada yang boleh jadi base — nilai sebelum tulis sendiri.
  • Verify terma Mixamo untuk kegunaan ML training data (licensing trap AMASS).
  • Setup repo BroLanTodak/greymouth — struktur: /train (GX10, Python), /web (Three.js runtime), /spikes, /docs.
GATE 0: Jadual nombor siap (latency, ms/step, bundle size, steps/sec) + Spike F membuktikan jambatan checkpoint→browser wujud → KUNCI keputusan: engine browser, backend inference, framework training. Kalau Rapier tak stabil DAN MuJoCo-WASM terlalu berat → pertimbang laluan hybrid (lihat Failure P0).

Expected Failures — P0

FailureSignalHandle
Rapier composed-revolute meletup pada 20 DOFJoint jitter/NaN dalam Spike BNaikkan substeps → cuba manual PD torque atas spherical joint (tanpa motor) → kalau masih fail, MuJoCo-WASM jadi engine utama
MuJoCo-WASM bundle terlalu besar utk "lightweight">5MB gzip dalam Spike CTerima Rapier + mitigasi gap penuh; MuJoCo-WASM kekal sebagai sim2sim harness sahaja (dev-time, bukan ship)
GX10 branch error / PhysX GPU issue di ARMnvrtc sm_121 error / PhysX warningTukar ke branch Spark-supported; fallback training backend = MuJoCo (CPU 20-core GB10) via ProtoMotions — lambat tapi jalan
Inference >2ms di phoneSpike A numbersKecilkan network (128×128), quantize int8, turunkan policy ke 15Hz dengan interpolasi target
Ada prior art yang dah solve semua niPrior-art scanBUKAN failure — jackpot. Nilai license, build atas dia, jimat berbulan
P1

Rig Builder + Passive Ragdoll1 minggu · Avatar Mixamo jatuh dengan cantik dalam browser — asas semua benda lain

  • Skeleton kanonik GREYMOUTH: tetapkan ~19–23 DOF (pelvis root, spine, kepala, 2×lengan 4DOF, 2×kaki 6DOF) — SATU skeleton untuk training & runtime. Ini kontrak paling penting projek ni.
  • Rig builder auto: Mixamo GLB → capsule per bone (dimensi dari mesh bounds) + joint + limit realistik + mass distribution (jadual antropometrik).
  • Physics→skin binding: rigid body pose → bone world transform → skinned mesh Three.js. Guna ilmu pipeline avatar cospace (bone-prefix normalize, scale 1.75 kanonik).
  • Demo passive: avatar jatuh dari udara, kena tembak kotak, jatuh tangga. Slider mass/friction/damping untuk tuning.
  • Debug view: toggle wireframe capsules + joint axes + contact points. (Kita akan pakai ini beribu kali.)
  • Export rig definition sebagai JSON (dimensi, mass, limits) — fail SAMA dibaca oleh training env di GX10. Single source of truth. (v1.1) Design spec GENERIK — mana-mana hierarchy tulang + DOF, humanoid cuma kes pertama.
  • (v1.1) Physics Adapter API: semua kod runtime cakap dengan interface (step / setTargets / getState), BUKAN terus dengan Rapier. Engine kedua (MuJoCo-WASM) mesti boleh dipasang tanpa ubah kod atas.
GATE 1: Passive ragdoll stabil 60fps desktop / 30fps phone, takde jitter bila rest, rig JSON dipersetujui sebagai kontrak training↔runtime.

Expected Failures — P1

FailureSignalHandle
Ragdoll menggeletar masa restJitter visual bila baringNaikkan solver iterations/substeps, tambah joint damping, sleep threshold; jangan tune mass ikut rasa — guna jadual antropometrik
Capsule auto-fit pelik (tangan gemuk, leher panjang)Debug viewOverride manual per-bone dalam rig JSON; auto = default, bukan hukum
Skin mengikut physics nampak "tercabut"Mesh renggang dari capsuleBetulkan bind pose offset per bone; ini bug matriks, bukan bug physics — isolate dengan render capsule dulu
P2

Training Stack di GX104–6 minggu realistik · Ikut MVP ladder: L1 berdiri dulu, baru L2 melawan, baru L3 berjalan

  • Bina env humanoid GREYMOUTH dalam ProtoMotions dari rig JSON P1 (bukan SMPL default — skeleton KITA).
  • Retarget 3–5 clip Mixamo (idle, walk, getup) ke skeleton kanonik. Mulakan KECIL — bukan full AMASS (48 A100-GPU-hours ≈ berminggu-minggu di GB10).
  • (v1.1) L1 dulu — BALANCE POLICY sahaja: berdiri statik + lawan hingar. 10× lebih senang dari berjalan, dan cukup untuk validate seluruh loop training. Jangan sentuh walk sebelum ni solid.
  • L2–L3 — train motion-tracker (DeepMimic-style dulu, MaskedMimic kemudian): action = PD targets, reward = pose/vel matching. Sasaran: idle+walk tracked >90% success dalam sim.
  • (v1.1) Benchmark harness automatik: suite tolakan standard (8 arah × 100/200/300N) yang keluarkan success rate + skor recovery. SEMUA policy dinilai dengan suite sama — banding guna nombor, bukan "nampak ok".
  • (v1.1) Jadual GX10 vs Rokiah/OPENCOMM: training berhari-hari akan bergaduh memory/GPU dengan qwen Ollama. Tetapkan: training window (malam?), auto-unload model, atau kesanggupan sewa cloud GPU spot untuk run besar.
  • Domain randomization ON dari hari pertama: friction 0.1–2.0, motor strength ±20%, mass ±10%, latency 0–2 frame, push rawak. (Resipi Humanoid-Gym — lebih agresif sebab gap kita lebih besar dari sim-to-real diorang.)
  • Push-recovery dalam sim: policy kekal berdiri bila ditolak 100–300N. Ini definisi "active ragdoll" kita.
  • Log & checkpoint discipline: TensorBoard, checkpoint tiap N steps, config YAML committed — training days-long kat GX10 MESTI boleh resume.
GATE 2 (bertingkat, v1.1): Gate 2a = L1 berdiri stabil dengan DR ON (boleh terus ke P3 dengan ini sahaja!). Gate 2b = L2 push-recovery lepas benchmark suite. Gate 2c = L3 idle+walk >90% success. Ke P3 seawal Gate 2a — pindahkan otak kecil dulu, otak besar kemudian.

Expected Failures — P2

FailureSignalHandle
Training tak converge / gerakan zombieReward mendatar, gerak pelikTurun skop: 1 clip idle sahaja dulu; semak retarget quality (punca #1); semak PD gains sim vs realistic range
Berjaya TANPA DR, gagal DENGAN DRSuccess rate jatuh bila DR onCurriculum: mula DR sempit, luaskan gradually; JANGAN ship policy tanpa DR — dia takkan survive Rapier
GB10 terlalu lambat untuk iterate>2 hari per eksperimenKecilkan env count/network, guna MuJoCo CPU utk debug cepat + GPU utk run penuh; sewa cloud A100 spot utk run besar kalau perlu (design tetap portable)
ProtoMotions tak support skeleton custom dengan mudahFail konfigurasi assetIkut laluan robot H1/G1 dalam repo (bukan SMPL path) — robot = skeleton custom, path tu first-class
P3

Export + Sim2Sim Gauntlet2–4 minggu realistik · Fasa paling teknikal — tapi Spike F dah buktikan jambatan wujud; sini kita perkemas & ukur

  • Bina exporter ONNX sendiri (research sahkan ProtoMotions TAKDE ini): checkpoint → ONNX, obs normalization baked-in atau shipped sebagai JSON.
  • Reimplement observation vector dalam JS — pose, velocities, gravity vector, phase — MESTI match Python bit-by-bit. Tulis parity test: state sama → obs sama (tolerance 1e-5).
  • Parity test inference: obs sama → action sama antara PyTorch dan onnxruntime-web.
  • Sim2sim harness headless: jalankan policy dalam engine deployment (Rapier Rust headless / MuJoCo) di GX10, ukur success rate berbanding sim asal. Ini GATE research kata paling penting.
  • Match PD semantics: samakan gains, motor model (Acceleration vs Force — unit lain!), timestep, substep antara training env dan engine deployment. Dokumen setiap parameter dalam docs/pd-mapping.md.
  • Kalau gap besar: masukkan engine deployment sebagai salah satu training engine (gaya PolySim — multi-sim naikkan transfer 0.036→0.564) atau fine-tune dalam dia.
GATE 3: Success rate dalam engine deployment ≥80% daripada success rate sim asal, pada task idle+walk+push-recovery.

Expected Failures — P3 (fasa paling banyak failure — memang dijangka)

FailureSignalHandle
Policy terus jatuh dalam Rapier walau perfect dalam IsaacSim2sim harness success ~0INI failure yang research ramal (0.036!). Urutan diagnosis: (1) parity obs/action dulu — selalunya bug, bukan gap; (2) PD gains/units mismatch; (3) contact model beza → tambah DR contact; (4) train multi-sim termasuk Rapier headless
Obs vector JS tak match PythonParity test failIni SEBAB kita tulis parity test. Compare element-by-element; punca biasa: quaternion convention (wxyz vs xyzw), local vs world frame, urutan joint
Composed revolute ≠ spherical semanticsSendi berkelakuan lain dari simSamakan representasi dalam training env — train dengan struktur joint SAMA macam deployment (composed revolute dua-dua belah)
Rapier Rust headless training terlalu lambat (CPU)Steps/sec rendahGuna dia untuk fine-tune/eval sahaja, bukan train-from-scratch; bulk training kekal GPU-resident
P4

Browser Runtime Integration2–4 minggu realistik · Demo pertama dunia(?): active ragdoll RL dalam browser

  • Loop masa yang betul: physics fixed 60Hz (accumulator), policy 30Hz (setiap 2 step), render vsync. Policy targets di-hold antara tick.
  • Physics + inference dalam Web Worker (SharedArrayBuffer kalau ada; fallback postMessage) — main thread untuk render sahaja. Perlu header COOP/COEP untuk SAB.
  • Demo interaktif: avatar berdiri/berjalan, pengguna tembak objek / tarik dengan mouse / tilt lantai — watak struggle & recover. INI moment "Euphoria dalam browser".
  • Blend layer: bila policy hilang kawalan (jatuh betul-betul) → passive ragdoll → trigger getup policy/animation. State machine: ACTIVE → FALLING → DOWN → GETUP.
  • Perf pass: ukur frame budget di MacBook + iPhone + Android mid-range. Sasaran: total physics+inference+render <16ms desktop, <33ms phone.
  • Deploy demo ke greymouth.lantodak.com (CF Pages personal, macam explainer/training). Ingat header COOP/COEP untuk SAB (fail _headers).
  • (v1.1) Telemetry ringkas & anonim: FPS, device class, engine backend — dari setiap pengunjung demo. Data perf percuma merentas beribu device untuk tuning P6.
GATE 4: Demo live boleh dikongsi: 60fps desktop, ≥30fps phone, watak recover dari tolakan sederhana secara konsisten.

Expected Failures — P4

FailureSignalHandle
Frame budget pecah di phonePerf pass <30fpsIkut urutan murah→mahal: kurangkan substep → policy 15Hz+interpolate → quantize ONNX int8 → kecilkan collision fidelity → BARU fikir fork/custom Three.js (buang pipeline tak guna, custom WGSL skinning)
SAB tak available (header/Safari lama)SharedArrayBuffer undefinedFallback postMessage + transferable; latency +1 frame acceptable untuk policy 30Hz
Policy behave lain dalam JS vs harness headlessGate 3 pass tapi browser failBeza timestep/iterasi WASM vs native — kunci konfigurasi SAMA; semak determinism f32 vs f64
GC pause / jankFrame spikes berkalaZero-allocation hot loop: pre-allocate semua TypedArray, elak object churn dalam step()
P5

Behaviors + MaskedMimic PenuhBerterusan · Dari "berdiri" ke "berlakon" — perpustakaan behavior kelas Euphoria

  • Getup policy: bangun dari terlentang & meniarap (clip Mixamo getup + RL).
  • Brace/protect: tangan lindung kepala masa jatuh — signature Euphoria. Boleh emerge dari reward survival + head-impact penalty.
  • Stumble directional: melangkah ikut arah tolakan (bukan generic wobble).
  • Upgrade ke MaskedMimic penuh: satu policy, banyak skill, boleh diarah dengan sparse goals (target kepala/tangan) — buka pintu "AI director" untuk gameplay.
  • Library mode: pakej @greymouth/runtime — API bersih: createActiveRagdoll(gltf, policy). Consumer #1: LANGGAR (fighting!). Consumer #2: cospace (reaksi kena langgar).
  • (v1.1) Policy Zoo rasmi: manifest + versioning untuk setiap otak (stand-v1, walk-v2, drunk-v1, zombie-v1...). Perangai = kandungan boleh jual/kongsi.
  • (v1.1) Trek video-to-motion: jana clip mocap sendiri dari video (pose estimation) — licensing-bersih 100% + gerakan unik (silat/LANGGAR moves). Mula sebagai eksperimen, matang jadi moat data.
  • Retrain komersial-bersih (Mixamo/own mocap sahaja) sebelum mana-mana kegunaan berbayar.
GATE 5: LANGGAR boleh guna GREYMOUTH runtime untuk satu interaksi fight sebenar (tumbuk → kena → recover/jatuh) end-to-end.
P6

Opsyenal — Engine CustomizationHanya jika perf pass P4 tunjuk perlu · Fork/custom untuk kelajuan

  • Three.js diet build: import hanya modul perlu (tree-shaking agresif), custom ShaderMaterial/WGSL untuk skinning — buang kos uniform/feature tak guna.
  • WebGPURenderer eval: ukur semula bila stabil untuk use case kita (compute skinning + render satu pass).
  • Fork Rapier (Rust→WASM) — PILIHAN TERAKHIR MUTLAK (v1.1): maintain fork physics engine = kerja separuh masa selamanya. Hanya jika SEMUA jalan lain habis DAN ada bukti profiler jelas. Cuba dulu: patch upstream (PR ke dimforge), atau tukar adapter ke engine lain.
  • Policy distillation: teacher besar → student mini (1 layer?) untuk phone paling murah.
Prinsip: JANGAN masuk P6 sebab "best nak optimize" — masuk hanya dengan bukti profiler dari P4. Lightweight dicapai dengan disiplin, bukan dengan rewrite.

03Risk Register Keseluruhan

#RisikoImpakMitigasi utama
R1Domain gap Isaac→Rapier lebih teruk dari Isaac→MuJoCo (takde sesiapa pernah ukur)Policy tak guna dalam browserPD targets + DR agresif + sim2sim gate P3 + opsyen multi-sim/Rapier-headless; escape hatch: MuJoCo-WASM (gap sifar)
R2Rapier articulation tak stabil pada humanoid 20-DOF (unverified — risiko engineering #1 dari research)Tukar engine lambat = mahalSpike B dalam P0 SEBELUM apa-apa lain
R3GB10 sorang terlalu lambat untuk iterateMomentum matiSkop kecil (5 clip bukan AMASS), MuJoCo CPU utk debug, cloud GPU spot utk run besar
R4Licensing data (AMASS/SMPL non-komersial)Tak boleh jual LANGGARDua trek data: prototype (apa-apa) vs ship (Mixamo/own mocap sahaja); jangan campur
R5Obs/action mismatch Python↔JS (bug halus, nampak macam R1)Berminggu debug salah arahParity tests P3 WAJIB sebelum salahkan physics
R6Scope creep (ini R&D, seronok, boleh hanyut)Tak siap apa-apaGate system + MVP ladder; setiap fasa ada deliverable demo yang boleh tunjuk
R7(v1.1) GX10 dikongsi dengan Rokiah/OPENCOMM (qwen Ollama) — training bergaduh memory/GPUTraining crash / Rokiah downTraining window berjadual, auto-unload model masa training, cloud GPU spot untuk run besar
R8(v1.1) Fokus berpecah (cospace, OPENCOMM, KENAL serentak) — R&D mati sebab ditinggalkan, bukan sebab gagalProjek senyap & sejukPeraturan momentum: setiap sesi tamat dengan benda boleh ditunjuk; timeline realistik ×2 supaya bulan ke-2 tak rasa macam kegagalan

04Sumber Utama (verified)

NVlabs/ProtoMotions — base framework MaskedMimic, Apache-2.0, multi-simulator
MaskedMimic (SIGGRAPH Asia) — unified physics-based character control via motion inpainting
IsaacLab issue #3761 — DGX Spark/GB10 support, sm_121 gotcha & fix
Humanoid-Gym (arXiv 2404.05695) — resipi PD-target + DR + sim2sim; blueprint mitigasi kita
PolySim (arXiv 2510.01708) — bukti kuantitatif domain gap (0.036!) + multi-sim training fix
Rapier.js joints docs — PD motors (AWAS: prose stale, spherical motor dah takde)
SimbiconJS / SIMBICON-Web — rujukan fallback classical (tak diperlukan selagi ML jalan)
Isaac Gym paper — kenapa GPU-resident RL buat single-box training feasible (2–3 order magnitude)