Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 9 additions & 4 deletions docs/ARC_CLOCK_CONTRACT.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ for models, frozen data pools, budgets, retained variants and migration.
```yaml
_target_: egomimic.rldb.zarr.arc_length_tokenizer.TokenizeBimanualArcLengthCartesian
clock_mode: velocity # velocity | duration
streams: full_separation # full_separation | translation_rotation
streams: full_separation # full_separation | translation_rotation | translation
resampled_vector_length: 100
min_distance_unit: 0.42 # meters, per arm
rotation_distance_unit: 1.7453292519943295 # radians, per arm (100 degrees)
Expand All @@ -32,6 +32,7 @@ Geometry always occupies the first 14 columns:
| --- | --- | --- |
| full_separation | M × 20 | T-left, T-right, R-left, R-right, G-left, G-right |
| translation_rotation | M × 18 | T-left, T-right, R-left, R-right |
| translation | M × 16 | T-left, T-right (rotation and gripper ride the translation supports) |

Each arm and stream spends its own spatial budget. Supports from different
streams in the same row are not necessarily simultaneous.
Expand All @@ -51,9 +52,13 @@ There is no repeated final padding clock.
- velocity: row zero is seconds; later rows are the distance between emitted
supports divided by the source interval's seconds. Units are m/s, rad/s,
and gripper units/s.
- duration: every row is `log(seconds + 0.001)`, including the initial delay.
The codec removes the log exactly once. `duration` does not mean absolute
timestamps or raw seconds.
- duration: every row is the absolute seconds from the chunk anchor to that
waypoint (row zero is the start delay). Decoding projects the rows once onto
the nearest non-decreasing clock by isotonic regression on the slack above
the fastest clock allowed by the 5 m/s translation max speed (no min speed:
rotation and gripper ride slow arms), so a backwards pair is averaged and no local
error accumulates into later rows. Provenance `timing_layout` is
`first_delay_absolute_v1`; velocity keeps `first_delay_incoming_v1`.

Translation distances are Euclidean, rotation distances are SO(3) geodesic,
and gripper distances are absolute value differences. No velocity smoothing,
Expand Down
2 changes: 1 addition & 1 deletion egomimic/eval/open_loop_sim.py
Original file line number Diff line number Diff line change
Expand Up @@ -738,7 +738,7 @@ def _cap_arc_video_trajectories(
for index, steps in enumerate(prefix_lengths):
rotation_cap = (
None
if rotation_distance_unit is None
if rotation_distance_unit is None or self.streams == "translation"
else self.execute_fraction * rotation_distance_unit
)
gripper_cap = (
Expand Down
12 changes: 7 additions & 5 deletions egomimic/hydra_configs/experiment/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,11 +51,13 @@ Each task's three entries use exactly the same filters, episode lists and split.
Baseline geometry is 100 × 14 time-indexed actions.

ARC uses the canonical [clock contract](../../../docs/ARC_CLOCK_CONTRACT.md)
(repository path `docs/ARC_CLOCK_CONTRACT.md`): velocity or log **interval**
seconds, first-row start delay, first-moving-stream termination.
It is not E1 or cumulative absolute seconds. Full separation is the default.
Use `abc.arc_streams=translation_rotation` for four clocks; token width
automatically changes from M × 20 to M × 18, including the model and decoder.
(repository path `docs/ARC_CLOCK_CONTRACT.md`): velocity rates or **absolute**
seconds from the chunk anchor (decoded by speed-bounded isotonic regression),
first-row start delay, first-moving-stream termination.
Full separation is the default. Use `abc.arc_streams=translation_rotation` for
four clocks (M × 18) or `translation` for one clock per arm (M × 16, rotation and
gripper ride the translation supports); token width follows automatically,
including the model and decoder.
No tokenizer or detokenizer algorithm is changed by this YAML reorganization.

The frozen towel/earbud ARC entries are **new canonical-codec recipes** built
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@ abc:
arc_stream_dims:
full_separation: 20
translation_rotation: 18
translation: 16
# Duration rows are absolute seconds from the anchor; velocity rows are incoming rates.
arc_timing_layouts:
velocity: first_delay_incoming_v1
duration: first_delay_absolute_v1
arc_token_dim: ${abc.arc_stream_dims.${abc.arc_streams}}
arc_token_rows: ${abc.arc_waypoints}
run_provenance:
Expand All @@ -17,7 +22,7 @@ run_provenance:
waypoints: ${abc.arc_waypoints}
clock_mode: ${abc.arc_clock_mode}
streams: ${abc.arc_streams}
timing_layout: first_delay_incoming_v1
timing_layout: ${abc.arc_timing_layouts.${abc.arc_clock_mode}}
hold_window_frames: 400
gripper_stream_mode: ${oc.select:abc.arc_gripper_stream_mode,events}
gripper_distance_unit: ${oc.select:abc.arc_gripper_distance,null}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,5 +89,5 @@ evaluator:
streams: ${abc.arc_streams}
logger:
wandb:
id: ${name}_s42
id: ${name}_s${seed}
tags: [rl2, hpt300, "${abc.arc_clock_mode}", "${abc.arc_streams}", open_loop, video]
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,6 @@ defaults:
- /experiment/real/fold_and_stack_towels/arc_vel
- _self_
name: fold_and_stack_towels_arc_dur
description: Frozen since0924plus74 towels HPT300, canonical log-duration ARC M200 D0.33 R100
description: Frozen since0924plus74 towels HPT300, canonical absolute-duration ARC M200 D0.33 R100
abc:
arc_clock_mode: duration
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ defaults:
- /experiment/real/multitask/arc_vel
- _self_
name: multitask_arc_dur
description: HPT300 ABC four-task first-delay log-duration ARC
description: HPT300 ABC four-task first-delay absolute-duration ARC
abc:
arc_clock_mode: duration
logger:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,6 @@ defaults:
- /experiment/real/organize_stationary/arc_vel
- _self_
name: organize_stationary_arc_dur
description: HPT300 robot + human organize stationery, first-delay log-duration
description: HPT300 robot + human organize stationery, first-delay absolute duration
abc:
arc_clock_mode: duration
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,6 @@ defaults:
- /experiment/real/wireless_earbuds/arc_vel
- _self_
name: wireless_earbuds_arc_dur
description: Frozen earbuds HPT300, canonical log-duration ARC M200 D0.33 R100
description: Frozen earbuds HPT300, canonical absolute-duration ARC M200 D0.33 R100
abc:
arc_clock_mode: duration
4 changes: 3 additions & 1 deletion egomimic/rldb/AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,9 @@ The root AGENTS.md applies here. Dataset/experiment selection belongs in
- `zarr/action_chunk_transforms.py`: shared pose, rotation, gripper, interpolation
and key-routing transforms. Add general transform behavior here.
- `zarr/arc_length_tokenizer.py`: Cartesian ARC with `clock_mode` velocity or
duration and `streams` full_separation (M×20) or translation_rotation (M×18).
duration (absolute seconds, speed-bounded isotonic decode) and `streams`
full_separation (M×20), translation_rotation (M×18) or translation
(M×16, one clock per arm).
See `docs/ARC_CLOCK_CONTRACT.md`; row zero is a start delay.
- `zarr/embodiment_resolvers.py`, `zarr/progress_sampler.py`: metadata overrides and
configurable anchor sampling used by the tempo recipes.
Expand Down
Loading
Loading