Robot description authoring (URDF/MJCF)
Write and fix URDF/MJCF/USD robot descriptions that load, collide and move correctly (control class).
20 project-authored proposals · taxonomy v1.1 · 0 new benchmark runs. Verifiers and partial-credit rules below are designs, not executed results.
- Typical applications
- text editor · ROS 2 · MuJoCo · Isaac Sim importer
- Class GUI-need label
CL· CLI-sufficient
Task proposals · 20
Expand to inspect the complete original wording and proposed checks. Original proposal text remains English in both interfaces.
R07.09.01.06-T01 Repair a URDF that fails check_urdf
Original instruction
input/arm6.urdf fails to parse: a joint references a missing parent link, two joints share the name 'joint_4', and one inertia tensor is missing. Fix it minimally so check_urdf passes and the tree is base_link -> link_1 -> ... -> tool0, writing out/arm6_fixed.urdf.
- Platforms
lin· Linux- Applications
- text editor · ROS 2 (check_urdf)
- Interfaces
term· Terminal- GUI need · task setting
CL· CLI-sufficient- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
code· Code & commands- Work product
WP06· Code/engineering- Conditions
- None declared
- Proposed difficulty
- 2 / 5
Proposed verifier
check_urdf succeeds; parsed tree equals expected chain of 8 links; joint names unique with original names elsewhere unchanged; all links with mass > 0 have positive-definite inertia; XML diff vs input limited to the faulty elements (<= 12 changed lines).
Proposed partial credit
40% parses and tree correct; 25% duplicate joint fixed; 20% inertia added validly; 15% minimal diff
R07.09.01.06-T02 URDF for a two-link planar arm from a spec table
Original instruction
Write out/planar2.urdf for the 2-link planar arm in input/spec.md: link lengths 0.40 m and 0.30 m, revolute joints about +Z with limits +/-150 deg and +/-135 deg, cylinder links of given radius and mass (uniform density inertias), and a fixed 'ee' frame at the tip.
- Platforms
lin· Linuxmac· macOSwin· Windows- Applications
- text editor · Python (urdfpy/pinocchio)
- Interfaces
term· Terminal- GUI need · task setting
CL· CLI-sufficient- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
code· Code & commands- Work product
WP06· Code/engineering- Conditions
- None declared
- Proposed difficulty
- 2 / 5
Proposed verifier
Grader loads with pinocchio: FK of ee at 20 random joint configs within 1e-6 m of analytic; joint limits exact in radians; inertias equal analytic cylinder values about the right axes within 1e-6.
Proposed partial credit
45% FK correct; 25% limits and axes; 30% inertial parameters
R07.09.01.06-T03 Mount a parallel gripper on a UR5e via xacro
Original instruction
Extend the UR5e description (input/ur5e.urdf.xacro) with the gripper xacro in input/gripper/, attached by a fixed joint 0.15 m along tool0's +Z with the gripper rotated 90 deg about Z, and expose a new frame 'tcp' at the fingertip center. Generate out/ur5e_gripper.urdf.
- Platforms
lin· Linux- Applications
- xacro · ROS 2
- Interfaces
term· Terminal- GUI need · task setting
CL· CLI-sufficient- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
code· Code & commands- Work product
WP06· Code/engineering- Conditions
- None declared
- Proposed difficulty
- 3 / 5
Proposed verifier
xacro expands without errors; check_urdf passes; transform tool0 -> tcp equals spec (translation and rotation within 1e-6) via tf/pinocchio; gripper links present with original inertias; no self-collision at the UR5e home pose (FCL check).
Proposed partial credit
30% clean expansion; 40% mount and tcp transform exact; 30% collision-free at home
R07.09.01.06-T04 Convert URDF to MJCF with damping and armature
Original instruction
Convert input/panda.urdf to MJCF (out/panda.xml) for MuJoCo 3, setting per-joint damping and armature from input/joint_params.csv, position actuators with kp from the table, and a floor plane. The model must load and hold the home pose under gravity for 5 s.
- Platforms
lin· Linuxmac· macOSwin· Windows- Applications
- MuJoCo · Python
- Interfaces
term· Terminal- GUI need · task setting
CL· CLI-sufficient- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
code· Code & commands- Work product
WP06· Code/engineering- Conditions
- None declared
- Proposed difficulty
- 3 / 5
Proposed verifier
mujoco.MjModel loads; per-joint damping/armature equal CSV; 7 position actuators with kp; simulating 5 s with ctrl = home keeps every joint within 0.02 rad of home; meshes resolved.
Proposed partial credit
25% loads with meshes; 35% joint parameters exact; 20% actuators; 20% holds pose
R07.09.01.06-T05 Compute correct inertias from meshes
Original instruction
The inertial blocks in input/rover.urdf are placeholders (mass 1, identity inertia). Compute mass, COM and inertia tensor for each of the 9 links from their collision meshes in input/meshes/ and the densities in input/materials.csv, and write out/rover_inertial.urdf.
- Platforms
lin· Linuxmac· macOSwin· Windows- Applications
- Python (trimesh) · text editor
- Interfaces
term· Terminalapi· API/SDK- GUI need · task setting
CL· CLI-sufficient- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
code· Code & commands- Work product
WP06· Code/engineering- Conditions
- None declared
- Proposed difficulty
- 4 / 5
Proposed verifier
Grader recomputes with trimesh: masses within 1 pct, COMs within 1 mm, inertia tensors (in the link frame, origin rpy handled) within 2 pct Frobenius; all tensors positive definite and satisfy triangle inequalities.
Proposed partial credit
30% masses; 30% COMs; 40% inertia tensors in correct frames
R07.09.01.06-T06 Primitive collision geometry that avoids false self-collisions
Original instruction
input/humanoid_arm.urdf uses dense meshes for collision, causing slow sim and self-collision at rest. Replace each link's collision with capsules/boxes so total collision volume is within 15 pct of the mesh volume, no self-collision occurs at the 5 poses in input/poses.yaml, and adjacent links still collide when folded past joint limits.
- Platforms
lin· Linux- Applications
- Python (pybullet/FCL) · text editor
- Interfaces
term· Terminal- GUI need · task setting
CL· CLI-sufficient- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
code· Code & commands- Work product
WP06· Code/engineering- Conditions
- None declared
- Proposed difficulty
- 4 / 5
Proposed verifier
Grader: only primitive collision geoms; per-link volume ratio 0.85-1.15; FCL reports no collisions at the 5 poses (excluding adjacent pairs if declared disabled); folded test pose produces contact; visual meshes unchanged.
Proposed partial credit
30% primitives with volume fit; 40% no collisions at poses; 30% contact still detected when folded
R07.09.01.06-T07 Mimic joints in URDF and equality constraints in MJCF
Original instruction
Make the two-finger gripper in input/gripper.urdf use one actuated joint: the right finger mimics the left with multiplier -1 in URDF, and in the MJCF conversion (out/gripper.xml) use an equality joint constraint so closing moves both fingers symmetrically.
- Platforms
lin· Linuxmac· macOSwin· Windows- Applications
- text editor · MuJoCo · ROS 2
- Interfaces
term· Terminal- GUI need · task setting
CL· CLI-sufficient- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
code· Code & commands- Work product
WP06· Code/engineering- Conditions
- None declared
- Proposed difficulty
- 3 / 5
Proposed verifier
URDF: mimic tag with joint, multiplier -1, offset 0; robot_state_publisher shows symmetric finger poses; MJCF: equality joint with polycoef [0 -1 0 0 0]; MuJoCo sim of actuator ramp gives finger positions symmetric within 1e-3 m throughout.
Proposed partial credit
40% URDF mimic correct; 40% MJCF equality correct; 20% symmetric in simulation
R07.09.01.06-T08 Tendon-driven finger in MJCF reaching a target pose
Original instruction
Author out/finger.xml: a 3-phalanx planar finger with hinge joints, a spatial tendon routed over sites on each phalanx driving flexion, a passive extensor spring per joint, and a motor on the tendon. With ctrl = 0.6 the fingertip must settle within 3 mm of the target in input/target.json.
- Platforms
lin· Linuxmac· macOSwin· Windows- Applications
- MuJoCo · Python
- Interfaces
term· Terminal- GUI need · task setting
CL· CLI-sufficient- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
code· Code & commands- Work product
WP06· Code/engineering- Conditions
- None declared
- Proposed difficulty
- 5 / 5
Proposed verifier
MuJoCo loads; model has 3 hinges, one spatial tendon through >= 6 sites, joint stiffness > 0, one tendon actuator; after 3 s sim with ctrl 0.6 fingertip site within 3 mm of target and velocity < 1e-3; with ctrl 0 finger returns near straight.
Proposed partial credit
30% structure valid; 20% tendon routing; 35% target reached; 15% passive return
R07.09.01.06-T09 Parametric xacro generating three arm variants
Original instruction
Refactor input/arm.urdf into out/arm.urdf.xacro with args reach (0.6/0.8/1.0 m), payload_class (light/heavy) controlling link radius and motor mass via a properties table, and prefix for multi-robot use. Generate out/arm_{060,080,100}.urdf with prefixes a_, b_, c_.
- Platforms
lin· Linux- Applications
- xacro · ROS 2
- Interfaces
term· Terminal- GUI need · task setting
CL· CLI-sufficient- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
code· Code & commands- Work product
WP06· Code/engineering- Conditions
- None declared
- Proposed difficulty
- 3 / 5
Proposed verifier
xacro with each arg set expands; reach (max FK distance) equals arg within 1 mm; link/joint names carry prefixes; heavy variant inertial masses per table; default args reproduce the original URDF numerically.
Proposed partial credit
30% three variants generated; 30% reach correct; 20% prefixes; 20% defaults reproduce original
R07.09.01.06-T10 Differential-drive base with ros2_control tags
Original instruction
Write out/diffbot.urdf.xacro for a differential-drive base (wheel radius 0.05 m, separation 0.30 m, caster) with a ros2_control system using gz_ros2_control, two velocity-command wheel joints, and a controller YAML for diff_drive_controller. In headless Gazebo it must drive 1.0 m forward at 0.2 m/s within 5 pct.
- Platforms
lin· Linux- Applications
- ROS 2 · Gazebo · xacro
- Interfaces
term· Terminal- GUI need · task setting
CL· CLI-sufficient- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
code· Code & commands- Work product
WP06· Code/engineering- Conditions
- None declared
- Proposed difficulty
- 4 / 5
Proposed verifier
Grader launches gz sim headless with the agent's launch file: controller_manager lists diff_drive_controller active; publishing cmd_vel 0.2 m/s for 5 s yields odometry and ground-truth displacement 1.0 +/-0.05 m with heading drift < 3 deg.
Proposed partial credit
25% URDF and ros2_control valid; 25% controllers load; 50% driving test passes
R07.09.01.06-T11 Fix joint axes so positive motion matches the datasheet
Original instruction
On input/scara.urdf, joints 1, 2 and 4 rotate the wrong way and joint 3 (prismatic) moves up instead of down for positive values, compared with input/datasheet.pdf conventions. Fix axes/origins (not limits) so FK matches the 6 reference poses in input/ref_poses.csv.
- Platforms
lin· Linuxmac· macOSwin· Windows- Applications
- text editor · Python (pinocchio)
- Interfaces
term· Terminal- GUI need · task setting
CL· CLI-sufficient- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
code· Code & commands- Work product
WP06· Code/engineering- Conditions
- None declared
- Proposed difficulty
- 3 / 5
Proposed verifier
FK of the tool frame at the 6 reference joint vectors within 0.5 mm and 0.1 deg; joint limits unchanged; only axis/origin elements modified (XML diff).
Proposed partial credit
70% FK matches all reference poses; 15% limits unchanged; 15% minimal edits
R07.09.01.06-T12 Add a camera link with an optical frame (REP 103/105)
Original instruction
Add a depth camera to input/mobile_base.urdf: link 'camera_link' mounted 0.20 m forward, 0.30 m up, pitched down 15 deg from base_link, plus 'camera_optical_frame' following the optical convention (z forward, x right, y down).
- Platforms
lin· Linux- Applications
- text editor · ROS 2
- Interfaces
term· Terminal- GUI need · task setting
CL· CLI-sufficient- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
code· Code & commands- Work product
WP06· Code/engineering- Conditions
- None declared
- Proposed difficulty
- 2 / 5
Proposed verifier
tf from base_link to camera_link equals spec within 1e-6; camera_link -> optical frame rotation equals rpy(-pi/2, 0, -pi/2); check_urdf passes; a point 1 m along optical +z maps to a point ahead and below the camera in base_link.
Proposed partial credit
45% camera mount transform; 45% optical frame convention; 10% parses
R07.09.01.06-T13 URDF to USD with physics properties for Isaac Sim
Original instruction
Convert input/ur10e.urdf to out/ur10e.usd using the Isaac Sim URDF importer in headless Python (no GUI), with fixed base, joint drive stiffness/damping from input/drives.csv, convex-decomposition collisions, and self-collision disabled. The USD must load in a stage and hold its pose.
- Platforms
lin· Linux- Applications
- Isaac Sim importer (Python) · USD
- Interfaces
term· Terminalapi· API/SDK- GUI need · task setting
AP· API-sufficient- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
code· Code & commands- Work product
WP06· Code/engineering- Conditions
- None declared
- Proposed difficulty
- 4 / 5
Proposed verifier
pxr reads out/ur10e.usd: ArticulationRootAPI on the robot, fixed base joint, 6 revolute joints with DriveAPI stiffness/damping equal CSV, collision approximation convexDecomposition; headless sim 3 s keeps joints within 0.01 rad of initial.
Proposed partial credit
30% valid articulation; 35% drive parameters; 20% collision settings; 15% stable sim
R07.09.01.06-T14 Tune MJCF contacts so a grasp holds without slip
Original instruction
In input/grasp_scene.xml, a parallel gripper drops a 0.3 kg block after 1 s. Tune friction, condim, solref/solimp and gripper actuator force (not the block mass or geometry) so the lifted block stays held for 5 s with slip below 2 mm, and the sim remains stable at timestep 0.002.
- Platforms
lin· Linuxmac· macOSwin· Windows- Applications
- MuJoCo · Python
- Interfaces
term· Terminal- GUI need · task setting
CL· CLI-sufficient- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
code· Code & commands- Work product
WP06· Code/engineering- Conditions
- None declared
- Proposed difficulty
- 5 / 5
Proposed verifier
Grader runs the provided lift script: block z-displacement relative to fingers <= 2 mm over 5 s; no NaNs or energy blow-up; block mass/geometry unchanged; penetration depth < 1 mm.
Proposed partial credit
50% block held 5 s; 25% slip under threshold; 25% stable and physical (no penetration, params plausible)
R07.09.01.06-T15 Gazebo world SDF with robot and objects
Original instruction
Write out/warehouse.sdf: ground plane, sun, 3 boxes (0.5 m cubes, 5 kg) at the poses in input/boxes.yaml, a shelf model from input/models/shelf, and the robot from input/diffbot.urdf spawned at (1, 0, 0) facing +Y, with the sensors and contact system plugins enabled. It must load in headless gz sim.
- Platforms
lin· Linux- Applications
- Gazebo · SDFormat
- Interfaces
term· Terminal- GUI need · task setting
CL· CLI-sufficient- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
code· Code & commands- Work product
WP11· Game/sim state- Conditions
- None declared
- Proposed difficulty
- 3 / 5
Proposed verifier
gz sdf -k passes; headless gz sim loads; entity tree contains 3 boxes at poses within 1e-3, shelf, robot pose with yaw pi/2; box inertial masses 5 kg; plugins listed in world.
Proposed partial credit
25% valid SDF; 35% boxes and shelf placed; 25% robot spawned correctly; 15% plugins
R07.09.01.06-T16 Apply kinematic calibration to joint origins
Original instruction
A calibration run produced input/calib.yaml with corrected joint origin offsets (xyz, rpy) for the 6 joints of input/arm6.urdf. Apply them to the URDF and verify: FK error vs the 30 measured tool poses in input/measured.csv must drop below 0.5 mm RMS.
- Platforms
lin· Linuxmac· macOSwin· Windows- Applications
- Python (pinocchio) · text editor
- Interfaces
term· Terminal- GUI need · task setting
CL· CLI-sufficient- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
code· Code & commands- Work product
WP06· Code/engineering- Conditions
- None declared
- Proposed difficulty
- 4 / 5
Proposed verifier
Grader computes FK RMS position error over measured poses: < 0.5 mm (original 4.1 mm); orientation RMS < 0.05 deg; only joint origin elements changed.
Proposed partial credit
60% position RMS under threshold; 25% orientation RMS; 15% only origins changed
R07.09.01.06-T17 Quadruped MJCF actuators that stand stably
Original instruction
Complete input/quad.xml (12-DoF quadruped, actuators missing): add position actuators with gear, ctrlrange and forcerange from input/motor_spec.csv and kp/kv per joint, set joint armature, and a keyframe 'stand'. Starting from the keyframe, the robot must stand for 10 s without falling.
- Platforms
lin· Linuxmac· macOSwin· Windows- Applications
- MuJoCo · Python
- Interfaces
term· Terminal- GUI need · task setting
CL· CLI-sufficient- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
code· Code & commands- Work product
WP06· Code/engineering- Conditions
- None declared
- Proposed difficulty
- 5 / 5
Proposed verifier
Model loads; 12 actuators with spec values; keyframe exists; 10 s sim holding ctrl = stand keyframe: torso height within 3 cm of initial, roll/pitch < 5 deg, no actuator exceeds forcerange; ctrlrange respected.
Proposed partial credit
35% actuator parameters exact; 15% keyframe; 50% stands 10 s stably
R07.09.01.06-T18 Fix package URIs after moving a description package
Original instruction
The robot description moved from package 'old_bot_description' to 'acme_bot_description' and meshes now live in meshes/visual and meshes/collision. Update input/acme_bot.urdf.xacro and its includes so all mesh and include references resolve, the model loads in RViz-equivalent tools and in MuJoCo via the converter.
- Platforms
lin· Linux- Applications
- xacro · ROS 2 · MuJoCo
- Interfaces
term· Terminal- GUI need · task setting
CL· CLI-sufficient- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
code· Code & commands- Work product
WP06· Code/engineering- Conditions
- None declared
- Proposed difficulty
- 3 / 5
Proposed verifier
Grader in a fresh workspace with only acme_bot_description: xacro expands; every package:// URI resolves to an existing file; no 'old_bot_description' string remains; MuJoCo compiles the converted model with all 23 meshes loaded.
Proposed partial credit
40% all URIs resolve; 20% no stale references; 40% loads in both toolchains
R07.09.01.06-T19 Merge fixed links and lump inertias
Original instruction
input/manipulator.urdf has 11 fixed-joint helper links (flanges, covers) that slow down the solver. Merge each into its parent movable link, lumping mass, COM and inertia correctly (parallel-axis theorem) and keeping visual/collision geometry, except keep frames 'tool0' and 'camera_optical' as fixed links.
- Platforms
lin· Linuxmac· macOSwin· Windows- Applications
- Python (urdfpy/pinocchio) · text editor
- Interfaces
term· Terminalapi· API/SDK- GUI need · task setting
CL· CLI-sufficient- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
code· Code & commands- Work product
WP06· Code/engineering- Conditions
- None declared
- Proposed difficulty
- 4 / 5
Proposed verifier
Link count reduced by 11 with tool0 and camera_optical kept; total mass equal; each composite body's COM and inertia (in a common frame) equal to the original subtree within 1e-6; FK of kept frames identical; visuals preserved.
Proposed partial credit
25% correct links removed and kept; 45% mass properties preserved; 20% FK unchanged; 10% geometry kept
R07.09.01.06-T20 Humanoid leg with a closed-loop knee linkage in MJCF
Original instruction
Model the leg in input/leg_drawing.pdf in MJCF (out/leg.xml): hip, thigh, a four-bar knee linkage closed with an equality connect constraint, shank and ankle. Driving the knee actuator through its range must produce the knee-angle curve in input/knee_curve.csv within 1 deg.
- Platforms
lin· Linuxmac· macOSwin· Windows- Applications
- MuJoCo · Python
- Interfaces
term· Terminal- GUI need · task setting
CL· CLI-sufficient- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
code· Code & commands- Work product
WP06· Code/engineering- Conditions
- None declared
- Proposed difficulty
- 5 / 5
Proposed verifier
Model loads; equality connect constraint violation < 1e-4 m during the sweep; knee angle vs actuator input matches the CSV within 1 deg at all 25 points; link lengths equal drawing within 0.5 mm.
Proposed partial credit
25% topology with closed loop; 20% dimensions; 15% constraint holds; 40% knee curve matches
Mapped research references
Existing benchmark-to-class links from the research catalog. They are not record-level annotations, executions or product endorsements.