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 Derivative FD

From Leeroopedia
Knowledge Sources
Domains Physics Simulation, Finite Differences, Optimal Control
Last Updated 2026-02-15 04:00 GMT

Overview

Implements finite-difference derivative computation for MuJoCo's forward dynamics, inverse dynamics, passive forces, and state transitions.

Description

This module provides finite-difference (FD) methods for computing derivatives when analytical derivatives are unavailable or as a validation tool. It supports forward, backward, and centered differencing schemes with automatic clamping to joint limits. Key functions include mjd_stepFD for computing the full forward dynamics Jacobian (state transition derivatives), mjd_transitionFD for transition derivatives including sensor outputs, mjd_inverseFD for inverse dynamics derivatives, and mjd_smooth_velFD and mjd_passive_velFD for finite-difference approximations of velocity derivatives. Internal helpers manage state save/restore, state differencing that correctly handles quaternion DOFs (stateDiff), and clamped differencing for boundary cases.

Usage

Used for computing dynamics derivatives when analytical derivatives are not available (e.g., for custom actuators or plugins), for validation of analytical derivatives, and as the primary derivative computation method for model-based control and system identification applications. mjd_transitionFD is the most commonly used function for reinforcement learning and trajectory optimization.

Code Reference

Source Location

Key Functions

// Step forward dynamics with skip options
void mj_stepSkip(const mjModel* m, mjData* d, int skipstage, int skipsensor);

// Finite-difference passive force velocity derivatives
void mjd_passive_velFD(const mjModel* m, mjData* d, mjtNum eps);

// Finite-difference smooth dynamics velocity derivatives
void mjd_smooth_velFD(const mjModel* m, mjData* d, mjtNum eps);

// Finite-difference forward dynamics Jacobian (full state transition)
void mjd_stepFD(const mjModel* m, mjData* d, mjtNum eps, mjtByte flg_centered,
                mjtNum* A, mjtNum* B, mjtNum* C, mjtNum* D);

// Finite-difference transition derivatives (with sensor output)
void mjd_transitionFD(const mjModel* m, mjData* d, mjtNum eps, mjtByte flg_centered,
                      mjtNum* A, mjtNum* B, mjtNum* C, mjtNum* D);

// Finite-difference inverse dynamics derivatives
void mjd_inverseFD(const mjModel* m, mjData* d, mjtNum eps, mjtByte flg_actuation,
                   mjtNum* DfDq, mjtNum* DfDv, mjtNum* DfDa,
                   mjtNum* DsDq, mjtNum* DsDv, mjtNum* DsDa,
                   mjtNum* DmDq);

Import

#include "engine/engine_derivative_fd.h"

I/O Contract

Inputs

Name Type Required Description
m const mjModel* Yes Physics model
d mjData* Yes Simulation state (modified and restored during FD)
eps mjtNum Yes Finite-difference perturbation step size
flg_centered mjtByte Yes Use centered (1) or forward (0) differencing

Outputs

Name Type Description
A mjtNum* State transition matrix dstate_next/dstate (2nv+na x 2nv+na)
B mjtNum* Control matrix dstate_next/dctrl (2nv+na x nu)
C mjtNum* Sensor state Jacobian dsensor/dstate (nsensordata x 2nv+na)
D mjtNum* Sensor control Jacobian dsensor/dctrl (nsensordata x nu)

Related Pages

Page Connections

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