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.
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.
greymouth_L2V3C warm-start berterusan — kini di DGX Spark.greymouth.lantodak.com| Tangga | Status |
|---|---|
| L1 — BERDIRI | TERCAPAI 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 — BERJALAN | SETERUSNYA perlukan clip walk mannequin-baked + React From Front |
| L4 — BANGUN | DIRANCANG clip getting-up bersih (teknik trim sama) |
| L5 — BERLAKON | DIPOTONG (keputusan scope 13 Jul — L4 = 90% persepsi Euphoria) |
greymouth.todak.io/viewer.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).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.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.
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.
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.
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.
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.
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.
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.
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.
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.
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).
Semua ni diputuskan dengan NOMBOR dari spike Phase 0 — bukan dengan rasa.
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.
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.
| Tangga | Keupayaan | Nilai kalau berhenti di sini |
|---|---|---|
| L1 — BERDIRI | Balance statik: watak berdiri, lawan graviti + hingar kecil | Bukti konsep penuh pipeline GX10→browser. Dah boleh demo |
| L2 — MELAWAN | Push-recovery: ditolak → terhuyung → recover. Tanpa berjalan | "Euphoria moment" pertama — demo viral, first-of-its-kind web |
| L3 — BERJALAN | Locomotion + boleh diarah (WASD/target) | Boleh guna dalam game sebenar (cospace roaming) |
| L4 — BANGUN | Getup dari terlentang/meniarap; kitaran jatuh-bangun penuh | Cukup untuk LANGGAR fight loop |
| L5 — BERLAKON | MaskedMimic: brace, stumble directional, boleh diarah sparse goals | Kelas Euphoria penuh — produk/library |
step / setTargets / getState). Rapier, MuJoCo-WASM, Jolt = plugin boleh tukar.stand-v1.onnx, walk-v2.onnx, zombie-v1.onnx). GREYMOUTH jadi "perpustakaan perangai" — bukak model bisnes policy-pack untuk web-game devs.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).
<2ms @ 30Hz.zalo/mujoco_wasm / port rasmi, humanoid.xml standard. Ukur saiz bundle (gzip), ms/step, API ergonomics vs Rapier.sm_121 nvrtc error, catat steps/sec.BroLanTodak/greymouth — struktur: /train (GX10, Python), /web (Three.js runtime), /spikes, /docs.| Failure | Signal | Handle |
|---|---|---|
| Rapier composed-revolute meletup pada 20 DOF | Joint jitter/NaN dalam Spike B | Naikkan 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 C | Terima Rapier + mitigasi gap penuh; MuJoCo-WASM kekal sebagai sim2sim harness sahaja (dev-time, bukan ship) |
| GX10 branch error / PhysX GPU issue di ARM | nvrtc sm_121 error / PhysX warning | Tukar ke branch Spark-supported; fallback training backend = MuJoCo (CPU 20-core GB10) via ProtoMotions — lambat tapi jalan |
| Inference >2ms di phone | Spike A numbers | Kecilkan network (128×128), quantize int8, turunkan policy ke 15Hz dengan interpolasi target |
| Ada prior art yang dah solve semua ni | Prior-art scan | BUKAN failure — jackpot. Nilai license, build atas dia, jimat berbulan |
step / setTargets / getState), BUKAN terus dengan Rapier. Engine kedua (MuJoCo-WASM) mesti boleh dipasang tanpa ubah kod atas.| Failure | Signal | Handle |
|---|---|---|
| Ragdoll menggeletar masa rest | Jitter visual bila baring | Naikkan 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 view | Override manual per-bone dalam rig JSON; auto = default, bukan hukum |
| Skin mengikut physics nampak "tercabut" | Mesh renggang dari capsule | Betulkan bind pose offset per bone; ini bug matriks, bukan bug physics — isolate dengan render capsule dulu |
| Failure | Signal | Handle |
|---|---|---|
| Training tak converge / gerakan zombie | Reward mendatar, gerak pelik | Turun skop: 1 clip idle sahaja dulu; semak retarget quality (punca #1); semak PD gains sim vs realistic range |
| Berjaya TANPA DR, gagal DENGAN DR | Success rate jatuh bila DR on | Curriculum: mula DR sempit, luaskan gradually; JANGAN ship policy tanpa DR — dia takkan survive Rapier |
| GB10 terlalu lambat untuk iterate | >2 hari per eksperimen | Kecilkan 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 mudah | Fail konfigurasi asset | Ikut laluan robot H1/G1 dalam repo (bukan SMPL path) — robot = skeleton custom, path tu first-class |
docs/pd-mapping.md.| Failure | Signal | Handle |
|---|---|---|
| Policy terus jatuh dalam Rapier walau perfect dalam Isaac | Sim2sim harness success ~0 | INI 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 Python | Parity test fail | Ini 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 semantics | Sendi berkelakuan lain dari sim | Samakan 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 rendah | Guna dia untuk fine-tune/eval sahaja, bukan train-from-scratch; bulk training kekal GPU-resident |
<16ms desktop, <33ms phone.greymouth.lantodak.com (CF Pages personal, macam explainer/training). Ingat header COOP/COEP untuk SAB (fail _headers).| Failure | Signal | Handle |
|---|---|---|
| Frame budget pecah di phone | Perf pass <30fps | Ikut 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 undefined | Fallback postMessage + transferable; latency +1 frame acceptable untuk policy 30Hz |
| Policy behave lain dalam JS vs harness headless | Gate 3 pass tapi browser fail | Beza timestep/iterasi WASM vs native — kunci konfigurasi SAMA; semak determinism f32 vs f64 |
| GC pause / jank | Frame spikes berkala | Zero-allocation hot loop: pre-allocate semua TypedArray, elak object churn dalam step() |
@greymouth/runtime — API bersih: createActiveRagdoll(gltf, policy). Consumer #1: LANGGAR (fighting!). Consumer #2: cospace (reaksi kena langgar).stand-v1, walk-v2, drunk-v1, zombie-v1...). Perangai = kandungan boleh jual/kongsi.| # | Risiko | Impak | Mitigasi utama |
|---|---|---|---|
| R1 | Domain gap Isaac→Rapier lebih teruk dari Isaac→MuJoCo (takde sesiapa pernah ukur) | Policy tak guna dalam browser | PD targets + DR agresif + sim2sim gate P3 + opsyen multi-sim/Rapier-headless; escape hatch: MuJoCo-WASM (gap sifar) |
| R2 | Rapier articulation tak stabil pada humanoid 20-DOF (unverified — risiko engineering #1 dari research) | Tukar engine lambat = mahal | Spike B dalam P0 SEBELUM apa-apa lain |
| R3 | GB10 sorang terlalu lambat untuk iterate | Momentum mati | Skop kecil (5 clip bukan AMASS), MuJoCo CPU utk debug, cloud GPU spot utk run besar |
| R4 | Licensing data (AMASS/SMPL non-komersial) | Tak boleh jual LANGGAR | Dua trek data: prototype (apa-apa) vs ship (Mixamo/own mocap sahaja); jangan campur |
| R5 | Obs/action mismatch Python↔JS (bug halus, nampak macam R1) | Berminggu debug salah arah | Parity tests P3 WAJIB sebelum salahkan physics |
| R6 | Scope creep (ini R&D, seronok, boleh hanyut) | Tak siap apa-apa | Gate system + MVP ladder; setiap fasa ada deliverable demo yang boleh tunjuk |
| R7 | (v1.1) GX10 dikongsi dengan Rokiah/OPENCOMM (qwen Ollama) — training bergaduh memory/GPU | Training crash / Rokiah down | Training 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 gagal | Projek senyap & sejuk | Peraturan momentum: setiap sesi tamat dengan benda boleh ditunjuk; timeline realistik ×2 supaya bulan ke-2 tak rasa macam kegagalan |