Implementation:Google deepmind Mujoco Engine Util Misc Header
| Knowledge Sources | |
|---|---|
| Domains | Physics Simulation, Utility Functions |
| Last Updated | 2026-02-15 04:00 GMT |
Overview
Header file declaring the miscellaneous utility function API for MuJoCo, covering tendon wrapping, muscle dynamics, contact encoding, history buffers, type conversion, sorting, and general numerical helpers.
Description
This header declares the public and internal API for MuJoCo's miscellaneous utilities. It is organized into several functional groups: tendon and actuator functions (mju_wrap, mju_muscleGain, mju_muscleBias, mju_muscleDynamics, mju_muscleDynamicsTimescale, mju_muscleGainLength), geometry helpers (mju_geomSemiAxes, mju_insideGeom, mju_camPixelRay), flex interpolation (mju_defGradient, mju_evalBasis, mju_interpolate3D), Base64 encoding/decoding (mju_encodeBase64, mju_decodeBase64, mju_isValidBase64), history buffer management (mju_historyInit, mju_historyInsert, mju_historyRead), contact force encoding (mju_encodePyramid, mju_decodePyramid), numerical utilities (mju_min, mju_max, mju_clip, mju_sign, mju_round, mju_sigmoid, mju_springDamper, mju_outsideBox, mju_isBad, mju_isZero), type conversion (mju_f2n, mju_n2f, mju_d2n, mju_n2d), gather/scatter operations, sparse map construction, and sorting functions.
Usage
Included by engine modules that need tendon wrapping, muscle computations, contact force handling, data conversion, or any of the general-purpose numerical helper functions.
Code Reference
Source Location
- Repository: Google_deepmind_Mujoco
- File: src/engine/engine_util_misc.h
- Lines: 1-248
Key Functions
// Tendon wrapping
mjtNum mju_wrap(mjtNum wpnt[6], const mjtNum x0[3], const mjtNum x1[3],
const mjtNum xpos[3], const mjtNum xmat[9],
mjtNum radius, int type, const mjtNum side[3]);
// Muscle dynamics
MJAPI mjtNum mju_muscleGain(mjtNum len, mjtNum vel, const mjtNum lengthrange[2],
mjtNum acc0, const mjtNum prm[9]);
MJAPI mjtNum mju_muscleDynamics(mjtNum ctrl, mjtNum act, const mjtNum prm[3]);
// Contact encoding
MJAPI void mju_encodePyramid(mjtNum* pyramid, const mjtNum* force, const mjtNum* mu, int dim);
MJAPI void mju_decodePyramid(mjtNum* force, const mjtNum* pyramid, const mjtNum* mu, int dim);
// History buffers
MJAPI void mju_historyInit(mjtNum* buf, int n, int dim, const mjtNum* times,
const mjtNum* values, mjtNum user);
MJAPI mjtNum* mju_historyInsert(mjtNum* buf, int n, int dim, mjtNum t);
MJAPI const mjtNum* mju_historyRead(const mjtNum* buf, int n, int dim,
mjtNum* res, mjtNum t, int interp);
// Numerical utilities
MJAPI mjtNum mju_min(mjtNum a, mjtNum b);
MJAPI mjtNum mju_max(mjtNum a, mjtNum b);
MJAPI mjtNum mju_clip(mjtNum x, mjtNum min, mjtNum max);
MJAPI int mju_isBad(mjtNum x);
// Type conversion
MJAPI void mju_f2n(mjtNum* res, const float* vec, int n);
MJAPI void mju_n2f(float* res, const mjtNum* vec, int n);
// Gather/scatter
MJAPI void mju_gather(mjtNum* res, const mjtNum* vec, const int* ind, int n);
MJAPI void mju_scatter(mjtNum* res, const mjtNum* vec, const int* ind, int n);
Import
#include "engine/engine_util_misc.h"
I/O Contract
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
| x0, x1, xpos | mjtNum[3] | Yes | Wrapping endpoint positions and obstacle center |
| len, vel, ctrl, act | mjtNum | Yes | Muscle state variables |
| prm | mjtNum* | Yes | Model parameter arrays |
| buf | mjtNum* | Yes | History buffer with layout [user, cursor, times, values] |
| type | int | Yes | Object type for type2Str/str2Type conversion |
Outputs
| Name | Type | Description |
|---|---|---|
| return value | mjtNum | Computed wrap length, muscle force, clipped value, etc. |
| res | mjtNum* | Output array for conversions, gather, and interpolation |
| return value (type) | const char* or int | Type name string or type ID |