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 Util Spatial

From Leeroopedia
Knowledge Sources
Domains Physics Simulation, Spatial Mathematics
Last Updated 2026-02-15 04:00 GMT

Overview

Implements quaternion, rotation, and spatial transformation utilities for MuJoCo's physics engine, providing operations on quaternions, rotation matrices, axis-angle representations, and pose transformations.

Description

This file provides the fundamental spatial mathematics routines used throughout MuJoCo for representing and manipulating 3D orientations and transformations. Key functionality includes quaternion operations (rotation of vectors, negation, multiplication, normalization, axis-angle conversion, slerp interpolation), rotation matrix operations (quaternion-to-matrix and matrix-to-quaternion conversions), and pose (position + quaternion) operations such as composition, inversion, and transformation. These routines are critical for the kinematics pipeline where body frames, joint rotations, and camera/light orientations are computed and composed.

Usage

These functions are called during forward kinematics to compose body poses, during sensor computation for frame transformations, and throughout the visualization pipeline for camera and object orientation calculations.

Code Reference

Source Location

Key Functions

// Quaternion operations
void mju_rotVecQuat(mjtNum res[3], const mjtNum vec[3], const mjtNum quat[4]);
void mju_negQuat(mjtNum res[4], const mjtNum quat[4]);
void mju_mulQuat(mjtNum res[4], const mjtNum qa[4], const mjtNum qb[4]);
void mju_mulQuatAxis(mjtNum res[4], const mjtNum quat[4], const mjtNum axis[3]);
void mju_axisAngle2Quat(mjtNum res[4], const mjtNum axis[3], mjtNum angle);
void mju_quat2Vel(mjtNum res[3], const mjtNum quat[4], mjtNum dt);

// Rotation matrix operations
void mju_quat2Mat(mjtNum res[9], const mjtNum quat[4]);
void mju_mat2Quat(mjtNum quat[4], const mjtNum mat[9]);

// Pose operations
void mju_mulPose(mjtNum posres[3], mjtNum quatres[4],
                 const mjtNum pos1[3], const mjtNum quat1[4],
                 const mjtNum pos2[3], const mjtNum quat2[4]);
void mju_negPose(mjtNum posres[3], mjtNum quatres[4],
                 const mjtNum pos[3], const mjtNum quat[4]);

Import

#include "engine/engine_util_spatial.h"

I/O Contract

Inputs

Name Type Required Description
quat, qa, qb mjtNum[4] Yes Unit quaternions (w, x, y, z)
vec, axis mjtNum[3] Yes 3D vectors or rotation axes
mat mjtNum[9] Yes 3x3 rotation matrix in row-major order
pos mjtNum[3] Yes 3D position for pose operations
angle, dt mjtNum No Rotation angle or timestep

Outputs

Name Type Description
res mjtNum[3] or mjtNum[4] or mjtNum[9] Rotated vector, resulting quaternion, or rotation matrix
posres, quatres mjtNum[3], mjtNum[4] Resulting pose (position + quaternion)

Related Pages

Page Connections

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