# trossen wxai joint-position control

trossen wxai joint-position control. Bounded simulated joint offsets from the original reset pose; not locomotion or object-task validation.

Record version: `1.0.0` · Hub commit: `d800c48cfd84f618a5c6ab84f8f7feec74ab0b56`

## Executable interface

```json
{
  "version": "1",
  "kind": "controller",
  "abstraction_level": 1,
  "execution_domain": "simulation",
  "language": "python",
  "input_transport": "json_file_or_inline",
  "output_transport": "json_stdout",
  "output_selector": "outputs",
  "conventions": {
    "linear_unit": "m",
    "angular_unit": "rad",
    "time_unit": "s",
    "coordinate_frame": "right_handed_world_xyz; +z_up",
    "joint_order": "left/joint_0,left/joint_1,left/joint_2,left/joint_3,left/joint_4,left/joint_5,right/joint_0,right/joint_1,right/joint_2,right/joint_3,right/joint_4,right/joint_5",
    "quaternion_order": "not_used"
  },
  "input_schema": {
    "type": "object",
    "required": [
      "seed",
      "joint_offset_rad"
    ],
    "properties": {
      "seed": {
        "type": "integer",
        "minimum": 0,
        "maximum": 10000
      },
      "joint_offset_rad": {
        "type": "number",
        "minimum": -0.15,
        "maximum": 0.15,
        "x-unit": "rad"
      }
    },
    "additionalProperties": false
  },
  "output_schema": {
    "type": "object",
    "required": [
      "joint_positions_rad",
      "target_joint_positions_rad",
      "max_error_rad",
      "movement_rad"
    ],
    "properties": {
      "joint_positions_rad": {
        "type": "array",
        "minItems": 12,
        "maxItems": 12,
        "items": {
          "type": "number",
          "minimum": -20,
          "maximum": 20
        },
        "x-unit": "rad",
        "x-frame": "named_model_joint_coordinates",
        "x-order": [
          "left/joint_0",
          "left/joint_1",
          "left/joint_2",
          "left/joint_3",
          "left/joint_4",
          "left/joint_5",
          "right/joint_0",
          "right/joint_1",
          "right/joint_2",
          "right/joint_3",
          "right/joint_4",
          "right/joint_5"
        ]
      },
      "target_joint_positions_rad": {
        "type": "array",
        "minItems": 12,
        "maxItems": 12,
        "items": {
          "type": "number",
          "minimum": -20,
          "maximum": 20
        },
        "x-unit": "rad",
        "x-frame": "named_model_joint_coordinates",
        "x-order": [
          "left/joint_0",
          "left/joint_1",
          "left/joint_2",
          "left/joint_3",
          "left/joint_4",
          "left/joint_5",
          "right/joint_0",
          "right/joint_1",
          "right/joint_2",
          "right/joint_3",
          "right/joint_4",
          "right/joint_5"
        ]
      },
      "max_error_rad": {
        "type": "number",
        "minimum": 0,
        "maximum": 50,
        "x-unit": "rad"
      },
      "movement_rad": {
        "type": "number",
        "minimum": 0,
        "maximum": 50,
        "x-unit": "rad"
      }
    },
    "additionalProperties": false
  },
  "preconditions": [
    "Use the exact recorded source, Linux Python 3.10 environment and pinned direct packages.",
    "No physical robot, network actuation or external robot credentials."
  ],
  "postconditions": [
    "All reported checks must be true and all output numbers finite.",
    "Success covers the declared goal and frozen cases, not arbitrary tasks or physical hardware."
  ],
  "failure_codes": [
    "invalid_input_or_environment",
    "execution_failed",
    "task_failed"
  ],
  "composition": {
    "depends_on": [],
    "automatic_frame_conversion": false,
    "automatic_hardware_execution": false
  },
  "origin_reference_ids": [
    "mujoco-menagerie-artifact-trossen-wxai-scene-xml"
  ],
  "origin_relationship": "prepared_from_the_same_pinned_model; inspect the declared controller and goal; no physical compatibility is inferred"
}
```



## Exact environment

| Runtime | Robot | Controller | Observation | OS | Python | Evidence |
| --- | --- | --- | --- | --- | --- | --- |
| mujoco 3.3.7 | trossen_wxai | position_servo_integral_offset_compensation | joint_state | linux x86_64 | >=3.10,<3.11 | task_complete |

