Topic hub

Kinematics

The geometry of motion without forces. How joint angles map to tool pose and back, the DH and product-of-exponentials conventions, Jacobians, singularities and what to do with redundant joints.

Updated 14 Nov 2026 · forward kinematics, inverse kinematics, Denavit-Hartenberg, product of exponentials, Jacobian, singularity, redundancy, null space

Overview

Kinematics is the geometry of a robot’s motion, ignoring the forces that cause it. It answers two questions. Given the joint angles, where is the tool? Given where the tool should be, what joint angles put it there? The first is forward kinematics and always has one answer. The second is inverse kinematics and may have none, one, several or infinitely many.

Everything above the motor drives uses kinematics. Motion planners check poses with it, controllers map tool-space errors into joint commands with its Jacobian, and calibration corrects its parameters. This hub is for engineers who will write or debug that layer, or who need to know why an arm suddenly slowed down near a particular pose.

Key ideas

Forward kinematics: DH and product of exponentials

For a serial arm, forward kinematics is a product of one transform per joint. The question is how to describe each transform.

The Denavit-Hartenberg (DH) convention, from Denavit and Hartenberg’s 1955 paper, attaches a frame to each link under strict rules so that each joint needs only four numbers. It is compact and appears in most robot datasheets. Its weakness is that two variants are in common use, usually called standard and modified, and they place the frames differently. A DH table copied from one variant into code written for the other gives a plausible but wrong arm.

The product of exponentials (PoE) formula, introduced by Brockett, describes each joint by its screw axis in the base frame when the arm is at its home pose. The tool pose is the home pose premultiplied by one matrix exponential per joint. There is no per-link frame to place, the parameters have a direct physical meaning, and the formulation connects directly to the Lie group tools in /topics/spatial-math/. Lynch and Park’s textbook builds its kinematics on PoE.

URDF, the format most ROS tools read, uses neither. Each joint carries an origin transform and an axis, which is closer to PoE in spirit. See /reference/dh-and-poe/ for both conventions side by side.

x0y0θ1θ2joint 1 (base)joint 2, elbow-downelbow-up solutionl1l2tool (x, y)forward kinematicsjoint angles to tool posex = l1 cos θ1 + l2 cos(θ1+θ2)y = l1 sin θ1 + l2 sin(θ1+θ2)inverse kinematicstool pose to joint angles: 0, 1 or 2
A planar two-link arm. Forward kinematics maps the joint angles θ1 and θ2 to the tool position (x, y). Inverse kinematics runs the other way and has two solutions for this target: the elbow-down pose drawn solid and the elbow-up pose drawn dashed.

Jacobians and singularities

The Jacobian J is the matrix of partial derivatives of tool pose with respect to joint angles. Multiplied by the joint velocity vector, it gives the tool’s linear and angular velocity. Its transpose does the reverse job for forces: it maps a force and torque at the tool to the joint torques that balance it. The same matrix therefore serves velocity control, force control and static load checks.

A singularity is a configuration where J loses rank. At that pose the tool cannot move in some direction, however fast the joints turn. Near it, small tool motions in that direction demand very large joint speeds. Common cases on a 6-joint arm with a spherical wrist are the wrist singularity, where two wrist axes line up, and the elbow singularity, where the arm is fully stretched at the edge of its workspace. Many industrial controllers slow down or stop near them. Planners avoid them by monitoring the smallest singular value of J, or the manipulability measure, the square root of the determinant of J times J transposed.

Inverse kinematics: analytic and numerical

Many 6-joint arms with spherical wrists have closed-form IK. The solution is fast, exact, and enumerates every solution, often several per pose for elbow, shoulder and wrist flips. The cost is that it must be derived per robot.

Numerical IK works for any chain. Starting from a guess, it repeatedly solves a linear system with the Jacobian to reduce the pose error. The plain pseudoinverse step becomes unstable near singularities. Damped least squares adds a small regularising term that trades a little accuracy for stability, as Buss’s tutorial note explains. Numerical solvers return one solution, which depends on the starting guess, and can fail when joint limits block the path to it.

Redundancy

A robot with more joints than the task needs is redundant. A 7-joint arm placing a tool in 6-DoF space has a one-dimensional family of joint solutions for each tool pose, usually visible as the elbow swinging while the hand stays still. That spare motion lives in the null space of J. A controller can add any null-space velocity without disturbing the tool, and uses it for secondary goals: staying away from joint limits, keeping clear of obstacles or keeping manipulability high.

Where to start

Work through /learn/beginner/03-forward-kinematics/ and then /learn/beginner/04-inverse-kinematics/. The project /projects/two-link-arm-draws-with-ik/ puts both into a MuJoCo simulation. Keep /reference/dh-and-poe/ open while you work.

Tools and platforms

Tool What it is for Licence Platform
Robotics Toolbox for Python DH and ETS models, FK, Jacobians and numerical IK in Python MIT /platforms/opensource/
Pinocchio Fast kinematics and dynamics with analytical derivatives, C++ and Python BSD-2-Clause /platforms/opensource/
Orocos KDL Kinematic chains and solvers. MoveIt 2’s default IK plugin is built on it LGPL-2.1-or-later /platforms/ros/
TRAC-IK IK that runs a KDL-based solver and an SQP solver in parallel, better with joint limits BSD-3-Clause /platforms/ros/
MoveIt 2 Motion planning framework with pluggable IK solvers BSD-3-Clause /platforms/ros/
MuJoCo Kinematics and Jacobians of an MJCF model inside a simulator Apache-2.0 /platforms/mujoco/

Common mistakes

  • Mixing standard and modified DH. Check which one the datasheet uses before typing a single number.
  • Comparing your FK with the robot controller’s and forgetting the tool offset (TCP) or the base mounting transform.
  • Trusting the first IK solution. Check joint limits, collisions and whether it is the branch you wanted (elbow up or down).
  • Commanding straight-line tool motions through a singularity. The joint speeds required grow without bound near it.
  • Using the pseudoinverse without damping in a real-time loop.

Going deeper