Dynamics Notation Glossary
July 4, 2026 · View on GitHub
Attribution: This glossary maps notation from "A Quick Tutorial on Multibody Dynamics" by C. Karen Liu and Sumit Jain to DART's C++ API. The original PDF is preserved at
docs/dynamics.pdf.
Navigation: ← Recursive Inverse Dynamics | Index
Core Quantities
State Variables
| PDF Symbol | Description | DART API | Return Type |
|---|---|---|---|
| Generalized positions | Skeleton::getPositions() | Eigen::VectorXd | |
| Generalized velocities | Skeleton::getVelocities() | Eigen::VectorXd | |
| Generalized accelerations | Skeleton::getAccelerations() | Eigen::VectorXd | |
| or | Generalized forces | Skeleton::getForces() | Eigen::VectorXd |
| Number of DOFs | Skeleton::getNumDofs() | std::size_t |
Dynamics Matrices
| PDF Symbol | Description | DART API | Return Type |
|---|---|---|---|
| Mass matrix | Skeleton::getMassMatrix() | Eigen::MatrixXd | |
| Inverse mass matrix | Skeleton::getInvMassMatrix() | Eigen::MatrixXd | |
| Augmented mass matrix | Skeleton::getAugMassMatrix() | Eigen::MatrixXd | |
| Coriolis/centrifugal forces | Skeleton::getCoriolisForces() | Eigen::VectorXd | |
| or | Gravity forces | Skeleton::getGravityForces() | Eigen::VectorXd |
| Combined bias forces | Skeleton::getCoriolisAndGravityForces() | Eigen::VectorXd | |
| Constraint forces | Skeleton::getConstraintForces() | Eigen::VectorXd |
Equation of Motion
The standard form in the PDF:
In DART (with gravity and external forces):
Per-Body Quantities
Rigid Body Properties
| PDF Symbol | Description | DART API | Notes |
|---|---|---|---|
| Mass | BodyNode::getMass() | Scalar | |
| Inertia tensor (COM) | BodyNode::getInertia() | 3×3 matrix | |
| Inertia at zero rotation | Internal | ||
| COM position (world) | BodyNode::getCOM() | Eigen::Vector3d | |
| Rotation matrix | BodyNode::getTransform().rotation() | Eigen::Matrix3d | |
| Linear velocity (world) | BodyNode::getCOMLinearVelocity() | Eigen::Vector3d | |
| Angular velocity (world) | BodyNode::getAngularVelocity() | Eigen::Vector3d | |
| Spatial inertia | BodyNode::getSpatialInertia() | 6×6 matrix | |
| Spatial velocity | BodyNode::getSpatialVelocity() | Eigen::Vector6d |
Jacobians
| PDF Symbol | Description | DART API | Size |
|---|---|---|---|
| Body Jacobian | BodyNode::getJacobian() | 6×n | |
| Linear Jacobian | BodyNode::getLinearJacobian() | 3×n | |
| Angular Jacobian | BodyNode::getAngularJacobian() | 3×n | |
| Jacobian at point | BodyNode::getWorldJacobian(offset) | 6×n | |
| Local angular Jacobian | Internal | 3×n(k) |
Matrix Notation
Skew-Symmetric Matrix
The PDF uses to denote the skew-symmetric matrix of vector :
In DART: dart::math::makeSkewSymmetric(a) or cross product operations.
Key Identities
| Identity | Meaning |
|---|---|
| Cross product | |
| Anti-commutativity | |
| Skew-symmetric property | |
| Useful for inertia | |
| Jacobi identity | |
| Rotation transformation | |
| Angular velocity from rotation |
Coordinate Frames
| PDF Notation | Description |
|---|---|
| World frame | Global inertial frame |
| Rotation from world to link k | |
| Homogeneous transform to link k | |
| superscript | Local frame of link k |
| Angular velocity in parent's frame |
Tree Structure Notation
| Symbol | Description | Example |
|---|---|---|
| Parent link index | ||
| Path from root to k | ||
| Child link indices | Used in RNEA | |
| DOFs in joint k | 1 for revolute, 3 for ball | |
| Joint-to-joint vector | Position offset | |
| COM in local frame | Constant |
Algorithm Names
| PDF Name | DART Implementation | Complexity |
|---|---|---|
| Forward Dynamics | computeForwardDynamics() | via ABA |
| Inverse Dynamics | computeInverseDynamics() | via RNEA |
| Mass Matrix | getMassMatrix() | |
| RNEA | Recursive Newton-Euler | |
| ABA | Articulated Body Algorithm |
Python (dartpy) Equivalents
import dartpy as dart
# State
q = skeleton.getPositions() # numpy array
qdot = skeleton.getVelocities()
qddot = skeleton.getAccelerations()
tau = skeleton.getForces()
# Dynamics matrices
M = skeleton.getMassMatrix() # numpy 2D array
C = skeleton.getCoriolisForces()
g = skeleton.getGravityForces()
# Per-body
for body in skeleton.getBodyNodes():
mass = body.getMass()
com = body.getCOM()
J = body.getJacobian()
Units Convention
DART uses SI units:
| Quantity | Unit |
|---|---|
| Length | meters (m) |
| Mass | kilograms (kg) |
| Time | seconds (s) |
| Force | Newtons (N) |
| Torque | Newton-meters (N·m) |
| Angle | radians (rad) |
See Also
docs/onboarding/dynamics.md— Code explorationdocs/readthedocs/topics/control-theory.md— Control notation mappingdart/dynamics/skeleton.hpp— Source code
Navigation: ← Recursive Inverse Dynamics | Index