Instructions to use Bigenlight/act_carrot_in_pot_ee with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- LeRobot
How to use Bigenlight/act_carrot_in_pot_ee with LeRobot:
- Notebooks
- Google Colab
- Kaggle
File size: 3,257 Bytes
30ba1a0 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | ---
license: cc-by-nc-4.0
library_name: lerobot
pipeline_tag: robotics
tags:
- robotics
- lerobot
- act
- imitation-learning
- ur7e
- end-effector
---
# ACT · carrot-in-pot · EEF-delta (state 16 / action 7) — checkpoint 10k
Action Chunking Transformer trained on the **real** UR7e *"Put carrot in pot"* demonstrations
(54 GELLO-teleop takes, 30 fps) in the **EEF-delta action space** (`eef_delta_v1`). This is the
**10k-step checkpoint**, picked as the least-overfit of 10k..50k — all were within 0.04 mm of each
other on the open-loop metric.
Joint-space siblings for this task live in the sim evaluation (`sim_collect/eval`), the IFQL
policy in [`Bigenlight/carrot-in-pot-ifql`](https://huggingface.co/Bigenlight/carrot-in-pot-ifql).
## Observation / action space (`eef_delta_v1`)
- `observation.state` **16-D** = `[q1..q6 (rad, UR order), tcp_x, tcp_y, tcp_z (m, base_link),
r11, r21, r31, r12, r22, r32 (first two columns of the TCP rotation — continuous 6-D rep),
grip_pos (0=open..1=closed)]`. TCP = `ur_kin.fk(q)` (base_link→tool0) + 0.174 m along flange +Z.
- `action` **7-D** = `[dx, dy, dz, drx, dry, drz, grip_cmd]`: the **achieved** TCP motion between
consecutive 30 fps frames (`dp = p_{t+1}-p_t`, `drot = so3_log(R_{t+1} R_t^T)`, base frame,
rotation left-multiplied), gripper = absolute recorded command 0..1. Deploy inverts it exactly
(`p_target = p_live + dp`, `R_target = so3_exp(drot) R_live`, analytic IK with branch locking).
- Cameras: `observation.images.cam1` (scene), `cam2` (wrist), RGB 720×1280 in the dataset,
**resized to 360×640 at train time** (`image_transforms.resize`) — resize the same way at inference.
- Backbone ResNet18 (ImageNet), `chunk_size = n_action_steps = 100`, MEAN_STD normalization,
~51.6M params.
## Training
- Dataset: `carrot_in_pot_eef_lerobot_v3` — a local LeRobot v3 re-export of
[`Bigenlight/carrot_in_pot_lerobot_v3`](https://huggingface.co/datasets/Bigenlight/carrot_in_pot_lerobot_v3)
(54 episodes / 17,085 frames after dropping the stale tail; joints shifted by the recorder's
per-take τ≈0.90 s cache lag and linearly re-interpolated). The EEF re-export is **not yet on
the Hub** (train_config names it `Bigenlight/carrot_in_pot_eef_lerobot_v3`).
- `lerobot-train`, batch 8, seed 1000, 50k steps configured (`save_freq` 10k), `eval_split 0.111`
(held-out episodes 48–53), single RTX A4000 (kanu). Job `act_carrot_eef`.
## Held-out results (open-loop, episodes 48–53, k=30)
| checkpoint | pos MAE | grip acc | chunk-30 cumulative error |
|---|---|---|---|
| **10k (this)** | 0.82–0.86 mm (all ckpts) | 0.95 | 36.6–38.0 mm vs 65.6 mm zero-motion baseline |
All checkpoints 10k–50k are statistically indistinguishable on this metric; 10k was chosen as
least-overfit. lerobot's own `eval_loss` is computed on un-resized 720p and was **not** used.
## Status
Real-robot closed-loop evaluation: **not yet run** (the deploy path is EEF mode of
`gello_policy/policy_leader_node` + `eef_space.apply_delta`; the shipped ZMQ servers are
joint-space 7/7 and refuse this checkpoint's 16-D state). Provenance: gello_software branch
`feat/carrot-eef-il` (converter `scripts/dataset/convert_carrot_to_lerobot_eef.py`, validator 71/71 PASS).
|