Implementation:Google deepmind Mujoco Engine Core Util
| Knowledge Sources | |
|---|---|
| Domains | Physics Simulation, Kinematics, Linear Algebra |
| Last Updated | 2026-02-15 04:00 GMT |
Overview
Provides core utility functions for MuJoCo's engine, including Jacobian computation, DOF chain merging, sparsity detection, and various kinematic helper routines.
Description
This module contains foundational utility functions used throughout MuJoCo's engine. It provides sparsity and cone type determination (mj_isSparse, mj_isPyramidal), DOF chain merging for pairs of bodies (mj_mergeChain, mj_mergeChainSimple), body chain extraction (mj_bodyChain), Jacobian computation in both dense and sparse formats (mj_jac, mj_jacSparse, mj_jacSparseSimple), specialized Jacobian functions for bodies, sites, and geoms, velocity and acceleration queries (mj_objectVelocity, mj_objectAcceleration), local-to-global coordinate transforms (mj_local2Global), contact force extraction (mj_contactForce), and warning reporting (mj_warning).
Usage
These utility functions are called throughout the engine by kinematics, constraint, and derivative modules. mj_jac and its variants are critical for constraint Jacobian assembly, while mj_mergeChain is used to determine the sparsity pattern for constraint rows.
Code Reference
Source Location
- Repository: Google_deepmind_Mujoco
- File: src/engine/engine_core_util.c
- Lines: 1-948
Key Functions
// Sparsity and cone type
int mj_isSparse(const mjModel* m);
int mj_isPyramidal(const mjModel* m);
// DOF chain merging for constraint Jacobians
int mj_mergeChain(const mjModel* m, int* chain, int b1, int b2);
int mj_mergeChainSimple(const mjModel* m, int* chain, int b1, int b2);
int mj_bodyChain(const mjModel* m, int body, int* chain);
// Jacobian computation (dense and sparse)
void mj_jac(const mjModel* m, const mjData* d,
mjtNum* jacp, mjtNum* jacr, const mjtNum point[3], int body);
void mj_jacBody(const mjModel* m, const mjData* d, mjtNum* jacp, mjtNum* jacr, int body);
void mj_jacBodyCom(const mjModel* m, const mjData* d, mjtNum* jacp, mjtNum* jacr, int body);
void mj_jacSubtreeCom(const mjModel* m, mjData* d, mjtNum* jacp, int body);
void mj_jacGeom(const mjModel* m, const mjData* d, mjtNum* jacp, mjtNum* jacr, int geom);
void mj_jacSite(const mjModel* m, const mjData* d, mjtNum* jacp, mjtNum* jacr, int site);
void mj_jacPointAxis(const mjModel* m, mjData* d, mjtNum* jacPoint, mjtNum* jacAxis,
const mjtNum point[3], const mjtNum axis[3], int body);
void mj_jacSparse(const mjModel* m, const mjData* d, mjtNum* jacp, mjtNum* jacr,
const mjtNum point[3], int body, int NV, const int* chain);
// Velocity and acceleration queries
void mj_objectVelocity(const mjModel* m, const mjData* d,
int objtype, int objid, mjtNum res[6], int flg_local);
void mj_objectAcceleration(const mjModel* m, const mjData* d,
int objtype, int objid, mjtNum res[6], int flg_local);
// Coordinate transforms and contact forces
void mj_local2Global(mjData* d, mjtNum xpos[3], mjtNum xmat[9], ...);
void mj_contactForce(const mjModel* m, const mjData* d, int id, mjtNum result[6]);
// Warning system
void mj_warning(mjData* d, int warning, int info);
Import
#include "engine/engine_core_util.h"
I/O Contract
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
| m | const mjModel* | Yes | Physics model with kinematic tree and DOF structure |
| d | const mjData* / mjData* | Yes | Simulation state with computed positions and velocities |
| body | int | Varies | Body index for Jacobian/chain computation |
| point | const mjtNum[3] | Varies | 3D point for Jacobian evaluation |
Outputs
| Name | Type | Description |
|---|---|---|
| jacp | mjtNum* | Positional Jacobian (3 x nv) |
| jacr | mjtNum* | Rotational Jacobian (3 x nv) |
| chain | int* | Merged DOF chain indices |
| return value | int | Chain length or boolean flag depending on function |