AllenBi21's picture
Add fixed robot runner for T3/SITR + deploy findings/fixes doc
ca18f29 verified
|
Raw History Blame Contribute Delete
3.12 kB

Real-robot deploy β€” findings & required fixes (2026-08-11)

Symptom investigated: qpos and wrench policies behave normally on hardware; HTT (in-graph), T3, and SITR policies do not.

A. T3 / SITR β€” root cause found, new runner provided

run_ACT.py feeds obs["tactile"] = wrench_1 (30-d wrench) to EVERY policy. The T3/SITR checkpoints expect the 3840-d encoder feature vector; no encoder exists anywhere in the deploy scripts. Use the new run_ACT_t3_sitr.py, which computes features live via tools/live_features.py (validated against the training features). Needs TACTILE_FUSION_ROOT/GSRL_ROOT env vars and the encoder weights (see SETUP_ENCODERS_REMOTE.md in the HF bundle).

B. HTT in-graph (run_ACT_tactile_checkpoint.py) β€” 3 line-level fixes

  1. Backgrounds captured at the wrong pose/time (primary suspect). Current order: command hand_initial_pose β†’ sleep(1) β†’ set_backgrounds (l.130) β†’ 'c' β†’ move to pose.json["pose1"] β†’ run. Training bg (tactile_bg_224) = resting frame AT the episode start configuration. FIX: move the two bg lines (l.130–131) to AFTER the pose.json move and its rospy.sleep(5) (i.e., after l.144), so bg is captured settled, at the pose the episode actually starts from, immediately before stepping:

    rospy.sleep(5)
    bg = {key: finger_image(sharpa_tactile[i]) for i, key in enumerate(FINGER_KEYS)}
    infer.set_backgrounds(bg)
    

    Also verify the fingers are NOT in contact at that pose β€” bg must be a free/rest frame, as in the dataset.

  2. inference_tactile_checkpoint.py l.112: act_cfg["n_action_steps"] = 15 hard-overrides the trained value (30). Delete the line (keep the setdefault above it) unless the 15-step re-query was a deliberate, validated choice.

  3. Control rate: rospy.Rate(50) β†’ rospy.Rate(30) in both runners. Demos are ~31 Hz; at 50 Hz chunks execute 1.6Γ— too fast AND the in-graph branch's rolling frame-pair history gets 20 ms spacing vs ~32 ms at training β€” the image-history branch is the component most sensitive to this. (qpos/wrench tolerating 50 Hz does not mean the HTT branch does.)

C. Hygiene (not the bug, but will bite eventually)

  • run_ACT.py l.41 hardcodes screw_qpos_50k while policies[arg] suggests selection β€” the log filename (l.52) records policies[3] regardless of what actually ran. Make the checkpoint path derive from the selection.
  • finger_image's arr.max() <= 1.5 float heuristic mis-scales a genuinely dark uint8-as-float frame; prefer an explicit dtype contract from the publisher.

Recommended bring-up order after fixes

  1. T3/SITR: run the live_features self-test on the robot machine first (PASS required), then run_ACT_t3_sitr.py with the hand in free space β€” confirm actions look like the demo's approach motion before touching the object.
  2. HTT: after fixes B1–B3, log policy's tactile-branch feature norm for a few seconds at rest and compare to a training episode's feature norms β€” a mismatch >2Γ— means bg is still wrong.