Elbow to a target angle
myosuite-elbow-posemyosuiteMyoSuite musculoskeletal elbow, index finger and handManipulationeasy
Instruction
You control MyoElbow, MyoSuite's musculoskeletal model of a right arm (MuJoCo physics) with one joint, the elbow (r_elbow_flex: 0 rad = arm straight, positive = flexed, range 0 to 2.27 rad), moved only by its 6 muscles: the three heads of the triceps (TRIlong, TRIlat, TRImed, which extend the elbow) and the biceps (BIClong, BICshort) and brachialis (BRA), which flex it. The upper arm is fixed; gravity pulls the forearm down. A muscle can only pull.
Task
The arm starts at a random elbow angle and the target angle was drawn at random (MyoSuite's random-target elbow task, fixed here by the episode seed). Bring the joints to the target angles in target_pose_rad (MyoSuite env myoElbowPose1D6MRandom-). The target is r_elbow_flex = 0.742 rad. At the start the pose error norm is 1.50 rad.
Success: MyoSuite's own solved check for this env: the Euclidean norm of the joint-angle error over the one joint (target minus current, pose_error_norm) must be below 0.175 rad (threshold, the env's pose_thd), judged by the episode server from the simulated state after you call robo done and the 10-step settle. Simulated time advances only when you act (one step = 20 ms).
Controls. robo act E1 E2 ... [--repeat N] sets the excitation (neural drive) of every muscle, a number in [0, 1], in the order robo info lists them (the action names), and holds it for N steps of 20 ms. A muscle's activation follows its excitation with MuJoCo's first-order activation dynamics (about 10 ms rising, 40 ms falling); its force also depends on its length and speed. The excitations stay as you last sent them until you act again, and they are also what the muscles hold during the 10-step settle after robo done. Skills (robo info lists them): robo skill set_joint_targets JOINT=RAD [JOINT=RAD ...] [steps=60] [ramp=20] runs a muscle-space controller: every step it computes the joint torques of a PD law towards the targets (MuJoCo inverse dynamics), solves a bounded least-squares problem for the muscle activations in [0, 1] that best produce those torques, and sends the matching excitations as that step's action (the steps count against the budget like robo act). Joints you do not name keep their previous targets (at the start: the start pose). The targets move linearly from the current pose over RAMP steps; the skill stops after STEPS steps (at most 300) or once the joints are still, and reports the remaining joint-target error and the task's error. robo skill hold [steps=20] sets every target to the current angle and keeps the joints there with the same controller. The controller cannot do the impossible: joints coupled by shared muscles or blocked by contact can stop short of their targets, so check the result and adjust.
Observation. robo observe reports target_pose_rad (the goal angles), pose_error_norm and threshold; joint_angles_rad, joint_velocities_rad_s and joint_targets_rad (the controller's current targets) per joint; muscle_activations (one per muscle, in action order); contacts (pairs of bones or objects touching); time_s; and obs_vector, MyoSuite's own observation vector for this env (its observation keys, in order: qpos, qvel, pose_err, act; not printed by plain robo observe, shown with robo observe --json). robo observe --image saves a picture from a fixed camera (muscle paths are not drawn).
The step budget is 300 steps (6 s of simulated time).
How the robot is controlled and scored
You are controlling a simulated robot. Read the task below, then solve it by running the robo command in your shell (start with robo info and robo observe). Keep going until the task is done, then call robo done once. Do not stop to ask questions; there is no human to answer.
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 # the robot, its sensors, action groups, skills and step budget
robo observe # robot and scene state as numbers
robo observe --image [--camera C] # also saves a camera image and prints its path (open it to look)
robo act V1 V2 ... [--repeat N] # one low-level action (the action groups under Controls), applied N times (N <= 50)
robo skill NAME ARG ... # run a skill listed by `robo info`; it runs until it finishes and reports the result
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 (+z up); angles are in degrees unless a field says otherwise.
- The episode has a fixed step budget (see
robo info); every simulated control step counts, including the steps a skill runs. - Skills are ordinary controllers: they can fail, stop early or be blocked by the scene. Read what they report and re-observe.
- Success is judged about 10 steps after you call
robo done, with the robot holding still (each action group's hold value: zero for velocity and delta commands, full brake for a car), so the goal must still be true when the robot stops. - Call
robo doneexactly once when finished.
Run this task
ROBOUSE_ORACLE_TOKEN=$(openssl rand -hex 16) \
bench eval run \
-d myohub/myosuite@0.2 \
--registry https://robouse.ai/hub/registry.json \
--agent oracle \
--include myosuite-elbow-posePinned to robohub commit e472b1a1e041. The verifier and the reference solution are not published.