# `ExMujoco.Api`
[🔗](https://github.com/d-led/ex.mujoco/blob/main/lib/ex_mujoco/api.ex#L2)

MuJoCo's own functions, bound one for one, under the names MuJoCo gives
them.

These are the calls that speak for themselves — `mj_name2id`,
`mj_kinematics`, `mj_step1` — so the binding is the C signature and
nothing more, and the argument order and meaning are MuJoCo's. The curated
surface is `ExMujoco`, which is what most callers want: it names the data
block once and answers `:ok`, an `ExMujoco.Tensor`, or an
`ExMujoco.Error`.

What is *not* here is in `docs/coverage.md`, with the reason.

# `mj_camlight`

`mj_camlight` — `void mj_camlight(mjModel* m, mjData* d)`

# `mj_collision`

`mj_collision` — `void mj_collision(mjModel* m, mjData* d)`

# `mj_comPos`

`mj_comPos` — `void mj_comPos(mjModel* m, mjData* d)`

# `mj_crb`

`mj_crb` — `void mj_crb(mjModel* m, mjData* d)`

# `mj_energyPos`

`mj_energyPos` — `void mj_energyPos(mjModel* m, mjData* d)`

# `mj_energyVel`

`mj_energyVel` — `void mj_energyVel(mjModel* m, mjData* d)`

# `mj_flex`

`mj_flex` — `void mj_flex(mjModel* m, mjData* d)`

# `mj_getTotalmass`

`mj_getTotalmass` — `mjtNum mj_getTotalmass(mjModel* m)`

# `mj_id2name`

`mj_id2name` — `char* mj_id2name(mjModel* m, int type, int id)`

# `mj_isDual`

`mj_isDual` — `int mj_isDual(mjModel* m)`

# `mj_isSparse`

`mj_isSparse` — `int mj_isSparse(mjModel* m)`

# `mj_kinematics`

`mj_kinematics` — `void mj_kinematics(mjModel* m, mjData* d)`

# `mj_makeConstraint`

`mj_makeConstraint` — `void mj_makeConstraint(mjModel* m, mjData* d)`

# `mj_name2id`

`mj_name2id` — `int mj_name2id(mjModel* m, int type, char* name)`

# `mj_projectConstraint`

`mj_projectConstraint` — `void mj_projectConstraint(mjModel* m, mjData* d)`

# `mj_referenceConstraint`

`mj_referenceConstraint` — `void mj_referenceConstraint(mjModel* m, mjData* d)`

# `mj_resetDataKeyframe`

`mj_resetDataKeyframe` — `void mj_resetDataKeyframe(mjModel* m, mjData* d, int key)`

# `mj_sensorAcc`

`mj_sensorAcc` — `void mj_sensorAcc(mjModel* m, mjData* d)`

# `mj_sensorPos`

`mj_sensorPos` — `void mj_sensorPos(mjModel* m, mjData* d)`

# `mj_sensorVel`

`mj_sensorVel` — `void mj_sensorVel(mjModel* m, mjData* d)`

# `mj_step1`

`mj_step1` — `void mj_step1(mjModel* m, mjData* d)`

# `mj_step2`

`mj_step2` — `void mj_step2(mjModel* m, mjData* d)`

# `mj_tendon`

`mj_tendon` — `void mj_tendon(mjModel* m, mjData* d)`

# `mj_transmission`

`mj_transmission` — `void mj_transmission(mjModel* m, mjData* d)`

# `mj_versionString`

`mj_versionString` — `char* mj_versionString()`

---

*Consult [api-reference.md](api-reference.md) for complete listing*