Privileged simulator state and declared goals; no perception or real sensor validation.

Compatibility status: **hub_verified**. An environment match does not establish task completion. Runtime verification: **task_complete**.

## Source and license

- Repository: https://github.com/google-deepmind/mujoco_menagerie
- Source commit: `62ab00f2bc44f6f20c1c9b7a13f3fb1dd41a4e35` (no tag)
- Original authors: MuJoCo Menagerie contributors and the pinned model licensors
- License: [BSD-3-Clause](https://github.com/google-deepmind/mujoco_menagerie/blob/62ab00f2bc44f6f20c1c9b7a13f3fb1dd41a4e35/trossen_wxai/LICENSE)
- Source archive SHA256: `6866543ef9f07fd24f3fa4d134c06b30f5276f48daf412022b6edbaf6b2f0152`
- Upstream files: `trossen_wxai/CHANGELOG.md`, `trossen_wxai/LICENSE`, `trossen_wxai/README.md`, `trossen_wxai/assets/materials/1k_textures/trossen_BaseColor.png`, `trossen_wxai/assets/meshes/base_link.obj`, `trossen_wxai/assets/meshes/base_link_collision.001.obj`, `trossen_wxai/assets/meshes/base_link_collision.002.obj`, `trossen_wxai/assets/meshes/base_link_collision.003.obj`, `trossen_wxai/assets/meshes/base_link_collision.obj`, `trossen_wxai/assets/meshes/camera_mount_d405.obj`, `trossen_wxai/assets/meshes/camera_mount_d405_collision.001.obj`, `trossen_wxai/assets/meshes/camera_mount_d405_collision.obj`, `trossen_wxai/assets/meshes/carriage_left.obj`, `trossen_wxai/assets/meshes/carriage_left_collision.obj`, `trossen_wxai/assets/meshes/carriage_right.obj`, `trossen_wxai/assets/meshes/carriage_right_collision.obj`, `trossen_wxai/assets/meshes/d405/camera_mount_d405.obj`, `trossen_wxai/assets/meshes/d405/camera_mount_d405_collision.001.obj`, `trossen_wxai/assets/meshes/d405/camera_mount_d405_collision.obj`, `trossen_wxai/assets/meshes/d405/d405.stl`, `trossen_wxai/assets/meshes/gripper_left.obj`, `trossen_wxai/assets/meshes/gripper_left_collision.obj`, `trossen_wxai/assets/meshes/gripper_right.obj`, `trossen_wxai/assets/meshes/gripper_right_collision.obj`, `trossen_wxai/assets/meshes/link_1.obj`, `trossen_wxai/assets/meshes/link_1_collision.001.obj`, `trossen_wxai/assets/meshes/link_1_collision.002.obj`, `trossen_wxai/assets/meshes/link_1_collision.003.obj`, `trossen_wxai/assets/meshes/link_1_collision.obj`, `trossen_wxai/assets/meshes/link_2.obj`, `trossen_wxai/assets/meshes/link_2_collision.001.obj`, `trossen_wxai/assets/meshes/link_2_collision.002.obj`, `trossen_wxai/assets/meshes/link_2_collision.003.obj`, `trossen_wxai/assets/meshes/link_2_collision.obj`, `trossen_wxai/assets/meshes/link_3.obj`, `trossen_wxai/assets/meshes/link_3_collision.001.obj`, `trossen_wxai/assets/meshes/link_3_collision.002.obj`, `trossen_wxai/assets/meshes/link_3_collision.003.obj`, `trossen_wxai/assets/meshes/link_3_collision.004.obj`, `trossen_wxai/assets/meshes/link_3_collision.obj`, `trossen_wxai/assets/meshes/link_4.obj`, `trossen_wxai/assets/meshes/link_4_collision.001.obj`, `trossen_wxai/assets/meshes/link_4_collision.002.obj`, `trossen_wxai/assets/meshes/link_4_collision.obj`, `trossen_wxai/assets/meshes/link_5.obj`, `trossen_wxai/assets/meshes/link_5_collision.obj`, `trossen_wxai/assets/meshes/link_6.obj`, `trossen_wxai/assets/meshes/link_6_collision.obj`, `trossen_wxai/assets/meshes/table/small_meta_table_diffuse.png`, `trossen_wxai/assets/meshes/table/tablelegs.obj`, `trossen_wxai/assets/meshes/table/tabletop.obj`, `trossen_wxai/assets/meshes/wxai/base_link.obj`, `trossen_wxai/assets/meshes/wxai/base_link_collision.001.obj`, `trossen_wxai/assets/meshes/wxai/base_link_collision.002.obj`, `trossen_wxai/assets/meshes/wxai/base_link_collision.003.obj`, `trossen_wxai/assets/meshes/wxai/base_link_collision.obj`, `trossen_wxai/assets/meshes/wxai/carriage_left.obj`, `trossen_wxai/assets/meshes/wxai/carriage_left_collision.obj`, `trossen_wxai/assets/meshes/wxai/carriage_right.obj`, `trossen_wxai/assets/meshes/wxai/carriage_right_collision.obj`, `trossen_wxai/assets/meshes/wxai/gripper_left.obj`, `trossen_wxai/assets/meshes/wxai/gripper_left_collision.obj`, `trossen_wxai/assets/meshes/wxai/gripper_right.obj`, `trossen_wxai/assets/meshes/wxai/gripper_right_collision.obj`, `trossen_wxai/assets/meshes/wxai/link_1.obj`, `trossen_wxai/assets/meshes/wxai/link_1_collision.001.obj`, `trossen_wxai/assets/meshes/wxai/link_1_collision.002.obj`, `trossen_wxai/assets/meshes/wxai/link_1_collision.003.obj`, `trossen_wxai/assets/meshes/wxai/link_1_collision.obj`, `trossen_wxai/assets/meshes/wxai/link_2.obj`, `trossen_wxai/assets/meshes/wxai/link_2_collision.001.obj`, `trossen_wxai/assets/meshes/wxai/link_2_collision.002.obj`, `trossen_wxai/assets/meshes/wxai/link_2_collision.003.obj`, `trossen_wxai/assets/meshes/wxai/link_2_collision.obj`, `trossen_wxai/assets/meshes/wxai/link_3.obj`, `trossen_wxai/assets/meshes/wxai/link_3_collision.001.obj`, `trossen_wxai/assets/meshes/wxai/link_3_collision.002.obj`, `trossen_wxai/assets/meshes/wxai/link_3_collision.003.obj`, `trossen_wxai/assets/meshes/wxai/link_3_collision.004.obj`, `trossen_wxai/assets/meshes/wxai/link_3_collision.obj`, `trossen_wxai/assets/meshes/wxai/link_4.obj`, `trossen_wxai/assets/meshes/wxai/link_4_collision.001.obj`, `trossen_wxai/assets/meshes/wxai/link_4_collision.002.obj`, `trossen_wxai/assets/meshes/wxai/link_4_collision.obj`, `trossen_wxai/assets/meshes/wxai/link_5.obj`, `trossen_wxai/assets/meshes/wxai/link_5_collision.obj`, `trossen_wxai/assets/meshes/wxai/link_6.obj`, `trossen_wxai/assets/meshes/wxai/link_6_collision.obj`, `trossen_wxai/create_biarm.py`, `trossen_wxai/scene.xml`, `trossen_wxai/trossen_wxai.png`, `trossen_wxai/wxai_follower.xml`, `trossen_wxai/wxai_follower_biarm.xml`
- Upstream contribution rules: https://github.com/google-deepmind/mujoco_menagerie

## Find, inspect, prepare

```sh
python /PATH_TO_SKILL/scripts/rsh.py find "controller" --runtime mujoco --runtime-version 3.3.7 --robot trossen_wxai --json
python /PATH_TO_SKILL/scripts/rsh.py inspect mujoco-trossen-wxai-joint-control --json
python /PATH_TO_SKILL/scripts/rsh.py prepare mujoco-trossen-wxai-joint-control --project ./experiment --expected-source-commit 62ab00f2bc44f6f20c1c9b7a13f3fb1dd41a4e35 --expected-record-version 1.0.0 --plan --json
```

Remove `--plan` to download the checksum-verified pinned source and create an isolated project environment. Preparation returns the remaining configuration. Dependency installation is an explicit `--install-deps` step; it can execute package build hooks. Robot simulation is a separate command returned by prepare, never run by find/inspect.

Direct package pins: `mujoco==3.3.7`, `numpy==1.26.4`.

Direct runtime versions are pinned and measured. The receipt retains the complete environment freeze; prepare records the installed environment. System drivers are separate host requirements.

Hardware: Linux x86_64; CPU simulation; see retained receipt for the exact host environment.

Rendering: Headless. EGL libraries are required for MuJoCo imports; PushT uses SDL dummy video. No interactive display..

External API keys: none.

## Invocation contract

Entrypoint: `python run.py`.

```json
{
  "argv": [
    "{python}",
    "{recipe_dir}/run.py",
    "--source-dir",
    "{source_dir}",
    "--example"
  ],
  "inputs": {
    "seed": 0,
    "joint_offset_rad": 0.08
  },
  "outputs": {
    "format": "single JSON object",
    "payload_selector": "outputs",
    "schema": {
      "type": "object",
      "required": [
        "joint_positions_rad",
        "target_joint_positions_rad",
        "max_error_rad",
        "movement_rad"
      ],
      "properties": {
        "joint_positions_rad": {
          "type": "array",
          "minItems": 12,
          "maxItems": 12,
          "items": {
            "type": "number",
            "minimum": -20,
            "maximum": 20
          },
          "x-unit": "rad",
          "x-frame": "named_model_joint_coordinates",
          "x-order": [
            "left/joint_0",
            "left/joint_1",
            "left/joint_2",
            "left/joint_3",
            "left/joint_4",
            "left/joint_5",
            "right/joint_0",
            "right/joint_1",
            "right/joint_2",
            "right/joint_3",
            "right/joint_4",
            "right/joint_5"
          ]
        },
        "target_joint_positions_rad": {
          "type": "array",
          "minItems": 12,
          "maxItems": 12,
          "items": {
            "type": "number",
            "minimum": -20,
            "maximum": 20
          },
          "x-unit": "rad",
          "x-frame": "named_model_joint_coordinates",
          "x-order": [
            "left/joint_0",
            "left/joint_1",
            "left/joint_2",
            "left/joint_3",
            "left/joint_4",
            "left/joint_5",
            "right/joint_0",
            "right/joint_1",
            "right/joint_2",
            "right/joint_3",
            "right/joint_4",
            "right/joint_5"
          ]
        },
        "max_error_rad": {
          "type": "number",
          "minimum": 0,
          "maximum": 50,
          "x-unit": "rad"
        },
        "movement_rad": {
          "type": "number",
          "minimum": 0,
          "maximum": 50,
          "x-unit": "rad"
        }
      },
      "additionalProperties": false
    }
  }
}
```

Success: All declared goal and finite-state checks pass; exit 0 with task_complete. Move the named actuated hinge joints by a bounded offset from the reset/settled pose; max residual <0.035 rad and nonzero actual motion. This is not end-effector planning, balance, locomotion or hardware control.

Timeout: 180 seconds. Terminate the adapter at the recorded timeout. No physical hardware is opened.

Failures: Invalid input or source checksum; Different pinned package version; Unavailable runtime/driver; Goal not reached within bounded steps.

## Actual evidence

All 3 frozen cases completed against this exact adapter and source.

Reviewer: Hub finite-case Lambda execution harness · 2026-10-20.

Commands/checks actually performed:

- python tools/verify_runtime_expansion.py --backend menagerie --source-cache SOURCE_CACHE --output OUTPUT

Submitted evidence and hub verification remain separate. A schema check, PR creation or merge does not establish task success or publication.

## Reusable fixes

Change the runtime expansion manifest/template, regenerate, and rerun all frozen cases. Preserve source/model/checkpoint licenses and distinguish simulation from hardware.

# trossen wxai joint-position control

trossen wxai joint-position control. Bounded simulated joint offsets from the original reset pose; not locomotion or object-task validation.

Move the named actuated hinge joints by a bounded offset from the reset/settled pose; max residual <0.035 rad and nonzero actual motion. This is not end-effector planning, balance, locomotion or hardware control.

Source and model terms: BSD-3-Clause. The Hub wrapper is MIT. See the record for input JSON, exact environment, frozen execution receipts and preparation requirements.

