Robotics
LeRobot
English
OpenRAL
rskill
smolvla
vision-language-action
aloha_agilex
vla
robotwin
bimanual
manipulation
Instructions to use OpenRAL/rskill-smolvla-aloha_agilex-robotwin-bf16 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- LeRobot
How to use OpenRAL/rskill-smolvla-aloha_agilex-robotwin-bf16 with LeRobot:
# See https://github.com/huggingface/lerobot?tab=readme-ov-file#installation for more details git clone https://github.com/huggingface/lerobot.git cd lerobot pip install -e .[smolvla]
# Launch finetuning on your dataset python lerobot/scripts/train.py \ --policy.path=OpenRAL/rskill-smolvla-aloha_agilex-robotwin-bf16 \ --dataset.repo_id=lerobot/svla_so101_pickplace \ --batch_size=64 \ --steps=20000 \ --output_dir=outputs/train/my_smolvla \ --job_name=my_smolvla_training \ --policy.device=cuda \ --wandb.enable=true
# Run the policy using the record function python -m lerobot.record \ --robot.type=so101_follower \ --robot.port=/dev/ttyACM0 \ # <- Use your port --robot.id=my_blue_follower_arm \ # <- Use your robot id --robot.cameras="{ front: {type: opencv, index_or_path: 8, width: 640, height: 480, fps: 30}}" \ # <- Use your cameras --dataset.single_task="Grasp a lego block and put it in the bin." \ # <- Use the same task description you used in your dataset recording --dataset.repo_id=HF_USER/dataset_name \ # <- This will be the dataset name on HF Hub --dataset.episode_time_s=50 \ --dataset.num_episodes=10 \ --policy.path=OpenRAL/rskill-smolvla-aloha_agilex-robotwin-bf16 - Notebooks
- Google Colab
- Kaggle
chore: publish rSkill OpenRAL/rskill-smolvla-robotwin v0.1.0
Browse files- README.md +123 -0
- SKILL.md +74 -0
- eval/.gitkeep +0 -0
- rskill.yaml +146 -0
README.md
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
tags:
|
| 3 |
+
- OpenRAL
|
| 4 |
+
- rskill
|
| 5 |
+
- smolvla
|
| 6 |
+
- lerobot
|
| 7 |
+
- vla
|
| 8 |
+
- aloha_agilex
|
| 9 |
+
- robotwin
|
| 10 |
+
- bimanual
|
| 11 |
+
- manipulation
|
| 12 |
+
license: apache-2.0
|
| 13 |
+
language:
|
| 14 |
+
- en
|
| 15 |
+
---
|
| 16 |
+
|
| 17 |
+
# rskill-smolvla-robotwin
|
| 18 |
+
|
| 19 |
+
> **OpenRAL rSkill** β SmolVLA (0.45 B) finetuned on the **RoboTwin 2.0** unified
|
| 20 |
+
> dual-arm dataset (50 bimanual SAPIEN tasks, aloha-agilex embodiment), packaged for
|
| 21 |
+
> use with the [OpenRAL](https://github.com/OpenRAL/openral) robot agent framework.
|
| 22 |
+
|
| 23 |
+
This package wraps
|
| 24 |
+
[`lerobot/smolvla_robotwin`](https://huggingface.co/lerobot/smolvla_robotwin) with a
|
| 25 |
+
`rskill.yaml` manifest that adds capability checking, license surfacing, latency
|
| 26 |
+
budgets, and local registry integration. It does **not** copy model weights.
|
| 27 |
+
|
| 28 |
+
## What this skill does
|
| 29 |
+
|
| 30 |
+
A multi-task dual-arm policy for the RoboTwin 2.0 benchmark
|
| 31 |
+
([Chen et al., arXiv 2506.18088](https://arxiv.org/abs/2506.18088)). Action chunks of
|
| 32 |
+
length 50 across three RGB views (head + per-wrist) driving a 14-DoF dual-arm joint
|
| 33 |
+
command on the AgileX "aloha-agilex" embodiment.
|
| 34 |
+
|
| 35 |
+
| Field | Value |
|
| 36 |
+
| --- | --- |
|
| 37 |
+
| Actions | `generalist`, `pick`, `place`, `transfer` |
|
| 38 |
+
| Objects | `block`, `pot`, `cup`, `hammer` |
|
| 39 |
+
| Scenes | `tabletop` |
|
| 40 |
+
| Embodiment | `aloha_agilex` |
|
| 41 |
+
| Action space | 14-D joint position |
|
| 42 |
+
| Cameras | `camera1` (head), `camera2` (left wrist), `camera3` (right wrist), 256Γ256 |
|
| 43 |
+
|
| 44 |
+
## How it works
|
| 45 |
+
|
| 46 |
+
OpenRAL loads the upstream LeRobot SmolVLA policy from `hf://lerobot/smolvla_robotwin`
|
| 47 |
+
and uses the in-tree `smolvla` adapter to run chunked inference. RoboTwin itself runs in a
|
| 48 |
+
separate SAPIEN/CuRobo sidecar; the sidecar returns three RGB views plus the 14-D
|
| 49 |
+
aloha-agilex joint state, and the adapter replays 50-action chunks as absolute 14-D joint
|
| 50 |
+
position commands.
|
| 51 |
+
|
| 52 |
+
## Sensors / observation contract
|
| 53 |
+
|
| 54 |
+
| Direction | Key | Shape | Notes |
|
| 55 |
+
| --- | --- | --- | --- |
|
| 56 |
+
| in | `observation.images.camera1` | `(3, 256, 256)` RGB | Head / overhead view, re-keyed from RoboTwin `head_camera`. |
|
| 57 |
+
| in | `observation.images.camera2` | `(3, 256, 256)` RGB | Left wrist view, re-keyed from RoboTwin `left_camera`. |
|
| 58 |
+
| in | `observation.images.camera3` | `(3, 256, 256)` RGB | Right wrist view, re-keyed from RoboTwin `right_camera`. |
|
| 59 |
+
| in | `observation.state` | `(14,) float32` | aloha-agilex dual-arm joint state. |
|
| 60 |
+
| out | action chunk | `(50, 14) float32` | Absolute dual-arm joint position commands. |
|
| 61 |
+
|
| 62 |
+
## Manifest summary
|
| 63 |
+
|
| 64 |
+
| Field | Value |
|
| 65 |
+
| --- | --- |
|
| 66 |
+
| `name` | `OpenRAL/rskill-smolvla-robotwin` |
|
| 67 |
+
| `version` | `0.1.0` |
|
| 68 |
+
| `license` | `apache-2.0` |
|
| 69 |
+
| `role` | `s1` |
|
| 70 |
+
| `model_family` | `smolvla` |
|
| 71 |
+
| `embodiment_tags` | `aloha_agilex` |
|
| 72 |
+
| `runtime` / `quantization.dtype` | `pytorch` / `bf16` |
|
| 73 |
+
| `weights_uri` | `hf://lerobot/smolvla_robotwin` |
|
| 74 |
+
| `state_contract.dim` / `action_contract.dim` | `14` / `14` |
|
| 75 |
+
| `chunk_size` / `n_action_steps` | `50` / `50` |
|
| 76 |
+
| `latency_budget.per_chunk_ms` | `250.0` |
|
| 77 |
+
| `evaluated_tasks` | `robotwin` |
|
| 78 |
+
|
| 79 |
+
## How to run it
|
| 80 |
+
|
| 81 |
+
RoboTwin runs on **SAPIEN** out-of-process via a Python 3.10 sidecar
|
| 82 |
+
([ADR-0061](../../docs/adr/0061-robotwin-dual-arm-benchmark-backend.md)) β its stack is
|
| 83 |
+
incompatible with the openral 3.12 venv. Provision the sidecar venv, then:
|
| 84 |
+
|
| 85 |
+
```bash
|
| 86 |
+
# openral-side wire (pyzmq + msgpack)
|
| 87 |
+
just sync --all-packages --group robotwin --inexact
|
| 88 |
+
|
| 89 |
+
# single task
|
| 90 |
+
openral benchmark scene \
|
| 91 |
+
--config scenes/benchmark/robotwin_lift_pot.yaml \
|
| 92 |
+
--rskill rskills/smolvla-robotwin
|
| 93 |
+
|
| 94 |
+
# the 5-task suite
|
| 95 |
+
openral benchmark run --suite robotwin --vla smolvla:rskills/smolvla-robotwin
|
| 96 |
+
```
|
| 97 |
+
|
| 98 |
+
See ADR-0061 for the SAPIEN+RoboTwin sidecar provisioning recipe
|
| 99 |
+
(`OPENRAL_ROBOTWIN_AUTO_PROVISION=1` or the manual conda recipe).
|
| 100 |
+
|
| 101 |
+
## Provenance
|
| 102 |
+
|
| 103 |
+
- **Weights:** [`lerobot/smolvla_robotwin`](https://huggingface.co/lerobot/smolvla_robotwin)
|
| 104 |
+
(Apache-2.0), base [`lerobot/smolvla_base`](https://huggingface.co/lerobot/smolvla_base).
|
| 105 |
+
- **Dataset:** [`lerobot/robotwin_unified`](https://huggingface.co/datasets/lerobot/robotwin_unified)
|
| 106 |
+
(Apache-2.0; `pepijn223/robotwin_unified_v3` renamed).
|
| 107 |
+
- **Eval protocol:** RoboTwin official β 100 episodes/task, sim built-in success,
|
| 108 |
+
`episode_length=300`. No locally-reproduced official numbers shipped yet (`eval/` is empty).
|
| 109 |
+
The current website artifact is a 150-step GPU `openral benchmark scene` smoke clip
|
| 110 |
+
(`robotwin_smolvla-robotwin_fail.mp4`, `success=False`) for visual validation only;
|
| 111 |
+
populate `eval/` with `openral benchmark run --suite robotwin` on the eval host.
|
| 112 |
+
|
| 113 |
+
> **STATE NOTE:** the live RoboTwin sidecar returns a 14-D aloha-agilex state, and the
|
| 114 |
+
> official `policy_preprocessor.json` normalization stats expect `observation.state`
|
| 115 |
+
> shape `(14,)`; `rskill.yaml` pins `state_contract.dim: 14` accordingly
|
| 116 |
+
> (ADR-0061 Β§Live verification).
|
| 117 |
+
|
| 118 |
+
## License
|
| 119 |
+
|
| 120 |
+
This rSkill wrapper, the upstream `lerobot/smolvla_robotwin` checkpoint, and the
|
| 121 |
+
`lerobot/robotwin_unified` dataset are Apache-2.0. The package does not copy weights into
|
| 122 |
+
this repository; runtime loading still emits OpenRAL's unverified-provenance warning until
|
| 123 |
+
the planned signing control exists.
|
SKILL.md
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
name: smolvla-robotwin
|
| 3 |
+
description: >-
|
| 4 |
+
S1 Vision-Language-Action policy. Capabilities: generalist, pick, place, transfer on block, pot, cup, hammer. SmolVLA (0.45 B, lerobot/smolvla_base) finetuned on the RoboTwin 2.0 unified dataset (50 dual-arm tasks, aloha-agilex embodiment, SAPIEN). Multi-task: action chunks of length 50 across three RGB views (head + per-wrist) driving a 14-DoF dual-arm joint command. Runs on the RoboTwin scene backend through the out-of-process py3.10 SAPIEN sidecar (ADR-0061). Discovery view of an OpenRAL rSkill β NOT directly runnable by an agent harness; it runs via rSkill.from_pretrained + the robot HAL.
|
| 5 |
+
metadata:
|
| 6 |
+
openral_rskill: true # generated discovery view of an rSkill
|
| 7 |
+
schema_version: 0.1
|
| 8 |
+
rskill_id: OpenRAL/rskill-smolvla-robotwin
|
| 9 |
+
manifest: ./rskill.yaml
|
| 10 |
+
role: s1
|
| 11 |
+
kind: vla
|
| 12 |
+
model_family: smolvla
|
| 13 |
+
embodiment_tags: [aloha_agilex]
|
| 14 |
+
actions: [generalist, pick, place, transfer]
|
| 15 |
+
objects: [block, pot, cup, hammer]
|
| 16 |
+
scenes: [tabletop]
|
| 17 |
+
sensors_required: ['rgb:observation.images.camera1', 'rgb:observation.images.camera2', 'rgb:observation.images.camera3']
|
| 18 |
+
state_dim: 6
|
| 19 |
+
action_dim: 14
|
| 20 |
+
runtime: pytorch
|
| 21 |
+
quantization: bf16/pytorch
|
| 22 |
+
chunk_size: 50
|
| 23 |
+
n_action_steps: 50
|
| 24 |
+
latency_budget: {per_chunk_ms: 250.0}
|
| 25 |
+
license_code: Apache-2.0
|
| 26 |
+
license_weights: apache-2.0
|
| 27 |
+
weights_uri: hf://lerobot/smolvla_robotwin
|
| 28 |
+
source_repo: hf://lerobot/smolvla_robotwin
|
| 29 |
+
paper_url: https://arxiv.org/abs/2506.18088
|
| 30 |
+
---
|
| 31 |
+
|
| 32 |
+
# smolvla-robotwin β rSkill discovery view
|
| 33 |
+
|
| 34 |
+
> **Generated view, not a hand-written skill.** This `SKILL.md` is a discovery-only
|
| 35 |
+
> mirror of [`rskill.yaml`](./rskill.yaml), produced by `tools/generate_rskill_skillmd.py`.
|
| 36 |
+
> It lets tools that read the standard agent-skill format find and reason about this
|
| 37 |
+
> OpenRAL rSkill. The `rskill.yaml` manifest is the single source of truth
|
| 38 |
+
> (CLAUDE.md Β§1.3). Do not edit by hand β edit the manifest and regenerate.
|
| 39 |
+
|
| 40 |
+
## What it is
|
| 41 |
+
|
| 42 |
+
An OpenRAL **Vision-Language-Action policy** (`role: s1`, `kind: vla`). SmolVLA (0.45 B, lerobot/smolvla_base) finetuned on the RoboTwin 2.0 unified dataset (50 dual-arm tasks, aloha-agilex embodiment, SAPIEN). Multi-task: action chunks of length 50 across three RGB views (head + per-wrist) driving a 14-DoF dual-arm joint command. Runs on the RoboTwin scene backend through the out-of-process py3.10 SAPIEN sidecar (ADR-0061).
|
| 43 |
+
|
| 44 |
+
## Capabilities
|
| 45 |
+
|
| 46 |
+
- **Verbs:** generalist Β· pick Β· place Β· transfer
|
| 47 |
+
- **Objects:** block Β· pot Β· cup Β· hammer
|
| 48 |
+
- **Scenes:** tabletop
|
| 49 |
+
- **Embodiments:** aloha_agilex
|
| 50 |
+
|
| 51 |
+
## Why this is discovery-only
|
| 52 |
+
|
| 53 |
+
An agent skill is natural-language instructions loaded into an LLM's context. An rSkill
|
| 54 |
+
is an executable artifact: it carries a typed capability/embodiment contract, model weights,
|
| 55 |
+
a runtime, and a license/provenance gate β none of which fit in freeform markdown. So an
|
| 56 |
+
agent can use this view to *select* the right skill, but cannot *execute* it by loading
|
| 57 |
+
this file. Execution always goes through the OpenRAL loader and the robot HAL.
|
| 58 |
+
|
| 59 |
+
## License
|
| 60 |
+
|
| 61 |
+
- **Code:** Apache-2.0.
|
| 62 |
+
- **Weights:** `apache-2.0` β permissive / commercial-use OK
|
| 63 |
+
|
| 64 |
+
## How to actually run it (not via an agent harness)
|
| 65 |
+
|
| 66 |
+
```python
|
| 67 |
+
from openral_rskill import rSkill
|
| 68 |
+
|
| 69 |
+
skill = rSkill.from_pretrained("OpenRAL/rskill-smolvla-robotwin")
|
| 70 |
+
# the loader validates embodiment / sensors / runtime / quantization against the target
|
| 71 |
+
# RobotDescription and enforces the weight-license gate before any weights load.
|
| 72 |
+
```
|
| 73 |
+
|
| 74 |
+
See [`rskill.yaml`](./rskill.yaml) for the authoritative, validated manifest.
|
eval/.gitkeep
ADDED
|
File without changes
|
rskill.yaml
ADDED
|
@@ -0,0 +1,146 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# rSkill manifest β OpenRAL packaging format V1 (CLAUDE.md Β§6.4)
|
| 2 |
+
# Wraps: lerobot/smolvla_robotwin (Apache-2.0)
|
| 3 |
+
# Base: lerobot/smolvla_base (arxiv:2506.01844)
|
| 4 |
+
# Dataset: lerobot/robotwin_unified (== pepijn223/robotwin_unified_v3, renamed)
|
| 5 |
+
#
|
| 6 |
+
# Official LeRobot SmolVLA finetune on the RoboTwin 2.0 unified dataset
|
| 7 |
+
# (Chen et al., arXiv 2506.18088). Multi-task across the 50 dual-arm
|
| 8 |
+
# tasks on the aloha-agilex embodiment. Routed via the in-tree `smolvla`
|
| 9 |
+
# adapter (model_family: smolvla).
|
| 10 |
+
#
|
| 11 |
+
# Wired from the checkpoint's config.json (the inference authority):
|
| 12 |
+
# type: smolvla
|
| 13 |
+
# input_features:
|
| 14 |
+
# observation.state shape (6,) β see STATE NOTE below
|
| 15 |
+
# observation.images.camera1 shape (3,256,256) β head / overhead
|
| 16 |
+
# observation.images.camera2 shape (3,256,256) β left wrist
|
| 17 |
+
# observation.images.camera3 shape (3,256,256) β right wrist
|
| 18 |
+
# output_features:
|
| 19 |
+
# action shape (14,) β 14-DoF dual-arm joints
|
| 20 |
+
# chunk_size: 50 n_action_steps: 50 flow-matching steps: 10
|
| 21 |
+
# normalization: STATE/ACTION MEAN_STD, VISUAL IDENTITY
|
| 22 |
+
#
|
| 23 |
+
# Camera-name mapping
|
| 24 |
+
# -------------------
|
| 25 |
+
# RoboTwin's native LeRobot env cameras are head_camera / left_camera /
|
| 26 |
+
# right_camera; the RoboTwin sidecar (tools/robotwin_sidecar.py) re-keys
|
| 27 |
+
# them to camera1 / camera2 / camera3 (headβleftβright) so they match
|
| 28 |
+
# this checkpoint's input_features and the robots/aloha_agilex sensors β
|
| 29 |
+
# no per-skill alias remap needed.
|
| 30 |
+
#
|
| 31 |
+
# STATE NOTE: the RoboTwin sidecar reset returns a 14-D aloha-agilex state
|
| 32 |
+
# vector, and the official policy_preprocessor.json normalization stats also
|
| 33 |
+
# expect observation.state shape (14,). `state_contract.dim` therefore follows
|
| 34 |
+
# the live env + processor contract.
|
| 35 |
+
|
| 36 |
+
# ββ Identity βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
| 37 |
+
schema_version: "0.1"
|
| 38 |
+
name: "OpenRAL/rskill-smolvla-robotwin"
|
| 39 |
+
version: "0.1.0"
|
| 40 |
+
license: "apache-2.0"
|
| 41 |
+
role: "s1"
|
| 42 |
+
kind: "vla" # learnable Vision-Language-Action policy
|
| 43 |
+
|
| 44 |
+
# ββ Policy identity ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
| 45 |
+
model_family: "smolvla"
|
| 46 |
+
|
| 47 |
+
# ββ Compatibility contract βββββββββββββββββββββββββββββββββββββββββββββββββ
|
| 48 |
+
# RoboTwin 2.0 default embodiment: AgileX dual-arm (robots/aloha_agilex).
|
| 49 |
+
embodiment_tags:
|
| 50 |
+
- "aloha_agilex"
|
| 51 |
+
|
| 52 |
+
# Three RGB streams matching the checkpoint's input_features. The
|
| 53 |
+
# aloha_agilex RobotDescription declares matching camera1 / camera2 /
|
| 54 |
+
# camera3 sensors so the compatibility check resolves cleanly.
|
| 55 |
+
sensors_required:
|
| 56 |
+
- modality: "rgb"
|
| 57 |
+
vla_feature_key: "observation.images.camera1"
|
| 58 |
+
min_width: 256
|
| 59 |
+
min_height: 256
|
| 60 |
+
- modality: "rgb"
|
| 61 |
+
vla_feature_key: "observation.images.camera2"
|
| 62 |
+
min_width: 256
|
| 63 |
+
min_height: 256
|
| 64 |
+
- modality: "rgb"
|
| 65 |
+
vla_feature_key: "observation.images.camera3"
|
| 66 |
+
min_width: 256
|
| 67 |
+
min_height: 256
|
| 68 |
+
|
| 69 |
+
# Output side (ADR-0013). 14-DoF dual-arm joint command. For aloha_agilex
|
| 70 |
+
# the loader auto-fills n_dof (14) + vla_action_key from
|
| 71 |
+
# robots/aloha_agilex/robot.yaml.
|
| 72 |
+
actuators_required:
|
| 73 |
+
- kind: "joint_position"
|
| 74 |
+
control_mode_semantics:
|
| 75 |
+
mode: "absolute"
|
| 76 |
+
|
| 77 |
+
# ββ Runtime / weights ββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
| 78 |
+
runtime: "pytorch"
|
| 79 |
+
quantization:
|
| 80 |
+
dtype: "bf16"
|
| 81 |
+
backend: "pytorch"
|
| 82 |
+
weights_uri: "hf://lerobot/smolvla_robotwin@967623a0f38c7e1236c66b3893c830398d793ff7"
|
| 83 |
+
|
| 84 |
+
# ββ Preprocessing (all knobs needed to interpret IO) βββββββββββββββββββββββ
|
| 85 |
+
# The official checkpoint ships the lerobot PolicyProcessorPipeline JSONs
|
| 86 |
+
# (policy_preprocessor.json + policy_postprocessor.json) plus their
|
| 87 |
+
# `*_normalizer_processor.safetensors` siblings, so we point at them directly β
|
| 88 |
+
# `materialize_processor_dir` auto-pulls the sibling safetensors. No
|
| 89 |
+
# dataset-stats rebuild fallback needed. Trained on raw SAPIEN renders (no flip).
|
| 90 |
+
processors:
|
| 91 |
+
preprocessor_uri: "hf://lerobot/smolvla_robotwin/policy_preprocessor.json"
|
| 92 |
+
postprocessor_uri: "hf://lerobot/smolvla_robotwin/policy_postprocessor.json"
|
| 93 |
+
image_preprocessing:
|
| 94 |
+
flip_180: false
|
| 95 |
+
state_contract:
|
| 96 |
+
dim: 14
|
| 97 |
+
|
| 98 |
+
# ββ Execution semantics ββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
| 99 |
+
# Matches the checkpoint's config.json (chunk_size=50, n_action_steps=50).
|
| 100 |
+
chunk_size: 50
|
| 101 |
+
n_action_steps: 50
|
| 102 |
+
latency_budget:
|
| 103 |
+
per_chunk_ms: 250.0 # SmolVLA bf16 β 80β150 ms/chunk + SAPIEN step headroom
|
| 104 |
+
|
| 105 |
+
# ββ Provenance βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
| 106 |
+
# No benchmarks shipped yet β see eval/.gitkeep. Populated by
|
| 107 |
+
# `openral benchmark run --suite robotwin` once the SAPIEN sidecar venv is
|
| 108 |
+
# provisioned (ADR-0061). RoboTwin leaderboard SmolVLA-class baselines for
|
| 109 |
+
# reference (Pi0 46.4/16.3 Easy/Hard) are paper-cited, not reproduced here.
|
| 110 |
+
paper_url: "https://arxiv.org/abs/2506.18088"
|
| 111 |
+
dataset_uri: "hf://lerobot/robotwin_unified"
|
| 112 |
+
source_repo: "hf://lerobot/smolvla_robotwin"
|
| 113 |
+
|
| 114 |
+
description: >
|
| 115 |
+
SmolVLA (0.45 B, lerobot/smolvla_base) finetuned on the RoboTwin 2.0
|
| 116 |
+
unified dataset (50 dual-arm tasks, aloha-agilex embodiment, SAPIEN).
|
| 117 |
+
Multi-task: action chunks of length 50 across three RGB views
|
| 118 |
+
(head + per-wrist) driving a 14-DoF dual-arm joint command. Runs on the
|
| 119 |
+
RoboTwin scene backend through the out-of-process SAPIEN sidecar (ADR-0061).
|
| 120 |
+
|
| 121 |
+
# ββ Task-data gate (ADR-0060) ββββββββββββββββββββββββββββββββββββββββββββββ
|
| 122 |
+
# Multi-task checkpoint trained on the full robotwin_unified set, so it is
|
| 123 |
+
# valid on every RoboTwin scene. Declaring the scene id `robotwin` makes the
|
| 124 |
+
# benchmark runner accept all `robotwin/<task>` scenes (family match) and
|
| 125 |
+
# refuse non-RoboTwin scenes.
|
| 126 |
+
evaluated_tasks: ["robotwin"]
|
| 127 |
+
|
| 128 |
+
# ββ Action vocabulary (ADR-0022) βββββββββββββββββββββββββββββββββββββββββββ
|
| 129 |
+
# GENERALIST marks the multi-task foundation checkpoint; the specific verbs
|
| 130 |
+
# cover the bimanual-coordination / pick-place / stacking task families.
|
| 131 |
+
actions:
|
| 132 |
+
- "generalist"
|
| 133 |
+
- "pick"
|
| 134 |
+
- "place"
|
| 135 |
+
- "transfer"
|
| 136 |
+
objects:
|
| 137 |
+
- "block"
|
| 138 |
+
- "pot"
|
| 139 |
+
- "cup"
|
| 140 |
+
- "hammer"
|
| 141 |
+
scenes:
|
| 142 |
+
- "tabletop"
|
| 143 |
+
|
| 144 |
+
# ββ Per-checkpoint action contract (ADR-0019) ββββββββββββββββββββββββββββββ
|
| 145 |
+
action_contract:
|
| 146 |
+
dim: 14
|