Robot Wiki

Kinematics

Forward and inverse kinematics, DH parameters, and the Jacobian; the theory behind the 3D playground.

Last reviewed
Reading time
13 min
Citations
9

Kinematics describes robot motion without asking what causes it. No forces and no torques: just the geometry of the links, the angles of the joints, and where the end of the arm lands. Every other layer of the stack assumes it. A simulator integrates dynamics on top of a kinematic chain. A teleoperation rig maps the operator's hand into joint space through one. Every learned manipulation policy, whatever its size, eventually emits numbers that must make sense in some robot's kinematic coordinates.

Two directions dominate. Forward kinematics takes joint angles and computes the end-effector pose. Inverse kinematics asks the reverse question: which joint angles place the end effector here? The first direction is a plain composition of transforms, cheap and unique. The second is a nonlinear inverse problem that can have no solution, one solution, or many. Most of the classical machinery, and most of this module, concerns that asymmetry.

The asymmetry is easiest to feel with an arm in front of you. Move the base joint slider below and every downstream link moves with it, because one joint angle enters every downstream position. Then try to put the fingertip at a chosen point using the sliders alone: that difficulty is the inverse problem, and most of this module is about it.

+x+yreach 2.30

end effector x +0.45 y +1.89 link units

With base 110 degrees, elbow -45 degrees and wrist -35 degrees the end effector sits at x +0.45, y +1.89 link units; those three link lengths are 1.00, 0.75 and 0.55.

Current arm pose
base
110°
elbow
-45°
wrist
-35°
end effector x
+0.45
end effector y
+1.89

Link lengths 1.00, 0.75, and 0.55. Each angle is measured relative to its parent link, and the plotted position is the running sum of the three link vectors: the planar form of the forward-kinematics transform product.

4
DH parameters per joint
theta, d, a, alpha
6
SO-101 revolute joints
the arm in the 3D playground
±0.5mm
playground IK tolerance
damped least-squares residual target
3
joints in the 2D demo
the planar chain below

Forward kinematics

A serial arm is a chain: a fixed base, then alternating rigid links and joints. Attach a coordinate frame to each link at its joint. Each joint contributes one rigid transform from the frame below it to the frame above it, parameterized by the joint variable, and multiplying the transforms in order carries the base frame to the tool frame.

A rigid transform packages a rotation RR and a translation pp into one matrix:

T=[Rp01]T = \begin{bmatrix} R & p \\ 0 & 1 \end{bmatrix}

The forward-kinematics map is the ordered product, one factor per joint:

T0n(q)=T01(q1)T12(q2)Tn1n(qn)T_0^{n}(q) = T_0^1(q_1)\,T_1^2(q_2)\,\cdots\,T_{n-1}^{n}(q_n)

Evaluating it costs nn matrix multiplications. The map is deterministic and smooth in the joint angles, and one evaluation is cheap enough to run inside every control cycle. That is the entire forward problem Lynch 2017.

In the plane the product collapses into something you can watch. Each link is a vector of length lil_i pointing along the cumulative angle q1++qiq_1 + \cdots + q_i, and the end-effector position is the running sum of those vectors:

x=i=1nlicos(q1++qi)y=i=1nlisin(q1++qi)x = \sum_{i=1}^{n} l_i \cos\left(q_1 + \cdots + q_i\right) \qquad y = \sum_{i=1}^{n} l_i \sin\left(q_1 + \cdots + q_i\right)

The arm at the top of this module evaluates exactly that expression: three revolute joints, each angle measured relative to its parent link. Keep the downstream dependence in mind; it is the seed of the Jacobian.

Denavit-Hartenberg parameters

The transform product answers the question once the frames are fixed, but the frames still need assigning. Denavit and Hartenberg gave the standard answer in 1955 Denavit 1955: the Denavit-Hartenberg convention, under which exactly four scalars describe the geometry from one joint to the next. Two belong to the link: aia_i, the distance between consecutive joint axes measured along their common normal, and αi\alpha_i, the twist angle between those axes. Two belong to the joint: did_i, the offset along the preceding axis, and θi\theta_i, the joint angle itself. For a revolute joint only θi\theta_i varies; the other three are constants of the hardware.

