Embodiments
此内容尚不支持你的语言。
embodiments/<name>/embodiment.toml: what a policy may know about a robot without asking a simulator. Simulator workers report the same facts live; the XPolicyLab connector and workers under an observation contract take them from here.
arx_x5
Section titled “arx_x5”- Robot: ARX X5, two arms with parallel grippers (RoboDojo, X5A.urdf)
- Control rate: 25 Hz
- Joint groups: left_arm (joints 0-5, gripper 6), right_arm (joints 7-12, gripper 13)
- Cameras: cam_head, cam_left_wrist, cam_right_wrist
- Fingertip offset: 0.15 m along link6 +x
- Empty closed gripper reads: 0.185
- Table top: z = 0.765 m
- Arms back to the start pose after finish: yes
- Shield: max_joint_jump_rad 0.3, max_cartesian_jump_m 0.25, workspace {‘x’: [-1.1, 1.1], ‘y’: [-1.25, 0.35], ‘z’: [0.7, 1.565]}
embodiments/arx_x5/embodiment.toml
# The dual-arm ARX X5 of RoboDojo (env_cfg_type arx_x5): what a policy may know about# it without asking the simulator. Values from RoboDojo 726e9aa (assets f8862d5),# measured with the runtime worker's profile and observe on 2026-10-12: the camera# calibration is the same for every task, layout and arm pose (head camera fixed in the# world; wrist cameras fixed on link6; spread below 1e-7).name = "arx_x5"robot = "ARX X5, two arms with parallel grippers (RoboDojo, X5A.urdf)"robot_model = "x5"control_hz = 25.0physics_steps_per_tick = 10cameras = ["cam_head", "cam_left_wrist", "cam_right_wrist"]image_size = [640.0, 480.0]# Joint commands: per arm 6 joints, then the gripper (0 closed .. 1 open).action_low = [-9.999999, -9.999999, -9.999999, -9.999999, -9.999999, -3.14, 0.0, -9.999999, -9.999999, -9.999999, -9.999999, -9.999999, -3.14, 0.0]action_high = [9.999999, 9.999999, 9.999999, 9.999999, 9.999999, 3.14, 1.0, 9.999999, 9.999999, 9.999999, 9.999999, 9.999999, 3.14, 1.0]# "Fingertips" = centre of the gripping faces, 0.150 m from link6 along its +x (X5A.urdf).tip_offset_m = 0.150# Measured opening of an empty closed gripper (normalized), fingers fully open apart,# and the time a gripper command needs for the full stroke and a firm grip (at most# 20 % of the range per tick).gripper_empty_opening = 0.185gripper_open_width_m = 0.088gripper_full_stroke_seconds = 0.4# Table top (the table box is centred at z = 0.74 and 0.05 thick).table_z = 0.765# Most RoboDojo tasks count success only with both arms back at their start pose.return_to_start = true# The planner's joint velocity (URDF) and acceleration: how the skills time motions.planner_limits = { joint_velocity = 3.14, joint_acceleration = 10.0 }planner_world = "self collision and table only; scene objects and the other arm are not modeled"
[groups.left_arm]joints = [0, 1, 2, 3, 4, 5]gripper = 6
[groups.right_arm]joints = [7, 8, 9, 10, 11, 12]gripper = 13
# Mount poses [x, y, z, qw, qx, qy, qz] in the env frame.[arm_bases]left_arm = [-0.3, -0.45, 0.765, 0.707, 0.0, 0.0, 0.707]right_arm = [0.3, -0.45, 0.765, 0.707, 0.0, 0.0, 0.707]
# Commands that are bugs (runtime/shield.py); the same values as the RoboDojo worker's.[shield]max_joint_jump_rad = 0.3max_cartesian_jump_m = 0.25workspace = { x = [-1.1, 1.1], y = [-1.25, 0.35], z = [0.70, 1.565] }
# XPolicyLab's protocol for this robot (action_type joint).[xpolicylab]env_cfg_type = "arx_x5"action_type = "joint"action_dim = 14
# Camera calibration, OpenCV convention (x right, y down, z forward), env frame.[calibration.cam_head]intrinsics = [[288.13254096884566, 0.0, 320.0], [0.0, 288.13254096884566, 240.0], [0.0, 0.0, 1.0]]camera_to_world = [[1.0, 0.0, 0.0, 0.0], [0.0, -0.8660253435950835, 0.5000001052916332, -0.4099999964237213], [0.0, -0.5000001052916332, -0.8660253435950835, 1.3079999685287476], [0.0, 0.0, 0.0, 1.0]]
[calibration.cam_left_wrist]link = "left_link6"intrinsics = [[397.04127893104277, 0.0, 320.0], [0.0, 397.04127893104277, 240.0], [0.0, 0.0, 1.0]]camera_on_link6 = [[-7.216501643037608e-06, -0.5000295730826618, 0.8660083153236539, 0.08484203124619338], [-0.9999999999739603, 3.6093405923748063e-06, -6.249040374600022e-06, -2.1041652409348188e-07], [-1.0079051063958558e-09, -0.8660083153462, -0.5000295730956893, 0.050939677140083406], [0.0, 0.0, 0.0, 1.0]]
[calibration.cam_right_wrist]link = "right_link6"intrinsics = [[397.04127893104277, 0.0, 320.0], [0.0, 397.04127893104277, 240.0], [0.0, 0.0, 1.0]]camera_on_link6 = [[-7.216501643037608e-06, -0.5000295730826618, 0.8660083153236539, 0.08484203124619338], [-0.9999999999739603, 3.6093405923748063e-06, -6.249040374600022e-06, -2.1041652403797073e-07], [-1.0079051063958558e-09, -0.8660083153462, -0.5000295730956893, 0.050939677140083406], [0.0, 0.0, 0.0, 1.0]]- Robot: AgileX PiPER, two arms with parallel grippers (RoboDojo-Real)
- Control rate: 25 Hz
- Joint groups: left_arm (joints 0-5, gripper 6), right_arm (joints 7-12, gripper 13)
- Cameras: cam_head, cam_left_wrist, cam_right_wrist
- Fingertip offset: 0.135 m along link6 +x
- Empty closed gripper reads: –
- Table top: z = – m
- Arms back to the start pose after finish: yes
- Shield: max_joint_jump_rad 0.3, max_cartesian_jump_m 0.25, workspace {‘x’: [-0.9, 0.9], ‘y’: [-1.1, 0.3], ‘z’: [0.7, 1.4]}
embodiments/piper/embodiment.toml
# Two AgileX PiPER arms with parallel grippers (RoboDojo-Real's Piper platform): what a# policy may know about the robot without asking a simulator. The kinematic facts come# from AgileX's PiPER description URDF (RoboTwin 2.0 assets,# embodiments/piper/urdf/piper_description.urdf): six revolute# joints per arm and two prismatic fingers of 0-0.04 m.## NOT CALIBRATED: the arm mounts, the table height, the workspace and the cameras below# belong to a rig, and must be measured on it (docs/src/content/docs/guides/real-robot.md) before# `calibrated = true`. Export refuses an uncalibrated embodiment.name = "piper"robot = "AgileX PiPER, two arms with parallel grippers (RoboDojo-Real)"robot_model = "piper"calibrated = falsecontrol_hz = 25.0cameras = ["cam_head", "cam_left_wrist", "cam_right_wrist"]image_size = [640.0, 480.0]# Joint commands: per arm 6 joints (URDF limits), then the gripper (0 closed .. 1 open).# joint3 stops at 0 as in piper_description.urdf (RoboTwin's simplified piper.urdf lets# it reach +2.697, past the real arm's stop); these are the shield's joint bounds.action_low = [-2.618, 0.0, -2.697, -1.832, -1.22, -3.14, 0.0, -2.618, 0.0, -2.697, -1.832, -1.22, -3.14, 0.0]action_high = [2.618, 3.14, 0.0, 1.832, 1.22, 3.14, 1.0, 2.618, 3.14, 0.0, 1.832, 1.22, 3.14, 1.0]# The fingers sit 0.135 m from link6 along link6's z axis (URDF joint7/joint8). The# analytic skills' geometry assumes the ARX X5's tool along link6's x axis: until it# reads tool_axis_link6, the PiPER runs learned policies and joint-space programs.tip_offset_m = 0.135tool_axis_link6 = [0.0, 0.0, 1.0]gripper_open_width_m = 0.08return_to_start = trueplanner_limits = { joint_velocity = 3.0, joint_acceleration = 10.0 }planner_world = "not modeled: give the rig's planner configuration before using the kinematics service"# The kinematics service (fk, ik, plan_path; services/kinematics.toml) is the ARX X5's.# Export refuses this profile until it names a kinematics service of its own:# kinematics_service = "<a services/<name>.toml of kind kinematics serving this profile>"
[groups.left_arm]joints = [0, 1, 2, 3, 4, 5]gripper = 6
[groups.right_arm]joints = [7, 8, 9, 10, 11, 12]gripper = 13
# Mount poses [x, y, z, qw, qx, qy, qz] in the env frame: MEASURE ON THE RIG. These are# the ARX X5 layout's, as a starting point only.[arm_bases]left_arm = [-0.3, -0.45, 0.75, 0.707, 0.0, 0.0, 0.707]right_arm = [0.3, -0.45, 0.75, 0.707, 0.0, 0.0, 0.707]
# Commands that are bugs: the jumps as for the ARX X5; the workspace is the rig's.[shield]max_joint_jump_rad = 0.3max_cartesian_jump_m = 0.25workspace = { x = [-0.9, 0.9], y = [-1.1, 0.3], z = [0.70, 1.40] }
# XPolicyLab's protocol for this robot (joint actions, both arms).[xpolicylab]env_cfg_type = "piper"action_type = "joint"action_dim = 14