JOVANA
Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

The Equation of Motion: Mass, Coriolis, and Gravity

One compact equation captures everything a robot arm feels: inertia resisting acceleration, velocity-coupling swirl, and the constant pull of gravity.

One Equation, Three Forces

If kinematics asks "where is the arm?", dynamics asks the harder question: "what does it take to make the arm move that way?" The answer is the robot equation of motion — a single line that accounts for every push, swirl, and sag a manipulator experiences. For a robot with several joints it is written as M(q)q̈ + C(q,q̇)q̇ + g(q) = τ, where q is the list of joint angles, q̇ is how fast they are moving, and q̈ is how fast that speed is changing.

The right-hand side, τ (the Greek letter tau), is the joint torque — the twisting effort each motor must supply. The left side splits that effort into three jobs: M(q)q̈ is the cost of accelerating the masses, C(q,q̇)q̇ is the swirl that appears when joints move at once, and g(q) is the price of fighting gravity. Read it as a budget: every newton-metre a motor delivers is spent on one of these three things.

The Mass Matrix: Heaviness That Depends on Direction

In Newton's F = ma, mass is a single number. For a jointed robot, that number becomes a grid called the mass (inertia) matrix, written M(q). It is configuration-dependent heaviness: pushing a stretched-out arm feels far heavier than nudging a folded one, even though no physical mass changed. That is why M depends on the configuration q — fold the elbow and the numbers shrink.

The grid has off-diagonal entries too, and they carry a subtle truth: accelerating one joint can shove the others. Snap the shoulder forward quickly and the elbow gets yanked even if its own motor did nothing. The diagonal of M is each joint's "own" heaviness; the off-diagonal entries are how the joints lean on each other.

Where do these numbers come from? Each link's resistance to rotation is captured by its inertia tensor — a 3×3 description of how a single body's mass is spread out around its centre. A long thin rod spins easily about its length but stubbornly resists tumbling end over end; the inertia tensor encodes exactly that asymmetry. The mass matrix M(q) is what you get when the kinematics blend all the links' inertia tensors together for a given pose.

Coriolis and Centrifugal: Forces Born From Moving at Once

The middle term, C(q,q̇)q̇, holds the Coriolis and centrifugal terms. Notice that it is quadratic in velocity — each entry multiplies two velocity factors — so it only wakes up when joints are actually moving. At a standstill it vanishes; spin things up and it grows fast.

The centrifugal part is the outward tug that grows as a single joint whirls — the same force that flings water off a spinning umbrella. The Coriolis part is sneakier: it appears only when two joints move together, a sideways force that comes from one link sweeping while another is changing its distance from the axis. Think of an ice skater pulling her arms in to spin faster — that quickening is the same effect made visible.

These forces are not friction and they are not gravity — no energy is created or destroyed by them. They are simply the price of describing a spinning, multi-jointed body using joint angles. Ignore them and a fast robot will overshoot every curved path, because the controller never accounted for the swirl that builds at speed.

Gravity: The Torque to Just Hold Still

The last term, g(q), is the gravity load. Unlike the others it does not need any motion at all — even a frozen arm feels it. Hold your own arm out straight and your shoulder works hard just to stop it dropping; a robot's motors face exactly the same demand. Because gravity's leverage changes with pose, g depends on q: an outstretched arm needs far more holding torque than one hanging straight down.

This is the basis of gravity compensation: a controller computes g(q) and commands exactly that torque so the arm neither rises nor sags. With gravity cancelled, the limb floats — you can guide a heavy robot arm with a fingertip, because the motors are quietly carrying its weight for you. It is the trick behind the "zero-gravity" teach modes on collaborative arms.

Computing τ from a desired motion — feeding in q, q̇, and q̈ and reading out the required torque — is called inverse dynamics. Gravity compensation is its simplest case: ask only "what torque holds this pose?" by setting velocity and acceleration to zero, which leaves just g(q). Add the other two terms back and you can command a full, fast trajectory.

tau = M(q) @ qddot + C(q, qdot) @ qdot + g(q)

# Gravity compensation only (hold still):
#   qdot = 0, qddot = 0  ->  tau = g(q)

# Full inverse dynamics (follow a trajectory):
#   give desired q, qdot, qddot  ->  solve for tau
The equation of motion as pseudo-code: total torque is the sum of inertia, swirl, and gravity. Set the velocities to zero and only gravity remains.

Reading the Whole Equation at a Glance

Put the three terms side by side and a clear picture emerges. Each answers a different question, and together they account for every newton-metre the motors must produce.

  1. M(q)q̈ — "How hard is it to speed up?" Inertia resisting acceleration; vanishes when q̈ = 0 (constant speed).
  2. C(q,q̇)q̇ — "What swirl appears at speed?" Coriolis and centrifugal forces; vanishes when q̇ = 0 (standing still).
  3. g(q) — "What does gravity demand right now?" The hold-still torque; present even when nothing moves.
  4. τ — the sum the motors must deliver. Real robots also add a friction term for the resistance inside joints and gears.

Real hardware adds one more honest term: joint friction, the drag inside bearings and gearboxes that the ideal equation leaves out. Controllers that pre-compute M, C, and g — the core idea behind computed-torque control — let a robot move fast and accurately precisely because they predict these forces in advance instead of waiting to fight them after the fact.