The per-joint transform is a fixed sequence of four elementary motions, rotation about zz, translation along zz, translation along xx, rotation about xx:

Ai=Rotz(θi)Transz(di)Transx(ai)Rotx(αi)A_i = \mathrm{Rot}_z(\theta_i)\,\mathrm{Trans}_z(d_i)\,\mathrm{Trans}_x(a_i)\,\mathrm{Rot}_x(\alpha_i) Ai=[cosθisinθicosαisinθisinαiaicosθisinθicosθicosαicosθisinαiaisinθi0sinαicosαidi0001]A_i = \begin{bmatrix} \cos\theta_i & -\sin\theta_i\cos\alpha_i & \sin\theta_i\sin\alpha_i & a_i\cos\theta_i \\ \sin\theta_i & \cos\theta_i\cos\alpha_i & -\cos\theta_i\sin\alpha_i & a_i\sin\theta_i \\ 0 & \sin\alpha_i & \cos\alpha_i & d_i \\ 0 & 0 & 0 & 1 \end{bmatrix}

For the planar arm above the table is short. All motion stays in one plane, so every twist and offset is zero, and the whole chain reduces to three link lengths and three angles.

Denavit-Hartenberg parameters of the planar three-joint arm. All twists and offsets are zero, so only the link lengths and joint angles remain.
Joint iθidiaiαi
1 (base)θ101.000
2 (elbow)θ200.750
3 (wrist)θ300.550

The convention earns its keep on real arms: four parameters per joint instead of six transform degrees of freedom, and a description compact enough to print on a datasheet. It has costs. Frame assignment is fiddly, and the parameters become ill-conditioned: as two consecutive joint axes drift toward parallel, the common normal they define can vary wildly with small changes in the axes' orientation, so a small mechanical change can jump a table entry. The product-of-exponentials formulation avoids that ill-conditioning by describing each joint as a screw about a fixed axis, and it is the treatment Modern Robotics uses throughout Lynch 2017. The output of either notation is the same transform product; the convention is a choice of bookkeeping.

A stroboscopic NASA photograph shows a PUMA 560 robot arm in several successive positions as it moves small parts between fixtures on a table.
A PUMA 560 at NASA Ames, photographed in a stroboscopic exposure as it cycles through its workspace. The six-revolute PUMA layout is the canonical teaching example for the Denavit-Hartenberg convention.
Photo: NASA / Dominic Hart / Wikimedia Commons. Licence: Public domain.

Modern rigs rarely run DH at all. The 3D playground reads the SO-101 chain directly from its URDF, a tree of links and joints where each joint carries an origin transform and a rotation axis TheRobotStudio 2026. DH remains the common paper language for writing a robot's geometry down, which is why every datasheet you read will speak it.

The Jacobian

Forward kinematics maps angles to pose. The Jacobian is the derivative of that map: the linear relation between joint velocities and end-effector velocity,

x˙=J(q)q˙\dot{x} = J(q)\,\dot{q}

with one column per joint. For revolute joint ii with axis ziz_i located at pip_i, the column is the cross product of the axis with the vector from the joint to the end effector, stacked above the axis itself; a prismatic joint contributes its axis directly:

Ji=[zi×(peepi)zi]J_i = \begin{bmatrix} z_i \times (p_\mathrm{ee} - p_i) \\ z_i \end{bmatrix}

The same matrix does double duty in statics: the transpose maps a wrench at the end effector to the joint torques that balance it, τ=JT(q)F\tau = J^{T}(q)\,F. Velocities map one way through JJ, forces the other way through JTJ^{T} Lynch 2017.

