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 Core Smooth

From Leeroopedia
Knowledge Sources
Domains Physics Simulation, Forward Dynamics, Kinematics
Last Updated 2026-02-15 04:00 GMT

Overview

Implements the smooth (non-constraint) dynamics computations in MuJoCo, including forward kinematics, composite rigid body inertia, mass matrix factorization, recursive Newton-Euler, and tendon mechanics.

Description

This is MuJoCo's core smooth dynamics module, responsible for all computations that do not involve constraints. It includes forward kinematics in two stages (mj_kinematics1 for bodies, mj_kinematics2 for geoms/sites), center-of-mass computation (mj_comPos), camera and light positioning (mj_camlight), flex/soft-body deformation (mj_flex), tendon wrapping and length computation (mj_tendon), actuator transmission (mj_transmission), composite rigid body algorithm (mj_crb), mass matrix factorization via LDL decomposition (mj_factorM), forward/inverse mass matrix solves (mj_solveM, mj_solveM2), velocity computation (mj_comVel), subtree velocity (mj_subtreeVel), and recursive Newton-Euler for inverse dynamics (mj_rne). It also computes post-constraint forces (mj_rnePostConstraint).

Usage

These functions form the backbone of MuJoCo's forward dynamics pipeline. mj_kinematics is called first to compute positions, followed by mj_comPos, mj_tendon, mj_transmission, mj_crb, mj_factorM, and velocity-level computations. mj_rne is used in both forward and inverse dynamics.

Code Reference

Source Location

Key Functions

// Forward kinematics
void mj_kinematics1(const mjModel* m, mjData* d);  // bodies
void mj_kinematics2(const mjModel* m, mjData* d);  // geoms, sites
void mj_kinematics(const mjModel* m, mjData* d);    // combined

// Center of mass and camera/light
void mj_comPos(const mjModel* m, mjData* d);
void mj_camlight(const mjModel* m, mjData* d);

// Flex (soft body) computation
void mj_flex(const mjModel* m, mjData* d);

// Tendon mechanics
void mj_tendon(const mjModel* m, mjData* d);
void mj_tendonDot(const mjModel* m, mjData* d, int id, mjtNum* Jdot);

// Actuator transmission
void mj_transmission(const mjModel* m, mjData* d);

// Composite rigid body algorithm and mass matrix
void mj_crb(const mjModel* m, mjData* d);
void mj_makeM(const mjModel* m, mjData* d);
void mj_factorM(const mjModel* m, mjData* d);
void mj_factorI(mjtNum* mat, mjtNum* diaginv, int nv, ...);

// Mass matrix solve
void mj_solveM(const mjModel* m, mjData* d, mjtNum* x, const mjtNum* y, int n);
void mj_solveM2(const mjModel* m, mjData* d, mjtNum* x, const mjtNum* y, ...);
void mj_solveLD(mjtNum* restrict x, const mjtNum* qLD, const mjtNum* qLDiagInv,
                int nv, int n, ...);

// Velocity computations
void mj_comVel(const mjModel* m, mjData* d);
void mj_subtreeVel(const mjModel* m, mjData* d);

// Recursive Newton-Euler
void mj_rne(const mjModel* m, mjData* d, int flg_acc, mjtNum* result);
void mj_rnePostConstraint(const mjModel* m, mjData* d);

Import

#include "engine/engine_core_smooth.h"

I/O Contract

Inputs

Name Type Required Description
m const mjModel* Yes Physics model with kinematic tree, body/joint/tendon definitions
d mjData* Yes Simulation state with qpos, qvel, and control inputs

Outputs

Name Type Description
d->xpos, d->xmat, d->xquat mjtNum* Body Cartesian positions, orientations
d->xipos, d->ximat mjtNum* Body center-of-mass positions and orientations
d->qM mjtNum* Inertia matrix (sparse)
d->qLD, d->qLDiagInv mjtNum* LDL factorization of the inertia matrix
d->ten_length, d->ten_moment mjtNum* Tendon lengths and moment arms
d->qfrc_bias mjtNum* Coriolis, centrifugal, and gravitational forces

Related Pages

Page Connections

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