Robotics
LeRobot
English
OpenRAL
rskill
smolvla
vision-language-action
franka_panda
vla
maniskill
maniskill3
manipulation
Instructions to use OpenRAL/rskill-smolvla-franka_panda-maniskill3-bf16 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- LeRobot
How to use OpenRAL/rskill-smolvla-franka_panda-maniskill3-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-franka_panda-maniskill3-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-franka_panda-maniskill3-bf16 - Notebooks
- Google Colab
- Kaggle
rskill.yaml: sync to OpenRAL namespace + current schema (joint_units, evaluated_tasks, ADR-0071)
Browse files- rskill.yaml +41 -15
rskill.yaml
CHANGED
|
@@ -33,11 +33,18 @@
|
|
| 33 |
# `task.max_steps` to MS3's `max_episode_steps` so the rollout isn't
|
| 34 |
# silently truncated at MS3's default 50 steps.
|
| 35 |
#
|
| 36 |
-
# The upstream model repo
|
| 37 |
-
#
|
| 38 |
-
#
|
| 39 |
-
#
|
| 40 |
-
#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 41 |
|
| 42 |
# ββ Identity βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
| 43 |
schema_version: "0.1"
|
|
@@ -87,14 +94,15 @@ weights_uri: "hf://Calvert0921/smolvla_franka_liftcube_1000"
|
|
| 87 |
|
| 88 |
# ββ Preprocessing (all knobs needed to interpret IO) βββββββββββββββββββββββ
|
| 89 |
# Per-file URIs for the lerobot PolicyProcessorPipeline. The upstream
|
| 90 |
-
# repo
|
| 91 |
-
#
|
| 92 |
-
#
|
| 93 |
-
#
|
| 94 |
-
#
|
|
|
|
| 95 |
processors:
|
| 96 |
-
preprocessor_uri: "hf://
|
| 97 |
-
postprocessor_uri: "hf://
|
| 98 |
# Per-checkpoint knobs the processor JSONs don't encode. The model was
|
| 99 |
# trained on raw SAPIEN renders (no 180Β° flip); cameras need an alias
|
| 100 |
# remap from the in-tree scene-side keys (camera1 / camera2) to the
|
|
@@ -102,8 +110,8 @@ processors:
|
|
| 102 |
image_preprocessing:
|
| 103 |
flip_180: false
|
| 104 |
aliases:
|
| 105 |
-
|
| 106 |
-
|
| 107 |
state_contract:
|
| 108 |
dim: 9
|
| 109 |
|
|
@@ -122,6 +130,19 @@ latency_budget:
|
|
| 122 |
paper_url: "https://arxiv.org/abs/2506.01844"
|
| 123 |
dataset_uri: "hf://Calvert0921/SmolVLA_LiftCube_Franka_1000"
|
| 124 |
source_repo: "hf://Calvert0921/smolvla_franka_liftcube_1000"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 125 |
|
| 126 |
description: >
|
| 127 |
SmolVLA (0.45 B, lerobot/smolvla_base) finetuned on
|
|
@@ -149,4 +170,9 @@ action_contract:
|
|
| 149 |
dim: 8
|
| 150 |
|
| 151 |
benchmarks:
|
| 152 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 33 |
# `task.max_steps` to MS3's `max_episode_steps` so the rollout isn't
|
| 34 |
# silently truncated at MS3's default 50 steps.
|
| 35 |
#
|
| 36 |
+
# The upstream model repo (Calvert0921/smolvla_franka_liftcube_1000)
|
| 37 |
+
# ships only config.json + model.safetensors + train_config.json β no
|
| 38 |
+
# `policy_*processor.json`. Rather than rely on the SmolVLA adapter's
|
| 39 |
+
# dataset-stats fallback at every load (a 404 + recompute against
|
| 40 |
+
# `dataset_uri`'s `meta/episodes_stats.jsonl`), the processor pair was
|
| 41 |
+
# rebuilt once via `make_pre_post_processors(policy.config,
|
| 42 |
+
# dataset_stats=...)` and uploaded to THIS rSkill's own HF repo
|
| 43 |
+
# (OpenRAL/rskill-smolvla-maniskill-franka). The rebuilt normalizer
|
| 44 |
+
# stats match the checkpoint's baked `normalize_inputs` /
|
| 45 |
+
# `normalize_targets` buffers exactly, so the processors are faithful to
|
| 46 |
+
# how the model was trained. The fallback path still exists for any
|
| 47 |
+
# other community finetune uploaded without processors.
|
| 48 |
|
| 49 |
# ββ Identity βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
| 50 |
schema_version: "0.1"
|
|
|
|
| 94 |
|
| 95 |
# ββ Preprocessing (all knobs needed to interpret IO) βββββββββββββββββββββββ
|
| 96 |
# Per-file URIs for the lerobot PolicyProcessorPipeline. The upstream
|
| 97 |
+
# weights repo ships no `policy_*processor.json`, so the pair (plus the
|
| 98 |
+
# normalizer/unnormalizer `*.safetensors` state files referenced by the
|
| 99 |
+
# JSON `steps`) was rebuilt from the checkpoint config + training-dataset
|
| 100 |
+
# stats and uploaded to this rSkill's own HF repo. `materialize_processor_dir`
|
| 101 |
+
# downloads exactly these files (and their `state_file` siblings) β no 404,
|
| 102 |
+
# no dataset-stats recompute at load time.
|
| 103 |
processors:
|
| 104 |
+
preprocessor_uri: "hf://OpenRAL/rskill-smolvla-maniskill-franka/policy_preprocessor.json"
|
| 105 |
+
postprocessor_uri: "hf://OpenRAL/rskill-smolvla-maniskill-franka/policy_postprocessor.json"
|
| 106 |
# Per-checkpoint knobs the processor JSONs don't encode. The model was
|
| 107 |
# trained on raw SAPIEN renders (no 180Β° flip); cameras need an alias
|
| 108 |
# remap from the in-tree scene-side keys (camera1 / camera2) to the
|
|
|
|
| 110 |
image_preprocessing:
|
| 111 |
flip_180: false
|
| 112 |
aliases:
|
| 113 |
+
top: "up"
|
| 114 |
+
wrist: "wrist"
|
| 115 |
state_contract:
|
| 116 |
dim: 9
|
| 117 |
|
|
|
|
| 130 |
paper_url: "https://arxiv.org/abs/2506.01844"
|
| 131 |
dataset_uri: "hf://Calvert0921/SmolVLA_LiftCube_Franka_1000"
|
| 132 |
source_repo: "hf://Calvert0921/smolvla_franka_liftcube_1000"
|
| 133 |
+
# Task-data gate (ADR-0060): this checkpoint was trained on the *LiftCube*
|
| 134 |
+
# dataset (a ManiSkill2-style "lift the cube to a height" task) which has NO
|
| 135 |
+
# equivalent env in ManiSkill3 3.0.1 β MS3 ships PickCube-v1 (grasp + place at
|
| 136 |
+
# a goal + stay static), a different task. Declaring the (MS3-absent) true task
|
| 137 |
+
# makes the benchmark runner refuse every real MS3 scene with
|
| 138 |
+
# ROSCapabilityMismatch. Verified empirically 2026-06-19: retargeted to
|
| 139 |
+
# PickCube-v1 it runs (50 steps, ~15 ms/step real inference) and attempts the
|
| 140 |
+
# cube but cannot satisfy PickCube's goal-placement success (success=False) β
|
| 141 |
+
# exactly the plausible-but-unsolvable rollout the gate exists to block. This
|
| 142 |
+
# rSkill therefore has no valid MS3 benchmark; replace with a PickCube-trained
|
| 143 |
+
# policy (e.g. the author's PegInsertion checkpoint -> PegInsertionSide-v1, or
|
| 144 |
+
# an MS3 OpenVLA-OFT policy) before pairing it with a maniskill scene.
|
| 145 |
+
evaluated_tasks: ["maniskill3/LiftCube"]
|
| 146 |
|
| 147 |
description: >
|
| 148 |
SmolVLA (0.45 B, lerobot/smolvla_base) finetuned on
|
|
|
|
| 170 |
dim: 8
|
| 171 |
|
| 172 |
benchmarks:
|
| 173 |
+
# PickCube-v1 via the curated franka_panda suite `maniskill3_panda`
|
| 174 |
+
# (auto-filters to this rSkill's task). 0.0 = the shipped LiftCube
|
| 175 |
+
# checkpoint cannot satisfy PickCube's goal-placement success (task
|
| 176 |
+
# mismatch β see the MS3 LiftCube-gap note above); replace with a
|
| 177 |
+
# PickCube-trained policy to lift this.
|
| 178 |
+
maniskill3_panda: 0.0
|