Robot & Policy Profile

The robot profile captures important metadata about the robot embodiment. It is also used to validate the data at collection time, by checking whether the passed information matches the fields specified in the robot profile.

You only need to set up a robot profile once for each robot + policy configuration you evaluate. The reason that both robot and policy metadata are captured here is because some information, such as the available action space, depend on both.


Creating a Robot Profile

We provide example files for robot setup files for several common embodiments and policy setups in config/robot_profiles. We encourage you to use those and adapt them to your use-case. We are also happy to accept pull requests for additional common robot configurations!

Required fields

For each field with several options, you can provide one or more options.

Field Type Description
policy_name str Name of the policy being evaluated
robot_name str Identifier for the robot platform
gripper_name str Identifier for the gripper
control_freq int Control frequency in Hz
camera_names list[str] Names of cameras to record
robot_state_keys list[str] Observations recorded per step. Options: joint_position, cartesian_position, gripper_position, "base_position"
action_space list[str] Action representation. Options: "cartesian_position", "cartesian_velocity", "joint_position", "joint_velocity", "gripper_position", "gripper_velocity", "base_velocity", "base_position"

Valid action spaces

At least one of ["cartesian_position", "cartesian_velocity", "joint_position", "joint_velocity"] must be provided. In addition, one of ["gripper_position", "gripper_velocity"] must also be provided. This ensures that at least one command for the arm and one for the gripper is provided. The base commands are optional and only required for wheeled mobile manipulation platforms.

Optional fields

Field Type Description
controller str Controller type, e.g. OSC controller, joint position controller, joint velocity controller
observation_joint_names list[str] Joint names corresponding to indices in observation["joint_position"]
action_joint_names list[str] Joint names for joint-space action spaces (include gripper as last entry)
orientation_representation str Required when action_space contains cartesian_position. Options: euler_{format} (e.g. euler_xyz, shape (3,)), quat (scalar-last, shape (4,)), matrix (shape (3,3)), rot6d (shape (6,), used by openpi), rotvec (axis-angle, shape (3,))
gains dict Nested dictionary mapping the active controller to its respective gain values. Structure depends on the controller used: for joint_position provide kp and kd arrays; for joint_velocity provide kv array; for osc provide kp_pos, kd_pos, kp_ori, and kd_ori arrays.
intrinsic calibration matrix dict[str, list[list[float]]] Dictionary mapping camera names to their $3 \times 3$ intrinsic camera matrices.
extrinsic calibration matrix dict[str, list[list[float]]] Dictionary mapping camera names to their $4 \times 4$ extrinsic camera matrices.

Note that the observation_representation key is mandatory if the action or observation spaces contain a cartesian positions.

Example

policy_name: my_policy
robot_name: franka
gripper_name: franka_hand
control_freq: 10
camera_names:
  - wrist
robot_state_keys:
  - joint_position
  - cartesian_position
  - gripper_position
robot_state_joint_names:
  - joint_1
  - ...
action_space: 
  - joint_velocity
  - gripper position
  - ...
action_joint_names:
  - joint_1
  - ...
orientation_representation: rot6d

controller: "joint_position"
gains:
  joint_position:
    kp: [100, 100, 100, 100, 100, 100, 100]
    kd: [10, 10, 10, 10, 10, 10, 10]

intrinsic calibration matrix: 
  wrist:
    - [1, 0, 0]
    - [0, 1, 0]
    - [0, 0, 1]

extrinsic calibration matrix:
  wrist:
    - [1, 0, 0, 0]
    - [0, 1, 0, 0]
    - [0, 0, 1, 0]
    - [0, 0, 0, 1]

Back to top

Oopsie Tools & Data — Tooling for the Oopsie Dataset.

This site uses Just the Docs, a documentation theme for Jekyll.