Robo Use

Pick the akita black bowl on the cookies box and place it on the plate

libero-pro-spatial-swap-3LIBERO-PROFranka PandaManipulationVisionEasy difficulty

Reference solution, 181 of 1,000 steps.

Instruction

A Franka Panda arm with a parallel-jaw gripper works at a table in a LIBERO scene (MuJoCo / robosuite). The task is from LIBERO-PRO's libero_spatial_swap suite: LIBERO-Spatial's scene, where the objects start in other places (LIBERO-PRO's position perturbation).

Goal (LIBERO-PRO's language instruction): Pick the akita black bowl on the cookies box and place it on the plate

The episode ends as solved the moment LIBERO's own success check (the goal's predicates) passes; you do not need to call robo done after that. If you finish without the check passing, call robo done (or robo give-up).

This robot

  • The action has 7 numbers, not 4: robo act DX DY DZ DROLL DPITCH DYAW GRIPPER, each in [-1, 1]. It is LIBERO's delta end-effector command (robosuite's OSC_POSE controller, 20 steps per second). Holding DX/DY/DZ at 1.0 moves the hand about 1 cm per step; DROLL/DPITCH/DYAW rotate the hand about the world axes (1.0 asks for 0.5 rad); GRIPPER -1 opens, +1 closes.
  • robo move-to X Y Z [--grip G] and robo grip G are available (they keep the hand's orientation).
  • World frame, metres: +x points forward, away from the robot's base; +y is to the robot's left; +z is up. The table surface is at about z = 0.90.
  • You see the scene only through the cameras. robo observe gives the robot's own state: hand_pos (end-effector position), eef_quat (orientation quaternion x, y, z, w) and eef_axis_angle, gripper_qpos (the two finger joints) and gripper_open (finger gap in metres, about 0.08 when fully open). It does not say where the objects are. Each robo observe also saves a 256x256 image from the front camera (agentview) and one from the wrist camera (robot0_eye_in_hand), and prints their paths; open them to look.
  • robo info lists each camera with a 3x4 projection matrix P: for a world point (x, y, z), [u*w, v*w, w] = P @ [x, y, z, 1] gives its pixel (u, v) in that camera's saved image (u to the right, v down, origin at the top-left). The wrist camera moves with the hand: its matrix is for the hand's pose when you call robo info.
  • The step budget is 1000 steps (50 seconds of simulated time).
How the robot is controlled and scored

How to control the robot

You are the robot's policy. You act only through the robo command in your shell. There is no other way to move the robot, and you cannot read or change the simulator, the scoring, or other files to succeed; the episode server judges the final physical state itself.

robo info                         # action space, available skills, step budget
robo observe                      # robot and object state as numbers
robo observe --image              # also saves a camera image and prints its path (open it to look)
robo act DX DY DZ GRIP [--repeat N]   # low-level action, applied N times (N <= 50)
robo move-to X Y Z [--grip G]     # skill: move the gripper toward a point (if enabled for this task)
robo grip G [--steps N]           # skill: hold position and set the gripper (+1 close, -1 open)
robo done "short summary"         # end the episode and ask for scoring
robo give-up "reason"             # end the episode without claiming success
  • Positions are in metres in the world frame (x, y on the table plane, z up).
  • The episode has a fixed step budget (see robo info); every simulated step counts, including skills.
  • Unless the task says otherwise, success is judged about 10 steps after you call robo done, with the robot holding still, so the goal must still be true when the robot stops.
  • Work in small steps and re-observe after each motion. Call robo done exactly once when finished.

Run this task

robouse run \
  --task libero-pro-spatial-swap-3 \
  --harness claude-code \
  --out runs/libero-pro-spatial-swap-3

Needs the LIBERO virtualenv first.

The libero-pro-spatial-swap-3 task folder in Robo Use 0.6.1. The task text is shown here; the reference solution and the verifier are on GitHub.