# Robot kinematics
**Robot kinematics** is the branch of [[Kinematics|kinematics]] that relates the angles or displacements at a robot's joints to the position and orientation of its end effector, without reference to the forces or torques that produce the motion. A manipulator is modeled as a [[Kinematic_chain|kinematic chain]] of rigid links joined by revolute or prismatic [[Kinematic_pair|joints]], so that the whole arm's shape is fixed as soon as every joint variable is fixed; three joints in a plane, for instance, give the tip exactly three [[Degrees_of_freedom_(mechanics)|degrees of freedom]] — two of position and one of heading. Robot kinematics is usually split into two linked problems: forward kinematics, which computes the end effector's pose from a given set of joint values, and [[Inverse_kinematics|inverse kinematics]], which finds the joint values that reach a given pose.
For a [[Serial_manipulator|serial manipulator]][^jensen109] — links in a single open chain, free at one end — forward kinematics has exactly one answer for every joint configuration, found by composing one rigid-body transform per joint. The [[Denavit–Hartenberg_parameters|Denavit–Hartenberg parameters]] are the standard four numbers per joint — link length, link twist, link offset and joint angle — used to build that transform in a form nearly every robotics textbook shares.[^craig2005][^lynchpark2017] [[Forward_kinematics|Forward kinematics]] always has a unique answer; inverse kinematics is the harder direction, since a target pose can have no solution, one, or several, and solving it is central to telling a robot where to put its hand.
The framework microsim below poses a three-link planar arm and works out its forward kinematics two ways at once: the running sum of joint angles that places the links on screen, and the product of three Denavit–Hartenberg matrices that fills the numeric readout beside them. Move a joint and both numbers move together, and the Denavit–Hartenberg table updates its θ column to match.
## Forward kinematics
Forward kinematics equations map a vector of joint variables directly to the pose — position and orientation together — of the last link in the chain. For the sim's three-joint planar arm, the position half of that map is a running sum: each joint rotates every link that follows it, so the tip's coordinates are the sum of each link's length projected through the cumulative angle of every joint up to and including it, x = L₁cos θ₁ + L₂cos(θ₁+θ₂) + L₃cos(θ₁+θ₂+θ₃), and the same sum with sine in place of cosine for y. The end effector's heading φ is simply θ₁+θ₂+θ₃ — in a planar chain, orientations add exactly the way the joint angles that produce them do.
The same answer also comes out of a different, more general calculation, the one that scales to a robot with any mix of revolute and prismatic joints in three dimensions: write each joint as a 4×4 homogeneous transform Tᵢ built from its [[Denavit–Hartenberg_parameters|Denavit–Hartenberg parameters]], Tᵢ = Rz(θᵢ)·Tz(dᵢ)·Tx(aᵢ)·Rx(αᵢ), and multiply the chain, T = T₁T₂T₃.[^robotkinspec] For a planar arm every joint's twist α and offset d are zero, so only the link length a and the joint angle θ carry information, and the Denavit–Hartenberg table the sim prints beside the arm reduces to those two columns. The sim keeps both routes on screen at once: at its "elbow up" default (θ₁ = 60°, θ₂ = −60°, θ₃ = −30°, with link lengths 1, 0.8 and 0.5 m) the running sum and the matrix product both give a tip at (1.73, 0.62) m, a heading φ of −30°, and a distance of 1.84 m from the base — one working check that the coordinate-geometry picture and the general matrix method describe the same chain.[^robotkinspec]
*Try: turn θ₁ alone through its full range and watch the tip stay on the faint blue circle centred on the shoulder joint — with θ₂ and θ₃ frozen, that circle is every position the rest of the arm can be dragged to by that one joint. Then compare the tip coordinates the sim prints from the plain angle sum against the ones it prints from the Denavit–Hartenberg matrix product: the two agree to the millimetre at every setting, because they are one transform written two ways.*
## Inverse kinematics
Inverse kinematics runs the same relationship backward: given a target position and orientation for the end effector, find joint values that reach it. Because the forward map is generally nonlinear — trigonometric in the joint angles — the inverse map is not simply a matrix inversion. A target inside the arm's reachable workspace can have several valid joint solutions (an elbow-up and an elbow-down branch are the classic pair for a two-link planar arm), a target exactly on the boundary of that workspace has only one, with every joint stretched to its limit, and a target outside the workspace has none at all. Short chains confined to a plane admit closed-form trigonometric solutions; a general serial arm in three dimensions is usually solved iteratively instead, refining a joint-angle guess with the [[Jacobian_matrix_and_determinant|Jacobian]] until the pose it produces is close enough to the target.[^lynchpark2017]
This article's sim runs forward only: every number on its readout comes from a chosen set of joint angles, never from a target the reader drags. The two-link analytic elbow-up and elbow-down branches, the reach-circle boundary, and a Jacobian pseudo-inverse iteration for a three-link chain belong to the dedicated [[Inverse_kinematics|inverse kinematics]] article and its own sim, which starts from the same kind of arm and lets the reader move the tip instead of the joints.
## Jacobian
The Jacobian matrix J(θ) relates small changes in the joint angles to the small change in tip position and orientation they produce, and its condition at a given configuration says how efficiently the joints can move the tip in any direction. A standard scalar summary is Yoshikawa's manipulability, w = √det(JJᵀ): large where the arm sits well clear of any limit and every direction of tip motion is comparably easy to produce, and exactly zero where the Jacobian loses rank — a singular configuration in which no combination of joint rates can move the tip along at least one direction at all.[^robotkinspec][^lynchpark2017]
The sim computes w for the three-link arm at every setting and prints it beside the Denavit–Hartenberg table. Two configurations drive it to zero: the arm fully extended, all three links colinear and the tip sitting exactly on the outer grey reach circle, and the arm folded sharply back on itself with θ₂ and θ₃ both near ±180° — colinear again, but doubled back rather than stretched out. At the default "elbow up" pose the arm is comfortably short of either extreme and w = 1.40; dragging θ₁ toward a fully stretched line drives w toward zero right where the tip reaches the [[Serial_manipulator|manipulator]]'s outer workspace boundary. Every later question a robot's kinematics answers starts from the same chain of transforms built here: how many independent ways the chain can move is its degrees of freedom; exactly which joint values reach a target pose is inverse kinematics; how far a real serial arm can reach at all is its workspace.
## See also
- [[Forward_kinematics]]
- [[Inverse_kinematics]]
- [[Denavit–Hartenberg_parameters]]
- [[Kinematic_chain]]
- [[Jacobian_matrix_and_determinant]]
- [[Serial_manipulator]]
- [[Degrees_of_freedom_(mechanics)]]
- [[Parallel_manipulator]]
## References
[^craig2005]: Craig, John J. *Introduction to Robotics: Mechanics and Control*. Pearson/Prentice Hall, 3rd edition, 2005. Chapter 3 covers manipulator forward kinematics via the Denavit–Hartenberg convention; one of the two standard texts this article and its sim follow for the transform form (the edition commonly cited in robotics courses; a specific printing was not pinned for this run).
[^lynchpark2017]: Lynch, Kevin M., and Frank C. Park. *Modern Robotics: Mechanics, Planning, and Control*. Cambridge University Press, 2017. Chapter 4 ("Forward Kinematics") and Appendix C ("Denavit-Hartenberg Parameters") give the same standard transform form; chapter 6 covers the Jacobian-based inverse-kinematics iteration this article's Inverse kinematics section forward-references. Free edition at http://modernrobotics.org.
[^jensen109]: Jensen, N. *Introduction to Mechanical Design and Manufacturing*. Portal Book 109, pp. 189, 194–195: robot arms described and analysed as serial mechanisms.
[^robotkinspec]: Wikitube Robotics portal sim spec `specs/sims/Robot_kinematics.json` and hooks `Robot_kinematics.js` (Wikitube microsim framework, gated SHIP). Forward kinematics computed two ways from the same joint angles: `robot.kin.fkPlanar` (the running sum, which places the links) and `robot.kin.fkDH` over the table [aᵢ, αᵢ, dᵢ, θᵢ], with `robot.kin.dh` building each Tᵢ = Rz(θ)Tz(d)Tx(a)Rx(α); manipulability w = √det(JJᵀ) from `robot.kin.jacobianPlanar` / `robot.kin.manipulability`. Nothing on the sim's readout is ILLUSTRATIVE — every number is the chain's own geometry. Default "elbow up" pose: θ₁=60°, θ₂=−60°, θ₃=−30°, link lengths 1, 0.8, 0.5 m; tip (1.73, 0.62) m, φ=−30°, r=1.84 m, w=1.40.
**Microsim — three.js (Wikitube framework):** *Robot kinematics*
<!-- ROBSIM:Robot_kinematics -->
*Sim built from `MICROSIM_GUIDE/specs/sims/Robot_kinematics.json`, bench-gated SHIP (15 draws/frame, 198 triangles, zero console errors). Staged for the [[PORTAL_Robotics|Robotics portal]] spine, section ROB1 (Part I — Kinematics); this anchor is where the g30 placement generator will resolve a live embed once the set is deployed.*
## Wikipedia : Wikitube
**Strict pair:** [Wikipedia](https://en.wikipedia.org/wiki/Robot_kinematics) : [Wikitube](https://en.wikitube.io/wiki/Robot_kinematics) — skeleton pinned to revision 1341546050 (2026-09-17 verification pass, `_registry/plans/ROBOTICS_SECTIONS.md` §6). The section skeleton above (Forward kinematics, Inverse kinematics, Jacobian) is a good-faith reconstruction: live Wikipedia fetch was unavailable to this run (network policy blocked `en.wikipedia.org` at the proxy), so it has not been machine-checked against the pinned revision's actual H2 list. Re-run `parity_check.py --outline "Robot kinematics"` against oldid 1341546050 before promoting this page past `draft`.
<!-- hub tags: Robotics; PORTAL_Robotics section ROB1 (Part I - Kinematics) -->