Relational robot policy: morphology-general structured VLA research system (private)
Python
0
1,571 commits
updated Oct 5, 2026
Public research repo (github.com/JacobFV/structured-psi0-latent-diffusion-dynamics), shared openly. Formerly
relational-robot-policy(renamed 2026-09-25, D-030). The Python package and CLI are stillrrp; the working checkout on the GB10 hosts is still~/work/relational-robot-policy.
Research system for morphology-general robot control with a structured, semantic latent packet: a ψ₀-inspired stack
in which a planner ("system i") emits a continuous latent packet z that carries the task's meaning (which object, which
manipulator, what relation should change, relative geometry, contact, uncertainty), and a fast embodiment-specific
controller ("system 0") realizes that same z online from the robot's own proprioception and touch. Simulation is
native MuJoCo on two NVIDIA GB10 machines.
Status (2026-09-30): research code, not a product. The code for the pre-training campaign is merged (readiness round 2, 21 units; ledger in
STATUS.md, plan inresearch/readiness.md); the campaign-opening runs T0 to T9 areplannedand none has started. Results so far (through D-145): on deployable routes (no teacher, oracle or BC at run time) the latent route is competent on legged go2, hexapod6 and the t1 humanoid, and partly competent on arms (below plain BC); it does not transfer to a new arm (D-135). Legged results use contact model v1 unless a v2 tracker is named (D-093). The dual arm is parked (collect, pack and evals on an external checkpoint stay; no training, D-146). Progress states use one vocabulary everywhere: planned, implementing, test_failed, verified, running, completed, failed_hypothesis, blocked_external, budget_exhausted (rrp.core.runs.RunState). What is and is not shown:research/reports/evidence_matrix.md. Plan and workstreams:docs/strategy.md. Problem checklist for physically credible training:docs/robot_training_considerations.md. Running work:STATUS.md.
system ii (optional VLM) + supplied task graph (events, roles, dependencies)
│ public observations, task/event structure, morphology
▼
system i typed context (morphology · scene · task/events · interaction) → rectified-flow sampling of z
│
▼
latent packet z[knots, assemblies, 64] ← the SAME tensor is (a) supervised for semantics (probes),
│ (b) transmitted, (c) consumed by system 0
▼
system 0 z + morphology + current joint state + touch/IMU + elapsed phase → native joint targets
▼
joint-target tracking in MuJoCo
Semantics live on the packet. A probe reads z with opaque handles only (never scene features or labels). Evidence
of meaning comes from probes and causal edits of the received packet.
System 0 never sees the task. Task meaning arrives only through z; sensor feedback arrives every tick.
Clocks differ by body family:
| family | system-i replan | system 0 | physics |
|---|---|---|---|
| arm (single, dual) | 0.4 s, 4 knots × 0.2 s | 20 Hz (50 ms) | 500 Hz |
| legged / humanoid | 0.4 s (every 20 ticks), 0.8 s packet horizon | 50 Hz (20 ms) | body-specific substeps |
Semantic vs no-semantic ("nosem") variants are capacity-matched: nosem sets the semantic loss weights to 0. The
bounded-NLL fix (latent.probe_lv_min: -4, D-085) is part of the current sem recipe ("semfix"/"fixsem").
Design contract: research/corrections/controller-facing-semantic-latent.md.
Original assignment (historical): .old/docs/handoff/.
Every approach is a policy and every simulator an environment behind one interface each; a task says which
environments it exists in and how an episode is judged; one harness (rrp.harness.rollout) runs any
policy × env × task that negotiate() accepts and records declined pairs with their reasons. Design, interfaces and the
moved-path table: docs/architecture.md.
| kind | registered names |
|---|---|
environments (rrp.envs.base.make_env) | mujoco/arm, mujoco/dual (parked), mujoco/legged (control="base_velocity" through the embedded tracker, or "legs" joint targets), warp/legged (batched GPU), simple (Ψ₀ SIMPLE, Isaac Sim), computerworld (UI world as 3D; pointer track) |
policies (rrp.policies.base.make_policy) | bc, latent (system i + system 0; sem / nosem / semfix variants), legged_latent, legged_bc, pointer_latent, pointer_bc, pointer_oracle, oracle (privileged diagnostic), rl_expert, teacher:<task> (scripted_teacher), psi0_direct, psi0_structured, psi0_replay |
tasks (rrp.tasks.spec.TASKS) | arm: pick_place, reach_pose, support_insert, handover, assign_left/right, pivot_against_surface, waypoint_contact; legged: foothold_steps, locomotion; humanoid: h_walk, h_turn, h_reach, h_squat_pick, h_place, h_steps, h_gap, h_carry, h_loco_pick, held-out h_steps_carry and h_gap_cart; pointer: cw/<task>; simple/<Task> |
Lineage codes in config and run names (sfjf, nsjf2, fixsem, gendag3_noqd, …) are decoded in
.old/research/naming.md. The training lineages (arm ladder, legged, dual arm) run as pipeline stages
(rrp.harness.pipelines, families arm / dual / legged) from recipe files in recipes/ (templates + per-track instances); evaluation routes on matched seeds are
R0 teacher, R1 oracle packet E(expert chunk) (DIAGNOSTIC), R2 generated packet (deployable), plus a BC positive control
and task-context edit suites.
rrp = PYTHONPATH=src .venv/bin/python -m rrp.cli; wrap anything heavy in rrp ops run (see resources).
| goal | command |
|---|---|
| evaluate any policy × env × task | rrp eval --policy NAME[=JSON] --env ENV --task TASK --body BODY --seeds a:b --out F (harness.eval.evaluate over harness.rollout, family hooks from harness.hooks; JSONL rows + Wilson summary) |
| compatibility matrix (n/a with reasons) | rrp matrix … |
| a whole lineage (collect → pack → Stage A → flow → DAgger / refit → eval → edits; families arm / legged / humanoid / psi0 / pointer / relations; dual is parked) | rrp run-dag recipes/<track>/<lineage>.yaml (or a name under recipes/) (resumable JSON ledger; stage list: rrp stage list) |
| generate / pack arm data | rrp data generate --config <data config JSON, rendered by the recipe stage>; rrp data pack --config … --out artifacts/packed/<name> |
| arm Stage A / flow / probes | rrp latent train-representation --config …; rrp latent train-flow --config …; rrp latent fit-probes … |
| arm ladder evaluation (R0/R1/R2) | rrp suite ladder --route {teacher,oracle,generated} --robot panda_pg2 --n 30 --out … |
| arm task-context edits | rrp latent semantic-edits --route {teacher,oracle,generated,bc} … |
| evaluation suites / audits | rrp suite {ladder,legged,robustness,target,tracker-validation,privileged-audit,…} … |
| legged trackers (GPU PPO) | rrp train tracker-warp --recipe <recipe> --out … |
| Ψ₀ fine-tunes | rrp train psi0 … (SIMPLE eval needs the Isaac venv: ops/bin/psi0_ext.sh) |
| labelled video | rrp video {arm,dual,legged} … |
| sealed-cell log (per split) | rrp suite sealed-log {list,infra-failure} |
| visualization room | cd viz/room && npm run snapshot (exporter rrp viz export) |
Requirements: Linux aarch64 or x86_64, Python 3.12, uv, a systemd user session
(the broker uses user cgroups), Node 20+ only for the room.
git clone https://github.com/JacobFV/structured-psi0-latent-diffusion-dynamics.git && cd structured-psi0-latent-diffusion-dynamics
uv venv --python 3.12 .venv
uv pip install --python .venv/bin/python -e '.[sim,ml,dev]' # CPU torch is fine for tests
PYTHONPATH=src:. .venv/bin/python -m pytest tests/unit -q -m 'not slow' # merge gate; tests needing weights / Menagerie / warp skip naming what is missing
ops/bin/fetch_menagerie.sh # pinned third-party robot assets (~1.7 GB)
# one-time: measure free capacity and create the enforced project slice + watchdog
PYTHONPATH=src python3 -m rrp.cli ops init --role host
PYTHONPATH=src python3 -m rrp.cli ops start-watchdog
PYTHONPATH=src python3 -m rrp.cli ops run --cpu 2 --mem 4G --label my_job -- <command>
PYTHONPATH=src python3 -m rrp.cli ops stop --owned-only --lease <lease_id> # never stop other people's jobs
Datasets, packed data and checkpoints are not in git; they live on the peer store and a host mirror (~/work/rrp-data).
src/rrp/ layers import only downward (tests/unit/test_layering.py)
core/ contracts: observation vs privileged truth, NativeCommand / ActionChunk, latent packet + system-0
protocol, RobotSpec (morphology graph), TaskDefinition, provenance + source labels, RunConfig, paths
ops/ resource broker, leases, cgroup enforcement, watchdog, telemetry, peer discovery
bodies/ procedural + Menagerie arms, grippers, aloha, legged, humanoids, G1 (g1_simple), IK, physics versions
tasks/ task-graph compiler/runtime/receipts, TaskSpec registry (spec.py)
envs/ base.py (Env, EnvSpec, capabilities, make_env); mujoco/ (sessions, scenes, sensors, trackers);
warp/ (batched GPU legged envs); simple/ (Ψ₀ SIMPLE)
policies/ base.py (Policy, negotiate, make_policy); features/ (featurizers: the only definition of what a
policy may see); nets/; bc, latent, system0, legged, oracle, packets; teachers/ (scripted_teacher);
psi0/
harness/ rollout.py (the one episode loop), hooks.py (rollout hooks: HOOKS, TASK_HOOKS), eval/ (evaluate.py: evaluate / matrix; suites), train/,
data/, pipelines/, dag.py (run-dag)
viz/ room exporter, recorder/replay, replay-spec generator
cli/ the `rrp` command (tools.py: `rrp <group> <tool>` for data / train / suite / stage / viz tools)
viz/room/ visualization room (exporter output in viz/data)
recipes/ recipe templates + presets + per-track instances (the run DAGs; `rrp run-dag`)
ops/bin/ peer transport (peer_run/sync/bootstrap), asset fetch, external-env setup (shell)
research/ decisions.md (append-only; appendix P = former psi1z), registry.jsonl, tracks/<open track>.md, methods/,
corrections/, splits/, reports/evidence_matrix.md
artifacts/ small raw results (JSON/JSONL), receipts, labelled videos
docs/ architecture.md (interfaces; section 13 = the repository schema), strategy.md, relations.md,
experiments_roadmap.md, robot_training_considerations.md
.old/ retired configs, DAGs, scripts, notes, handoff package, demo page (index: .old/README.md; never read by code)
schema.toml the repository schema (every tracked path must match; tests/unit/test_layout.py)
tests/ unit/ (incl. test_golden.py: byte-identity of featurizers, teachers, physics, policies), integration/, gpu/
PolicyObservation. Simulator truth is used only as training labels,
rewards and evaluation.research/splits/, recipes/presets/eval-latent_slice1.json).AGENTS.md. No cloud spend,
no physical robots.main is the integration branch; parallel agents work in track/<track> worktrees and rebase onto main
(research/tracks/BRIEF.md). Commit small, push often.AGENTS.md): test loss/likelihood math, leakage,
resource safety and split leakage; otherwise prefer a short real run. tests/unit is green in a fresh checkout; tests
that need untracked weights, assets, warp or the peer skip naming what is missing, and tests over 20 s carry
@pytest.mark.slow (the merge gate is -m "not slow").research/decisions.md with evidence.STATUS.md, docs/strategy.mdresearch/reports/evidence_matrix.mdresearch/decisions.md; names → .old/research/naming.mdAGENTS.mdΨ₀ direct and Ψ₀ + structure on Ψ₀'s SIMPLE benchmark are policies (rrp.policies.psi0) on the simple env
(rrp.envs.simple, Isaac Sim 5.1 in its own venv: ops/bin/psi0_ext.sh, extra rrp[psi0]). The separate psi1z repo is
retired (D-140); its decisions are appendix P of research/decisions.md, its notes and results
research/tracks/psi0.md.
Open questions and planned experiments (what is still uncertain but in scope): docs/experiments_roadmap.md.
Public (unlicensed; all rights reserved) on Hugging Face: jacob-valdez/rrp-checkpoints — arm v1 routes, v2/v6 BC experts, legged8 routes, gait trackers, and 160 recorded evaluation rollouts (rollouts/viz_replays). MANIFEST.tsv there lists sha256 per file. Weights are never committed to this repo.
Relational robot policy: morphology-general structured VLA research system (private)
Python
0
1,571 commits
updated Oct 5, 2026
Public research repo (github.com/JacobFV/structured-psi0-latent-diffusion-dynamics), shared openly. Formerly
relational-robot-policy(renamed 2026-09-25, D-030). The Python package and CLI are stillrrp; the working checkout on the GB10 hosts is still~/work/relational-robot-policy.
Research system for morphology-general robot control with a structured, semantic latent packet: a ψ₀-inspired stack
in which a planner ("system i") emits a continuous latent packet z that carries the task's meaning (which object, which
manipulator, what relation should change, relative geometry, contact, uncertainty), and a fast embodiment-specific
controller ("system 0") realizes that same z online from the robot's own proprioception and touch. Simulation is
native MuJoCo on two NVIDIA GB10 machines.
Status (2026-09-30): research code, not a product. The code for the pre-training campaign is merged (readiness round 2, 21 units; ledger in
STATUS.md, plan inresearch/readiness.md); the campaign-opening runs T0 to T9 areplannedand none has started. Results so far (through D-145): on deployable routes (no teacher, oracle or BC at run time) the latent route is competent on legged go2, hexapod6 and the t1 humanoid, and partly competent on arms (below plain BC); it does not transfer to a new arm (D-135). Legged results use contact model v1 unless a v2 tracker is named (D-093). The dual arm is parked (collect, pack and evals on an external checkpoint stay; no training, D-146). Progress states use one vocabulary everywhere: planned, implementing, test_failed, verified, running, completed, failed_hypothesis, blocked_external, budget_exhausted (rrp.core.runs.RunState). What is and is not shown:research/reports/evidence_matrix.md. Plan and workstreams:docs/strategy.md. Problem checklist for physically credible training:docs/robot_training_considerations.md. Running work:STATUS.md.
system ii (optional VLM) + supplied task graph (events, roles, dependencies)
│ public observations, task/event structure, morphology
▼
system i typed context (morphology · scene · task/events · interaction) → rectified-flow sampling of z
│
▼
latent packet z[knots, assemblies, 64] ← the SAME tensor is (a) supervised for semantics (probes),
│ (b) transmitted, (c) consumed by system 0
▼
system 0 z + morphology + current joint state + touch/IMU + elapsed phase → native joint targets
▼
joint-target tracking in MuJoCo
Semantics live on the packet. A probe reads z with opaque handles only (never scene features or labels). Evidence
of meaning comes from probes and causal edits of the received packet.
System 0 never sees the task. Task meaning arrives only through z; sensor feedback arrives every tick.
Clocks differ by body family:
| family | system-i replan | system 0 | physics |
|---|---|---|---|
| arm (single, dual) | 0.4 s, 4 knots × 0.2 s | 20 Hz (50 ms) | 500 Hz |
| legged / humanoid | 0.4 s (every 20 ticks), 0.8 s packet horizon | 50 Hz (20 ms) | body-specific substeps |
Semantic vs no-semantic ("nosem") variants are capacity-matched: nosem sets the semantic loss weights to 0. The
bounded-NLL fix (latent.probe_lv_min: -4, D-085) is part of the current sem recipe ("semfix"/"fixsem").
Design contract: research/corrections/controller-facing-semantic-latent.md.
Original assignment (historical): .old/docs/handoff/.
Every approach is a policy and every simulator an environment behind one interface each; a task says which
environments it exists in and how an episode is judged; one harness (rrp.harness.rollout) runs any
policy × env × task that negotiate() accepts and records declined pairs with their reasons. Design, interfaces and the
moved-path table: docs/architecture.md.
| kind | registered names |
|---|---|
environments (rrp.envs.base.make_env) | mujoco/arm, mujoco/dual (parked), mujoco/legged (control="base_velocity" through the embedded tracker, or "legs" joint targets), warp/legged (batched GPU), simple (Ψ₀ SIMPLE, Isaac Sim), computerworld (UI world as 3D; pointer track) |
policies (rrp.policies.base.make_policy) | bc, latent (system i + system 0; sem / nosem / semfix variants), legged_latent, legged_bc, pointer_latent, pointer_bc, pointer_oracle, oracle (privileged diagnostic), rl_expert, teacher:<task> (scripted_teacher), psi0_direct, psi0_structured, psi0_replay |
tasks (rrp.tasks.spec.TASKS) | arm: pick_place, reach_pose, support_insert, handover, assign_left/right, pivot_against_surface, waypoint_contact; legged: foothold_steps, locomotion; humanoid: h_walk, h_turn, h_reach, h_squat_pick, h_place, h_steps, h_gap, h_carry, h_loco_pick, held-out h_steps_carry and h_gap_cart; pointer: cw/<task>; simple/<Task> |
Lineage codes in config and run names (sfjf, nsjf2, fixsem, gendag3_noqd, …) are decoded in
.old/research/naming.md. The training lineages (arm ladder, legged, dual arm) run as pipeline stages
(rrp.harness.pipelines, families arm / dual / legged) from recipe files in recipes/ (templates + per-track instances); evaluation routes on matched seeds are
R0 teacher, R1 oracle packet E(expert chunk) (DIAGNOSTIC), R2 generated packet (deployable), plus a BC positive control
and task-context edit suites.
rrp = PYTHONPATH=src .venv/bin/python -m rrp.cli; wrap anything heavy in rrp ops run (see resources).
| goal | command |
|---|---|
| evaluate any policy × env × task | rrp eval --policy NAME[=JSON] --env ENV --task TASK --body BODY --seeds a:b --out F (harness.eval.evaluate over harness.rollout, family hooks from harness.hooks; JSONL rows + Wilson summary) |
| compatibility matrix (n/a with reasons) | rrp matrix … |
| a whole lineage (collect → pack → Stage A → flow → DAgger / refit → eval → edits; families arm / legged / humanoid / psi0 / pointer / relations; dual is parked) | rrp run-dag recipes/<track>/<lineage>.yaml (or a name under recipes/) (resumable JSON ledger; stage list: rrp stage list) |
| generate / pack arm data | rrp data generate --config <data config JSON, rendered by the recipe stage>; rrp data pack --config … --out artifacts/packed/<name> |
| arm Stage A / flow / probes | rrp latent train-representation --config …; rrp latent train-flow --config …; rrp latent fit-probes … |
| arm ladder evaluation (R0/R1/R2) | rrp suite ladder --route {teacher,oracle,generated} --robot panda_pg2 --n 30 --out … |
| arm task-context edits | rrp latent semantic-edits --route {teacher,oracle,generated,bc} … |
| evaluation suites / audits | rrp suite {ladder,legged,robustness,target,tracker-validation,privileged-audit,…} … |
| legged trackers (GPU PPO) | rrp train tracker-warp --recipe <recipe> --out … |
| Ψ₀ fine-tunes | rrp train psi0 … (SIMPLE eval needs the Isaac venv: ops/bin/psi0_ext.sh) |
| labelled video | rrp video {arm,dual,legged} … |
| sealed-cell log (per split) | rrp suite sealed-log {list,infra-failure} |
| visualization room | cd viz/room && npm run snapshot (exporter rrp viz export) |
Requirements: Linux aarch64 or x86_64, Python 3.12, uv, a systemd user session
(the broker uses user cgroups), Node 20+ only for the room.
git clone https://github.com/JacobFV/structured-psi0-latent-diffusion-dynamics.git && cd structured-psi0-latent-diffusion-dynamics
uv venv --python 3.12 .venv
uv pip install --python .venv/bin/python -e '.[sim,ml,dev]' # CPU torch is fine for tests
PYTHONPATH=src:. .venv/bin/python -m pytest tests/unit -q -m 'not slow' # merge gate; tests needing weights / Menagerie / warp skip naming what is missing
ops/bin/fetch_menagerie.sh # pinned third-party robot assets (~1.7 GB)
# one-time: measure free capacity and create the enforced project slice + watchdog
PYTHONPATH=src python3 -m rrp.cli ops init --role host
PYTHONPATH=src python3 -m rrp.cli ops start-watchdog
PYTHONPATH=src python3 -m rrp.cli ops run --cpu 2 --mem 4G --label my_job -- <command>
PYTHONPATH=src python3 -m rrp.cli ops stop --owned-only --lease <lease_id> # never stop other people's jobs
Datasets, packed data and checkpoints are not in git; they live on the peer store and a host mirror (~/work/rrp-data).
src/rrp/ layers import only downward (tests/unit/test_layering.py)
core/ contracts: observation vs privileged truth, NativeCommand / ActionChunk, latent packet + system-0
protocol, RobotSpec (morphology graph), TaskDefinition, provenance + source labels, RunConfig, paths
ops/ resource broker, leases, cgroup enforcement, watchdog, telemetry, peer discovery
bodies/ procedural + Menagerie arms, grippers, aloha, legged, humanoids, G1 (g1_simple), IK, physics versions
tasks/ task-graph compiler/runtime/receipts, TaskSpec registry (spec.py)
envs/ base.py (Env, EnvSpec, capabilities, make_env); mujoco/ (sessions, scenes, sensors, trackers);
warp/ (batched GPU legged envs); simple/ (Ψ₀ SIMPLE)
policies/ base.py (Policy, negotiate, make_policy); features/ (featurizers: the only definition of what a
policy may see); nets/; bc, latent, system0, legged, oracle, packets; teachers/ (scripted_teacher);
psi0/
harness/ rollout.py (the one episode loop), hooks.py (rollout hooks: HOOKS, TASK_HOOKS), eval/ (evaluate.py: evaluate / matrix; suites), train/,
data/, pipelines/, dag.py (run-dag)
viz/ room exporter, recorder/replay, replay-spec generator
cli/ the `rrp` command (tools.py: `rrp <group> <tool>` for data / train / suite / stage / viz tools)
viz/room/ visualization room (exporter output in viz/data)
recipes/ recipe templates + presets + per-track instances (the run DAGs; `rrp run-dag`)
ops/bin/ peer transport (peer_run/sync/bootstrap), asset fetch, external-env setup (shell)
research/ decisions.md (append-only; appendix P = former psi1z), registry.jsonl, tracks/<open track>.md, methods/,
corrections/, splits/, reports/evidence_matrix.md
artifacts/ small raw results (JSON/JSONL), receipts, labelled videos
docs/ architecture.md (interfaces; section 13 = the repository schema), strategy.md, relations.md,
experiments_roadmap.md, robot_training_considerations.md
.old/ retired configs, DAGs, scripts, notes, handoff package, demo page (index: .old/README.md; never read by code)
schema.toml the repository schema (every tracked path must match; tests/unit/test_layout.py)
tests/ unit/ (incl. test_golden.py: byte-identity of featurizers, teachers, physics, policies), integration/, gpu/
PolicyObservation. Simulator truth is used only as training labels,
rewards and evaluation.research/splits/, recipes/presets/eval-latent_slice1.json).AGENTS.md. No cloud spend,
no physical robots.main is the integration branch; parallel agents work in track/<track> worktrees and rebase onto main
(research/tracks/BRIEF.md). Commit small, push often.AGENTS.md): test loss/likelihood math, leakage,
resource safety and split leakage; otherwise prefer a short real run. tests/unit is green in a fresh checkout; tests
that need untracked weights, assets, warp or the peer skip naming what is missing, and tests over 20 s carry
@pytest.mark.slow (the merge gate is -m "not slow").research/decisions.md with evidence.STATUS.md, docs/strategy.mdresearch/reports/evidence_matrix.mdresearch/decisions.md; names → .old/research/naming.mdAGENTS.mdΨ₀ direct and Ψ₀ + structure on Ψ₀'s SIMPLE benchmark are policies (rrp.policies.psi0) on the simple env
(rrp.envs.simple, Isaac Sim 5.1 in its own venv: ops/bin/psi0_ext.sh, extra rrp[psi0]). The separate psi1z repo is
retired (D-140); its decisions are appendix P of research/decisions.md, its notes and results
research/tracks/psi0.md.
Open questions and planned experiments (what is still uncertain but in scope): docs/experiments_roadmap.md.
Public (unlicensed; all rights reserved) on Hugging Face: jacob-valdez/rrp-checkpoints — arm v1 routes, v2/v6 BC experts, legged8 routes, gait trackers, and 160 recorded evaluation rollouts (rollouts/viz_replays). MANIFEST.tsv there lists sha256 per file. Weights are never committed to this repo.