Jump to content

Connect SuperML | Leeroopedia MCP: Equip your AI agents with best practices, code verification, and debugging knowledge. Powered by Leeroo — building Organizational Superintelligence. Contact us at founders@leeroo.com.

Implementation:Google deepmind Mujoco Engine Support

From Leeroopedia
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

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

Related Pages

Page Connections

Double-click a node to navigate. Hold to expand connections.
Principle
Implementation
Heuristic
Environment