LeRobot documentation

RoboCerebra

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