Implementation:Google deepmind Mujoco Engine Support
| Knowledge Sources | |
|---|---|
| Domains | Physics Simulation, API Utilities, State Management |
| Last Updated | 2026-02-15 04:00 GMT |
Overview
Provides essential support functions, version constants, state management, mass matrix operations, and geometry distance queries for the MuJoCo engine.
Description
engine_support.c is a large utility module that underpins much of the MuJoCo public API. It defines version constants (mjVERSION, mjVERSIONSTRING) and string tables for disable/enable flags and timers. The file implements the state management API for getting, setting, copying, and extracting simulation state (mj_getState, mj_setState, mj_copyState). It provides mass matrix operations (mj_fullM, mj_mulM, mj_addM), force application utilities (mj_applyFT), position integration and differentiation (mj_integratePos, mj_differentiatePos), geometry distance queries (mj_geomDistance), actuator utilities, keyframe management (mj_setKeyframe), and sensor/control read-back with delay buffer support. It also includes AVX-optimized code paths where available.
Usage
Functions in this file are called throughout both the engine internals and the public MuJoCo API. State management functions are used for checkpointing and rollback. Mass matrix functions are used during forward/inverse dynamics. Position integration is used by all integrators. Geometry distance is used for proximity queries.
Code Reference
Source Location
- Repository: Google_deepmind_Mujoco
- File: src/engine/engine_support.c
- Lines: 1-948
Key Functions
// version query
int mj_version(void);
const char* mj_versionString(void);
// state management
int mj_stateSize(const mjModel* m, int sig);
void mj_getState(const mjModel* m, const mjData* d, mjtNum* state, int sig);
void mj_setState(const mjModel* m, mjData* d, const mjtNum* state, int sig);
void mj_copyState(const mjModel* m, const mjData* src, mjData* dst, int sig);
void mj_extractState(const mjModel* m, const mjtNum* src, int srcsig,
mjtNum* dst, int dstsig);
// keyframe management
void mj_setKeyframe(mjModel* m, const mjData* d, int k);
// mass matrix operations
void mj_fullM(const mjModel* m, mjtNum* dst, const mjtNum* M);
void mj_mulM(const mjModel* m, const mjData* d, mjtNum* res, const mjtNum* vec);
void mj_mulM2(const mjModel* m, const mjData* d, mjtNum* res, const mjtNum* vec);
void mj_addM(const mjModel* m, mjData* d, mjtNum* dst,
int* rownnz, int* rowadr, int* colind);
// force application
void mj_applyFT(const mjModel* m, mjData* d,
const mjtNum force[3], const mjtNum torque[3],
const mjtNum point[3], int body, mjtNum* qfrc_target);
// position integration and differentiation
void mj_integratePos(const mjModel* m, mjtNum* qpos, const mjtNum* qvel, mjtNum dt);
void mj_differentiatePos(const mjModel* m, mjtNum* qvel, mjtNum dt,
const mjtNum* qpos1, const mjtNum* qpos2);
void mj_normalizeQuat(const mjModel* m, mjtNum* qpos);
// geometry distance
mjtNum mj_geomDistance(const mjModel* m, const mjData* d,
int geom1, int geom2, mjtNum distmax,
mjtNum fromto[6]);
// actuator utilities
int mj_actuatorDisabled(const mjModel* m, int i);
mjtNum mj_nextActivation(const mjModel* m, const mjData* d,
int act_id, int actuator_id);
// total mass
mjtNum mj_getTotalmass(const mjModel* m);
void mj_setTotalmass(mjModel* m, mjtNum newmass);
// sensor/control read-back with delay buffer
mjtNum mj_readCtrl(const mjModel* m, const mjData* d, int id, mjtNum time, int interp);
const mjtNum* mj_readSensor(const mjModel* m, const mjData* d, int id, mjtNum time,
int interp, mjtNum* buf);
Import
#include "engine/engine_support.h"
I/O Contract
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
| m | const mjModel* | Yes | Physics model specification |
| d | mjData* | Yes | Simulation state |
| state | const mjtNum* | Yes (setState) | State vector to load |
| sig | int | Yes (state ops) | Bitmask of state components (mjtState flags) |
| force / torque | const mjtNum[3] | Yes (applyFT) | Applied force and torque vectors |
| body | int | Yes (applyFT) | Body to apply force to |
| qpos / qvel | mjtNum* | Yes (integrate) | Position and velocity vectors |
| dt | mjtNum | Yes (integrate) | Time step |
Outputs
| Name | Type | Description |
|---|---|---|
| state | mjtNum* | Extracted state vector (for mj_getState) |
| dst | mjtNum* | Full mass matrix or multiplication result |
| qfrc_target | mjtNum* | Generalized force from applied Cartesian force |
| qpos | mjtNum* | Integrated positions (for mj_integratePos) |
| qvel | mjtNum* | Differentiated velocities (for mj_differentiatePos) |
| return (version) | int | Integer-encoded version number |
| return (geomDistance) | mjtNum | Signed distance between geoms |