Skip to content

RoboCasa365 ​

RoboCasa365 tests a Franka Panda on a mobile base in simulated kitchens, with a language instruction for each task. Behind the scenes, Manifold runs robocasa/robocasa v1.0.

agentview_leftagentview_rightwrist

Manifold runs the three task sets of RoboCasa's multitask learning benchmark. Every episode samples its kitchen and objects from RoboCasa's pretrain split.

  • robocasa365-atomic-seen runs short tasks with a single skill, such as opening a drawer
  • robocasa365-composite-seen runs tasks that chain several skills, from the pretraining task set
  • robocasa365-composite-unseen runs composite tasks that are not in the pretraining task set
BenchmarkTasksEpisodes per taskTotal episodes
robocasa365-atomic-seen1850900
robocasa365-composite-seen1650800
robocasa365-composite-unseen1650800

Contract ​

Observation ​

Each step, the benchmark sends an observation with these fields. If Manifold has adapters for the difference, it converts the observation to the form that your policy signature declares. Then it passes the observation to your policy.

FieldValuesMeaning
state["ee_pose"]x, y, zend effector position relative to the robot's base, in meters
qx, qy, qz, qwend effector rotation relative to the robot's base, as a quaternion, scalar last
f0, f1finger joint positions in meters; the second finger's value is negative
state["base_pose"]x, y, zbase position in the world, in meters
qx, qy, qz, qwbase rotation in the world, as a quaternion, scalar last
instructionthe task prompt, a string
sensors["agentview_left"]256x256 color image, uint8, upright
sensors["agentview_right"]256x256 color image, uint8, upright
sensors["wrist"]256x256 color image, uint8, upright

The benchmark sends no depth images and no camera calibration.

Action ​

The benchmark accepts 12 values per step, in this order.

IndexValuesMeaning
0 to 2dx, dy, dzend effector position change, in the robot base's frame
3 to 5rx, ry, rzend effector rotation change, axis-angle, in radians
6gripperbelow 0.5 opens the gripper, 0.5 and above closes it
7 to 9vx, vy, vyawmobile base velocity, in the robot base's frame
10torsotorso height change
11modebelow 0.5 applies the arm's change to its measured pose, 0.5 and above applies it to its previous target, so the arm keeps up with the moving base

Return actions in the exact format that your policy signature declares. Manifold will attempt to convert your policy's output to match what the benchmark accepts.

Compatible policy signatures ​

Change the values to match your policy. If the policy signature below matches what your policy natively requires, then it is guaranteed to be compatible with RoboCasa365.

ProprioceptionFormat
End effector pose
Base pose
CameraOrientationSize
Show policy signature
python
POLICY_SIGNATURE = PolicySignature(
    action_space=CompositeActionSpace(
        groups=(
            EEActionSpace(
                rotation=RotationFormat.AXIS_ANGLE,
                gripper=GripperFormat.SIGNED_OPEN_LOW,
                frame=Frame.BASE,
                delta=True,
            ),
            BodyActionSpace(
                part=BodyPart.MOBILE_BASE,
                dof=3,
                command=Command.VELOCITY,
                frame=Frame.BASE,
            ),
            BodyActionSpace(part=BodyPart.TORSO, dof=1, command=Command.DELTA),
        ),
        mode_slot=ModeCut.BINARY_0_5,
    ),
    proprioception=Proprioception(
        ee_pose=EEObservationSpec(
            rotation=RotationFormat.QUATERNION,
            gripper=GripperObservationSpec(dim=2),
            frame=Frame.BASE,
        ),
        base_pose=EEObservationSpec(rotation=RotationFormat.QUATERNION, frame=Frame.WORLD),
    ),
    cameras=(
        Camera(
            name="agentview_left",
            shape=(256, 256, 3),
            mount=Mount.SCENE,
            orientation=CameraOrientation.UPRIGHT,
        ),
        Camera(
            name="agentview_right",
            shape=(256, 256, 3),
            mount=Mount.SCENE,
            orientation=CameraOrientation.UPRIGHT,
        ),
        Camera(
            name="wrist",
            shape=(256, 256, 3),
            mount=Mount.WRIST,
            orientation=CameraOrientation.UPRIGHT,
        ),
    ),
    instruction=True,
)

Debugging and testing ​

  • The gripper and motion mode values have a threshold of 0.5. A policy that expects a threshold value of 0 can misbehave. For example, if it outputs 0.3 to close the gripper, the gripper opens instead.
  • Observation quaternions are scalar last (x, y, z, w). Check the order your rotation library uses before converting.

To check your policy end to end before a full run, submit it against debug-robocasa365, which runs the first atomic task, CloseBlenderLid, for 2 episodes.

For the full walkthrough, see Serve your policy.