Instructions to use dimofu/ACT_sim_handle_basket with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- LeRobot
How to use dimofu/ACT_sim_handle_basket with LeRobot:
# No code snippets available yet for this library. # To use this model, check the repository files and the library's documentation. # Want to help? PRs adding snippets are welcome at: # https://github.com/huggingface/huggingface.js
- Notebooks
- Google Colab
- Kaggle
ACT_sim_handle_basket (RoboSynChallenge submission checkpoint)
ACT (Action Chunking with Transformers) checkpoint for the RoboSynChallenge
handle_basket simulation task, re-packaged in the LeRobot 0.4.4 layout so
that it loads without any legacy code path.
This checkpoint is the imitation-learning component of our preliminary-round submission. It is used both
- as a stand-alone ACT baseline for
handle_basket, and - as the action-chunk generator that the submitted hybrid policy hands over to after its analytic grasp/place stage.
Provenance
| Item | Value |
|---|---|
| Upstream weights | RoboSynChallenge/ACT_sim_handle_basket |
| Upstream format | legacy LeRobot b883328 (normalization buffers stored inside model.safetensors) |
| This repository | same weights, migrated to the LeRobot 0.4.4 external pre/post-processor layout |
| Migration tool | lerobot.processor.migrate_policy_normalization with a key-restoration pass (see below) |
The migration is format-only: no weight is retrained, re-initialised or
fine-tuned. model.safetensors is byte-for-byte the upstream tensor payload.
Why a key-restoration pass was necessary
LeRobot's official migrator renames feature keys with
".".join(parts[:-1]).replace("_", "."), which turns
observation_images_cam_high into observation.images.cam.high instead of
observation.images.cam_high. Those keys never match the policy features, so
the image branch would silently stay un-normalised (a mid-grey image stays
0.5 instead of becoming roughly 0.066 after ImageNet normalisation).
The migrator was therefore followed by a pass that rewrites the state-file keys
back to the real feature names declared in config.json, and by an assertion
that normalisation actually applies:
image 0.5 -> ~0.066 (must NOT be ~0.5)
If you re-derive these files yourself, please re-run that assertion — a checkpoint that looks fine can score 0 % purely because of this key mismatch.
Files
| File | Size | Role |
|---|---|---|
model.safetensors |
206,560,504 B | ACT weights (upstream payload) |
config.json |
2,117 B | ACT policy config, chunk_size=50, n_action_steps=50 |
policy_preprocessor.json |
1,780 B | LeRobot 0.4.4 preprocessing pipeline |
policy_preprocessor_step_3_normalizer_processor.safetensors |
1,704 B | normalisation statistics |
policy_postprocessor.json |
661 B | LeRobot 0.4.4 postprocessing pipeline |
policy_postprocessor_step_0_unnormalizer_processor.safetensors |
1,704 B | de-normalisation statistics |
Interface
| Observation state | observation.state, shape [14] (obs["robot"]["qpos"]) |
| Observation images | observation.images.cam_high, observation.images.cam_right_wrist, observation.images.cam_left_wrist, each [3, 480, 640], float32 in [0, 1] |
| Action | action, shape [14]: [left_arm(0-5), left_gripper(6), right_arm(7-12), right_gripper(13)] |
| Action type | absolute joint positions |
| Chunk size | 50 predicted, 50 executed per inference (n_action_steps) |
Usage
from lerobot.policies.act.modeling_act import ACTPolicy
from lerobot.policies.factory import make_pre_post_processors
policy = ACTPolicy.from_pretrained("<this-repo>")
pre, post = make_pre_post_processors(
policy_cfg=policy.config,
pretrained_path="<this-repo>",
preprocessor_overrides={"device_processor": {"device": policy.config.device}},
postprocessor_overrides={"device_processor": {"device": "cpu"}},
)
batch = {
"observation.state": state, # [1, 14] float32
"observation.images.cam_high": img_high, # [1, 3, 480, 640] float32 in [0, 1]
"observation.images.cam_right_wrist": img_rw,
"observation.images.cam_left_wrist": img_lw,
}
action = post(policy.select_action(pre(batch))) # [1, 14]
A ready-made adapter that handles both this 0.4.4 layout and the legacy
b883328 layout is shipped in the submission repository alongside this card.
Evaluation protocol
- Task:
handle_basket, settingrandom(domain randomisation on) - Episode limit: 500 environment steps (
configs/handle_basket/random/gym_config.json) - Success criterion (official): the milk carton is inside the basket, the basket
is lifted and displaced more than 0.15 m along
+y, and all of that holds for 55 consecutive steps.
Limitations
- Simulation only. This checkpoint was trained on the released simulated
handle_basketdemonstrations; it is not a real-robot policy. - It is not a stand-alone solution for the whole task. On its own it performs the grasp/place/carry sequence at the base rate of the released ACT baseline; the submitted hybrid policy adds an analytic, RGB-only grasp-and-place stage in front of it.
- Training data, seeds and hyper-parameters are those of the upstream released checkpoint; only the on-disk format was changed here.
- Downloads last month
- 32