The Jacobian depends on configuration, and it can lose rank. When the arm is fully extended, or when joint axes line up, columns become dependent and the velocity map stops covering every task-space direction. Those configurations are singularities. Near one, a modest end-effector speed can demand arbitrarily large joint speeds, because the inverse of a nearly rank-deficient matrix blows up. Any velocity-level controller has to say what happens there.

Whitney's resolved motion rate control gave the classical answer in 1969: the operator commands desired hand motion along axes relevant to the task Whitney 1969; the classical rate-control relations then invert the Jacobian to obtain joint rates,

q˙=J1(q)x˙\dot{q} = J^{-1}(q)\,\dot{x}

or, when the arm is redundant and JJ is not square, use the pseudoinverse J+=JT(JJT)1J^{+} = J^{T}(JJ^{T})^{-1}, whose extra degrees of freedom can absorb secondary objectives such as staying away from joint limits. The idea turned the Jacobian from a descriptive quantity into a control law, and it is still the skeleton of most task-space controllers.

Inverse kinematics

Inverse kinematics asks for the preimage: given a target xdx_d, find qq with k(q)=xdk(q) = x_d. Three facts make it hard. The map kk is nonlinear in qq, so no single matrix inversion applies. It is many-to-one where it is onto: a point inside the workspace is usually reachable with several distinct configurations, elbow left or elbow right, and a redundant arm reaches the same pose through a continuum of postures. And it is not onto everywhere: targets outside the workspace have no solution at all, and a solver should say so rather than pretend otherwise.

Closed-form solutions exist for special geometries, most famously six-revolute arms whose last three axes intersect at the wrist, but the general tool is iterative: linearize around the current configuration, take a step, repeat, Lynch 2017

Δx=J(q)ΔqΔq=J+(q)Δx\Delta x = J(q)\,\Delta q \qquad \Delta q = J^{+}(q)\,\Delta x

Near a singularity this inherits the Jacobian's pathology. JJTJJ^{T} approaches singularity, and the pseudoinverse step blows up exactly where careful motion matters most. The standard fix stops inverting precisely and solves a regularized problem instead. Wampler's damped least squares replaces the inverse with

Δq=JT(JJT+λ2I)1Δx\Delta q = J^{T}\left(JJ^{T} + \lambda^2 I\right)^{-1}\Delta x

The damping term trades a small amount of position error for a bounded, well-conditioned step. Far from singularities it is nearly invisible; near one it is what keeps the joint rates finite. The trade is governed by a single scalar, λ\lambda Wampler 1986.

Make the damping adaptive and you recover the Levenberg-Marquardt pattern from nonlinear least squares: take a trial step, keep it only if the residual shrinks, decrease λ\lambda after success and increase it after failure Levenberg 1944 Marquardt 1963. Under that rule the residual decreases monotonically, the solver cannot chase an oscillation, and an unreachable target produces a plateau at the edge of the workspace instead of a false zero. That is precisely the behavior of the solver in this wiki's playground: damped least squares with Levenberg-Marquardt acceptance, plus joint-limit clamps on every step.

Drive the full solver

The 3D kinematics playground runs this solver on the SO-101 arm: joint sliders for forward kinematics, click-to-reach targets for inverse kinematics, and a live residual and iteration count in the HUD. The arm model comes from TheRobotStudio's SO-ARM100 project TheRobotStudio 2026.

The same geometry, inside learned policies

It is fair to ask how much of this matters once policies learn end to end. The learned part still lives inside the kinematic structure, in practice. Action chunking with ACT predicts continuous joint-space targets, fourteen dimensions across two 6-DoF arms and their grippers Zhao 2023. GR00T's recent releases shifted to a shared relative end-effector action space so that human hand data and robot grippers live in one frame, a coordinate choice with direct consequences for what pretraining data is usable NVIDIA 2026. Simulators integrate a kinematic chain under their dynamics either way, teleoperation rigs still retarget human motion into joint space, and a residual policy trained on top of a classical controller inherits its coordinate system. The policies changed who picks the numbers. They did not change what the numbers mean.

