docs/source/robocerebra.mdx
RoboCerebra is a long-horizon manipulation benchmark that evaluates high-level reasoning, planning, and memory in VLAs. Episodes chain multiple sub-goals with language-grounded intermediate instructions, built on top of LIBERO's simulator stack (MuJoCo + robosuite, Franka Panda 7-DOF).
lerobot/robocerebra_unified — LeRobot v3.0, 6,660 episodes / 571,116 frames at 20 fps, 1,728 language-grounded sub-tasks.lerobot/smolvla_robocerebraRoboCerebra reuses LIBERO's simulator, so evaluation runs against the LIBERO libero_10 long-horizon suite:
| Suite | CLI name | Tasks | Description |
|---|---|---|---|
| LIBERO-10 | libero_10 | 10 | Long-horizon kitchen/living room tasks chaining 3–6 sub-goals |
Each RoboCerebra episode in the dataset is segmented into multiple sub-tasks with natural-language instructions, which the unified dataset exposes as independent supervision signals.
RoboCerebra piggybacks on LIBERO, so the libero extra is all you need:
pip install -e ".[libero]"
export MUJOCO_GL=egl # for headless servers (HPC, cloud)
RoboCerebra eval runs against LIBERO's libero_10 suite with RoboCerebra's camera naming (image + wrist_image) and an extra empty-camera slot so a three-view-trained policy receives the expected input layout:
lerobot-eval \
--policy.path=lerobot/smolvla_robocerebra \
--env.type=libero \
--env.task=libero_10 \
--env.fps=20 \
--env.obs_type=pixels_agent_pos \
--env.observation_height=256 \
--env.observation_width=256 \
'--env.camera_name_mapping={"agentview_image": "image", "robot0_eye_in_hand_image": "wrist_image"}' \
--eval.batch_size=1 \
--eval.n_episodes=10 \
--eval.use_async_envs=false \
--policy.device=cuda \
'--rename_map={"observation.images.image": "observation.images.camera1", "observation.images.wrist_image": "observation.images.camera2"}' \
--policy.empty_cameras=1
10 episodes per task across the libero_10 suite (100 total) for reproducible benchmarking. Matches the protocol used in the RoboCerebra paper.
Observations:
observation.state — 8-dim proprioceptive state (7 joint positions + gripper)observation.images.image — third-person view, 256×256 HWC uint8observation.images.wrist_image — wrist-mounted camera view, 256×256 HWC uint8Actions:
Box(-1, 1, shape=(7,)) — end-effector delta (6D) + gripper (1D)The unified dataset at lerobot/robocerebra_unified exposes two RGB streams and language-grounded sub-task annotations:
| Feature | Shape | Description |
|---|---|---|
observation.images.image | (256, 256, 3) | Third-person view |
observation.images.wrist_image | (256, 256, 3) | Wrist-mounted camera |
observation.state | (8,) | Joint pos + gripper |
action | (7,) | EEF delta + gripper |
Fine-tune a SmolVLA base on it:
lerobot-train \
--policy.path=lerobot/smolvla_base \
--dataset.repo_id=lerobot/robocerebra_unified \
--env.type=libero \
--env.task=libero_10 \
--output_dir=outputs/smolvla_robocerebra
The released checkpoint lerobot/smolvla_robocerebra was trained on lerobot/robocerebra_unified and evaluated with the command in the Evaluation section. CI runs the same command with --eval.n_episodes=1 as a smoke test on every PR touching the benchmark.