Token steering for SONIC-based G1 box loco-manipulation (R15)

Training-free closed-loop steering of a frozen motion-tracking foundation model: a small offset is added to SONIC's 64-D post-quantizer tokens (g1 encoder) so the robot follows the planned walk-up more closely, using only odometry (deployable). Bases are calibrated for the R15 policy (daibfc/h2r-weights).

Files

file content
bases/A_R15_omomo_nopca.npz the steering basis A [2, 64]: token change per +1 cm forward / +1 cm lateral pelvis motion (+ fit M, r2, n)
calibration/omomo_pushes_r15.npz the 408 push experiments behind the recommended basis: U [N, 64] pushes, D [N, 2] responses (cm), clip
presets/pace_walk_nopca.yaml the run-time rule as used in our framework
steer_reference.py standalone numpy reference of the run-time rule

Algorithm (pseudocode)

Calibration (offline, once per policy; R15 step 15000):

CLIPS   = 68 clean OMOMO clips whose walk-up (start -> planned lift) is >= 1.5 s
ENVS    = each clip x 2 envs  (136 episodes per rollout, fixed seed -> same episode in the same env slot)
WINDOW  = [frame 0, planned_lift - 10 frames)          # walk-up only

# 1. baseline: no push, steering logger only (gain 0)
for each episode i:
    run policy; log e_base[i] = plan-tracking error of the pelvis at the end of WINDOW
                                (forward, lateral in the plan's heading frame, metres)

# 2. pushes: 3 rollouts x 136 episodes
for run r in 1..3:
    for each episode i:
        u = randn(64); u = 0.25 * u / ||u||           # random 64-D direction, norm exactly 0.25
        run policy; during WINDOW add u to SONIC's post-FSQ g1-encoder tokens (64-D) every step
        log e_push[i] at the end of WINDOW
        if the robot fell in either run: skip
        U.append(u);  D.append(100 * (e_base[i] - e_push[i]))   # cm the push moved the pelvis (fwd, lat)

# 3. fit (408 pairs)
M = ((U^T U + 1.0 * I)^-1 U^T D)^T                    # ridge, 2 x 64: cm of pelvis motion per unit token push
A = pinv(M)^T                                          # 2 x 64: minimum-norm token push per +1 cm fwd / +1 cm lat

Run time (every control step, 50 Hz, before the policy forward; deployable, odometry only):

e = R(plan_heading)^T * ( (plan_pelvis_xy(t) - plan_pelvis_xy(0)) - (odom_xy(t) - odom_xy(0)) )   # metres
v = clip(160 * e, -15, +15)
if ||e|| > 0.5 m or t >= planned_lift:  v = 0          # guard + walk-only gate
tokens_g1 += v @ A                                     # added to SONIC's post-FSQ g1 tokens

Why pushes: a push is random and independent of the robot's state (a randomized intervention), so U -> D is the causal effect of a token change. Without pushes (fitting the same ridge on natural run-to-run token variation), the fit learns SONIC's own reaction to being off-plan (tokens change BECAUSE the robot is behind), so the inverse points the wrong way: 0% pickup in closed loop (table below).

Download

pip install -U huggingface_hub
huggingface-cli download daibfc/h2r-steering --local-dir h2r-steering        # this basis + push data + rule
huggingface-cli download daibfc/h2r-weights --local-dir h2r-weights          # R15 policy it is calibrated for
huggingface-cli download daibfc/h2r-benchmark-feasible43 --repo-type dataset --local-dir h2r-benchmark-feasible43
import numpy as np
A = np.load("h2r-steering/bases/A_R15_omomo_nopca.npz")["A"]          # [2, 64]
z = np.load("h2r-steering/calibration/omomo_pushes_r15.npz")         # U [408, 64], D [408, 2] (cm), clip [408]
M = np.linalg.solve(z["U"].T @ z["U"] + np.eye(64), z["U"].T @ z["D"]).T
assert np.allclose(np.linalg.pinv(M).T, A, atol=1e-6)                # refit reproduces A

Benchmark results (HOI2ROI feasible43: 43 cases × 8 episodes = 344, paired episodes, R15, deployable odometry, full-size box)

steering pickup success falls
none 29.4% 20.1% 9
previous basis (PCA-16, not released) 43.6% 35.8% 9
this basis (no PCA) 54.1% 36.3% 20
PCA-8 / 16 / 32 bases (same pushes, PCA coordinates) 26.7 / 41.0 / 37.2% 20.1 / 27.0 / 26.2% 33 / 12 / 8
sham: random directions, same size as no-PCA 30.2% 18.3% 9
observational: same fit on unpushed run-to-run variation 0.0% 0.0% 59

Findings: (1) interventions are necessary: a basis fitted on natural variation steers the wrong way; (2) the calibrated directions matter, not the push size (sham); (3) offline fit quality (R²) does not rank bases: PCA bases fit better offline but steer worse in closed loop; (4) the no-PCA basis has the smallest lateral error at the end of the walk-up (5.7 vs 7.4 cm for the previous basis). Open: more falls than the previous basis (20 vs 9).

Benchmark: daibfc/h2r-benchmark-feasible43. The bases are specific to R15 (the residual changes how tokens move the robot); recalibrate for another policy. No benchmark (HOI2ROI) clip was used for calibration.

Downloads last month

-

Downloads are not tracked for this model. How to track
Video Preview
loading