Skip to content
Back to skills

Model Editing Kinematics

ASecurity

"Transform MuJoCo model specs safely and solve site-pose inverse

  • 247 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 8, 2026
businessapi

Works with

  • api

Security analysis

A100/100

Pro scans all 5 files and shows the line behind each finding

Scanned September 8, 2026

npx -y skills add VectorSpaceLab/AREX-Skill --skill model-editing-kinematics --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Model Editing Kinematics?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Model Editing Kinematics
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/vectorspacelab-model-editing-kinematics/badge)](https://www.skillsdirectory.com/skills/vectorspacelab-model-editing-kinematics)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: "model-editing-kinematics"
description: "Transform MuJoCo model specs safely and solve site-pose inverse
  kinematics with MyoSuite's CPU APIs, while preserving robot/model contracts
  and cleaning temporary artifacts."
disable-model-invocation: true
metadata:
  disco-role: operating
license: Apache 2.0
---

# Model editing and kinematics

Use this sub-skill when a task changes a MuJoCo model before compilation,
needs a site pose converted to joint coordinates, or needs quaternion/vector
utility semantics. It is an operating guide, not an environment lifecycle,
renderer, reference-motion, or MJX-parity guide.

## Route the request

1. Identify the input model, the intended edit, the compile target, and the
   expected cleanup behavior before touching the model.
2. For a one-off XML edit, use `ModelEditor(model_path)` and keep the edit in a
   callable `edit_fn(spec) -> None`. For a reusable pure XML transformation,
   use the XML helpers described in [API reference](references/api-reference.md).
3. For inverse kinematics, name the target site and state whether position,
   orientation, or both are constrained. Validate target shapes before calling
   the solver.
4. Prefer a bounded, non-rendering CPU smoke test. Use
   [`scripts/ik_smoke.py`](scripts/ik_smoke.py) when a minimal proof is enough.

## Core contracts

### Model editing

- `ModelEditor` loads a file into `mujoco.MjSpec`; it does not return a
  compiled model from `edit_model`.
- `edit_model(edit_fn=None)` mutates the in-memory spec. `None` is a deliberate
  no-op and should preserve the serialized spec.
- An edit function should inspect names and properties before deleting,
  preserve required poses/mesh names, add replacement bodies/geoms/sites, and
  leave compilation to the caller.
- `create_edited_xml()` compiles the spec, serializes it, writes a timestamped
  XML artifact, and returns its path. Compile or write failures happen before a
  usable artifact is guaranteed.
- Always use `try/finally`: delete the returned artifact only when it exists,
  and also clean a partially created path on write/compile failure when the
  caller owns that path. Never delete the source model.

### Kinematics

- `qpos_from_site_pose(physics, site_name, target_pos=None,
  target_quat=None, ...)` returns `IKResult(qpos, err_norm, steps, success)`.
- Supply at least one target. Position is shape `(3,)`, orientation is shape
  `(4,)` in MuJoCo `(w, x, y, z)` order; reject malformed or non-finite values.
- `joint_names` is `None`, a list, tuple, or NumPy array. Use it to limit
  degrees of freedom; do not assume joint IDs equal DOF indices.
- Treat `success` as the gate, not a small-looking `qpos` change. Inspect
  `err_norm` and `steps`; a failure is diagnostic data, not a valid pose.
- Use `inplace=False` by default so the caller's state is restored. Use
  `inplace=True` only when the caller explicitly wants the data mutated.

## Solver controls

Start with defaults and lower the scope before increasing iterations. The
important controls are `tol`, `rot_weight`, `regularization_threshold`,
`regularization_strength`, `max_update_norm`, `progress_thresh`, and
`max_steps`. Regularization is active while the weighted residual exceeds its
threshold; the update is capped by `max_update_norm`; the progress heuristic
can stop a stalled local solve early. The implementation does not enforce
joint limits, so validate or clamp the resulting configuration against the
model's policy before applying it.

For a failed solve, record the site name, target shapes, selected joints,
initial state policy, `err_norm`, `steps`, and whether the target is reachable.
Retry only with a justified initial state, joint subset, damping/regularization,
or iteration bound. Do not silently convert an unreachable target into a
success.

## Utility routing

- Quaternion composition/difference: `mulQuat`, `negQuat`, `diffQuat`,
  `quatDiff2Vel`, `quat2Vel`.
- Representations: `euler2mat`, `mat2euler`, `euler2quat`, `quat2mat`,
  `mat2quat`, `quat2euler`, and the intrinsic Euler pair.
- Vector rotation: `rotVecMat`, `rotVecMatT`, `rotVecQuat`.
- Vector alignment: `calculate_cosine`; equal shapes are required, and zero
  norms need an explicit interpretation by the caller.
- Tensor packing is shape-preserving bookkeeping: use flatten/unflatten for
  parameter blocks and stack/concat helpers only when leading dimensions match.
  These helpers do not change MuJoCo coordinate conventions.

See [kinematics workflows](references/kinematics-workflows.md) for concrete
edit, compile, IK, and cleanup sequences. See [troubleshooting](references/troubleshooting.md)
for failure-specific recovery.

## Robot/model relationship

A compiled `mujoco.MjModel` is the shared boundary between editing and a robot:
editing produces an `MjSpec`, compilation produces the model, and `Robot` can
construct its `MjData` from either a model path or an already compiled model.
Forward the data before reading site/body transforms. Environment code may apply
an `edit_fn` while building its spec and compile afterward; this sub-skill does
not own reset, stepping, rewards, or observation lifecycle.

## Runtime and safety boundaries

The documented path is base MuJoCo plus NumPy on CPU. MJX/JAX and CUDA are
optional acceleration paths and are not required for these APIs; do not claim
parity or import them as a fallback. The bundled smoke is non-rendering and
uses a generated temporary model. Viewer/Mink workflows remain optional and
are not needed to validate the solver contract.

Before handoff, verify:

- imports and internal links resolve without checkout-specific paths;
- edit functions compile a model and preserve intended names/properties;
- every created artifact is removed on success and on forced failure;
- valid and invalid IK targets exercise both return and validation paths; and
- the smoke reports `success`, residual, and iteration count rather than only
  printing a final configuration.

Files in this skill

  • SKILL.md5.9 KB
  • references/api-reference.md8.1 KB
  • references/kinematics-workflows.md7 KB
  • references/troubleshooting.md6.4 KB
  • scripts/ik_smoke.py6.7 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.