Attach a frame to every link. Link 's frame is related to link 's by a transform that depends on the joint variable between them:
That is forward kinematics, complete. Indices cancel exactly as in the transform topic, and the only new content is that each factor now has a knob on it.
Denavit–Hartenberg parameters are a convention for choosing where those frames go so that each link needs only four numbers instead of six. It is a compression scheme, and a slightly awkward one — the frames it produces often sit in geometrically unintuitive places, and there are two incompatible variants in common use. Modern libraries increasingly skip it and specify each joint by an axis and an offset, which is more numbers and less to get wrong.
For the planar two-link arm the composition is small enough to write out:
Two facts about the workspace follow directly, and generalise to every serial chain. The reachable set is an annulus with outer radius and inner radius . And equal link lengths make the inner radius zero — the arm can reach its own base — which is why equal links are a common design choice and why the singularity at full retraction is unavoidable.
Why can a robot arm not smoothly track a straight-line tool path that crosses between an elbow-up and an elbow-down configuration?
Show answer
Because the two branches are separated by a singular configuration — the arm must pass through full extension (or full retraction) to swap. At that configuration the Jacobian drops rank and the joint velocities required to maintain the tool velocity grow without bound. Real controllers either plan a path that stays in one branch, or accept a stop-and-reconfigure at the crossing. The tool path being straight and smooth says nothing about the joint path being either.