The forward direction is a product of transforms; the inverse direction is a damped iteration built on its derivative. Planning, control, and learning in the rest of this domain all run on top of those two operations.

Treat coordinate frames as an API

The learned and classical stacks meet at a coordinate contract. A Cartesian policy output is incomplete until it names the reference frame, translation units, rotation representation, composition order and whether the command is absolute or relative. A joint-space output needs the joint ordering, sign convention, limits and controller interpretation. Shape agreement is not semantic agreement: the dataset, policy, controller and robot must interpret a command as the same physical motion.

Make that contract executable. Round-trip known poses through forward and inverse kinematics, verify frame transforms against measured calibration targets, and test commands at workspace and singularity boundaries. Record the URDF and calibration versions beside every dataset and checkpoint. The calibration guide covers how those transforms are estimated; the action-space guide covers how a policy should expose them. When a learned policy fails after a robot or camera change, this boundary is the first place to test.

See also

  • Motion Planning

    RRT and its optimal variants, trajectory optimization, and CHOMP/TrajOpt.

  • Robot Calibration

    Camera intrinsics, hand-eye transforms, kinematic zeroes, timing and dynamics: the measurements that make sensor coordinates agree with motion.

  • Action Spaces for Robot Learning

    Joint, Cartesian, torque, impedance, chunked and tokenized actions: what each representation gives the learner and pushes onto the controller.

  • Humanoid Whole-Body Control

    Motion tracking from PHC to ASAP and GMT, and the three decompositions of 2026.

Linked from

  • Robot Learning Curriculum for ML Engineers

    A dependency-aware route from supervised learning to real robot policies, with the minimum robotics stack each stage assumes.

  • Action Spaces for Robot Learning

    Joint, Cartesian, torque, impedance, chunked and tokenized actions: what each representation gives the learner and pushes onto the controller.

  • Humanoid Whole-Body Control

    Motion tracking from PHC to ASAP and GMT, and the three decompositions of 2026.

  • Hardware Taxonomy

    Arms, humanoids, hands, sensors, and compute: a buyer's guide from SO-101 to Jetson Thor.

  • Motion Planning

    RRT and its optimal variants, trajectory optimization, and CHOMP/TrajOpt.

  • Control

    PID, LQR, MPC, and whole-body QP: the classical stack under every learned policy.

  • State Estimation

    Kalman filters, factor graphs, and pose estimation from noisy sensors.

  • Grasp Planning

    Contact mechanics, grasp quality metrics, and force closure.

  • Robot Calibration

    Camera intrinsics, hand-eye transforms, kinematic zeroes, timing and dynamics: the measurements that make sensor coordinates agree with motion.

References

  1. J. Denavit, R. S. Hartenberg, ASME J. Applied Mechanics, 1955.

    https://doi.org/10.1115/1.4011045

  2. Daniel E. Whitney, IEEE Trans. Man-Machine Systems, 1969.

    https://doi.org/10.1109/TMMS.1969.299896

  3. Charles W. Wampler, IEEE Trans. Systems, Man, and Cybernetics, 1986.

    https://doi.org/10.1109/TSMC.1986.289285

  4. Kenneth Levenberg, Quarterly of Applied Mathematics, 1944.

    https://doi.org/10.1090/qam/10666

  5. Donald W. Marquardt, J. SIAM, 1963.

    https://doi.org/10.1137/0111030

  6. Kevin M. Lynch, Frank C. Park, Cambridge University Press, 2017.

    https://modernrobotics.northwestern.edu/

  7. TheRobotStudio, 2026.

    https://github.com/TheRobotStudio/SO-ARM100

  8. Tony Z. Zhao, Vikash Kumar, Sergey Levine, Chelsea Finn, RSS 2023.

    https://arxiv.org/abs/2304.13705

  9. NVIDIA, 2026.

    https://github.com/NVIDIA/Isaac-GR00T

Spot a factual error or missing qualification? Report a content correction.