Implementation:Google deepmind Mujoco Engine Util Spatial
| 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
- Repository: Google_deepmind_Mujoco
- File: src/engine/engine_util_spatial.c
- Lines: 1-571
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) |