LeRobot documentation

RoboCerebra

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.6.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

RoboCerebra

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).

Available tasks

RoboCerebra reuses LIBERO’s simulator, so evaluation runs against the LIBERO libero_10 long-horizon suite:

SuiteCLI nameTasksDescription
LIBERO-10libero_1010Long-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.

Installation

RoboCerebra piggybacks on LIBERO, so the libero extra is all you need:

pip install -e ".[libero]"
RoboCerebra requires Linux (MuJoCo / robosuite). Set the rendering backend before training or evaluation:
export MUJOCO_GL=egl  # for headless servers (HPC, cloud)

Evaluation

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

Recommended evaluation episodes

10 episodes per task across the libero_10 suite (100 total) for reproducible benchmarking. Matches the protocol used in the RoboCerebra paper.

Policy inputs and outputs

Observations:

  • observation.state — 8-dim proprioceptive state (7 joint positions + gripper)
  • observation.images.image — third-person view, 256×256 HWC uint8
  • observation.images.wrist_image — wrist-mounted camera view, 256×256 HWC uint8

Actions:

  • Continuous control in Box(-1, 1, shape=(7,)) — end-effector delta (6D) + gripper (1D)

Training

The unified dataset at lerobot/robocerebra_unified exposes two RGB streams and language-grounded sub-task annotations:

FeatureShapeDescription
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

Reproducing published results

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.

Update on GitHub