{"id":29,"date":"2024-08-16T16:35:55","date_gmt":"2024-08-16T16:35:55","guid":{"rendered":"https:\/\/libraryresources.nse.org.ng\/robotics\/chapter\/chapter-3\/"},"modified":"2026-03-16T14:22:45","modified_gmt":"2026-03-16T14:22:45","slug":"chapter-3","status":"publish","type":"chapter","link":"https:\/\/libraryresources.nse.org.ng\/robotics\/chapter\/chapter-3\/","title":{"raw":"Forward Kinematics for Serial Manipulators","rendered":"Forward Kinematics for Serial Manipulators"},"content":{"raw":"[latexpage]\n<h1>1) Basics of Forward Kinematics<\/h1>\n<h2>Theory<\/h2>\nForward kinematics maps a robot's joint positions to its end effector pose.\u00a0 It describes a manipulator\u2019s motion irrespective of force and torque.\n\n[caption id=\"attachment_26\" align=\"aligncenter\" width=\"391\"]<img class=\"wp-image-25\" style=\"font-size: 1em;\" src=\"https:\/\/libraryresources.nse.org.ng\/wp-content\/uploads\/sites\/18\/2024\/08\/FK-300x99.jpg\" alt=\"forward kinematics\" width=\"391\" height=\"129\"> Figure 3.1: Forward Kinematics[\/caption]\n\nFor simplicity, assume each joint in the chain has 1 DoF (or is two joints, etc.).\u00a0 For serial manipulators, place a coordinate frame on each joint, and number the joints in order from base to tip.\u00a0 The robot's base is considered link 0, so the first joint (joint 1) drives link 1, joint 2 drives link 2, etc.\u00a0 The Z axis of each joint should indicate the axis of motion.\u00a0 An example robot (<a href=\"https:\/\/new.abb.com\/products\/robotics\/robots\/articulated-robots\/irb-6700\" rel=\"noopener\">ABB IRB 6700<\/a>) is shown below, with coordinate frames attached to each joint.\n\n[caption id=\"attachment_26\" align=\"aligncenter\" width=\"422\"]<img class=\"wp-image-26\" src=\"https:\/\/libraryresources.nse.org.ng\/wp-content\/uploads\/sites\/18\/2026\/03\/ABB-IRB-coord-frames-300x281.jpg\" alt=\"Standard 6-Axis Industrial Robot with Coordinate Frames\" width=\"422\" height=\"395\"> Figure 3.2: Standard 6-Axis Industrial Robot with Coordinate Frames[\/caption]\n\nFor a detailed introduction to forward kinematics, watch the Forward Kinematics Introduction video below.\n\nVideo: <a href=\"https:\/\/youtu.be\/0uS3XsuXiXA\" rel=\"noopener\">Forward Kinematics Intro<\/a> (click link for closed caption version)\n\nThe original version of this chapter contained H5P content. You may want to remove or replace this element.\n\nThere are three common methods of solving for a robot's forward kinematics equations.\u00a0 These are:\n<ol>\n \t<li>Basic Method<\/li>\n \t<li>Denavit-Hartenberg (DH) Method<\/li>\n \t<li>Product of Exponentials (PE) Method<\/li>\n<\/ol>\nThe basic method is used for simple robots, generally those that have three or fewer joints.\u00a0 The DH and PE methods are used for more complicated robots.\u00a0 Each section of this chapter will cover a different method of forward kinematics, with theory and examples.\n\nThe procedure for the basic method of forward kinematics is as follows:\n<ol>\n \t<li>Put one coordinate frame on each link<\/li>\n \t<li>Find the link positions $o_1^0$ \u2026 $o_n^0$<\/li>\n \t<li>Find the end effector frame orientation $R_n^0$<\/li>\n \t<li>Make the homogeneous transformation $T_n^0 = \\begin{bmatrix} R_n^0 &amp; o_n^0 \\\\ 0_{1x3} &amp; 1 \\end{bmatrix} $<\/li>\n<\/ol>\n<h2>Examples<\/h2>\nFor a detailed explanation and example of forward kinematics for a two-link RR robot, see the video below.\n\nVideo: <a href=\"https:\/\/youtu.be\/2tDR8JXvkd0\" rel=\"noopener\">Forward Kinematics - Basic Method<\/a> (click link for closed caption version)\n\nThe original version of this chapter contained H5P content. You may want to remove or replace this element.\n<h2>Quick Quiz<\/h2>\nThe original version of this chapter contained H5P content. You may want to remove or replace this element.\n<h1>2) Denavit-Hartenberg (DH) Method<\/h1>\n<h2>Theory<\/h2>\nThe Denavit-Hartenberg (DH) method of forward kinematics uses a current-frame approach. Each transformation from one coordinate frame to another is represented by the product of four basic transformations:\n<ol>\n \t<li>Rotation around current Z by angle $\\theta$ (\"joint angle\")<\/li>\n \t<li>Translation along current Z by distance\u00a0<em>d<\/em> (\"link offset\")<\/li>\n \t<li>Translation along current X by distance\u00a0<em>a<\/em> (\"link length\")<\/li>\n \t<li>Rotation around current X by angle $\\alpha$ (\"link twist\")<\/li>\n<\/ol>\n[latex]\n\n$T_i^{i-1} = [Rot_{z,\\theta_i}] [Trans_{z,d_i}] [Trans_{x,a_i}] [Rot_{x,\\alpha_i}]\u00a0 \\\\ \\\\ $\n\n$T_i^{i-1} = \\left\\[ \\begin{bmatrix} c_{\\theta i} &amp; -s_{\\theta i}c_{\\alpha i} &amp; s_{\\theta i}s_{\\alpha i} &amp; a_i c_{\\theta i} \\\\\ns_{\\theta i} &amp; c_{\\theta i}c_{\\alpha i} &amp; -c_{\\theta i}s_{\\alpha i} &amp; a_i s_{\\theta i} \\\\\n0 &amp; s_{\\alpha i} &amp; c_{\\alpha i} &amp; d_i\\\\\n0 &amp; 0 &amp; 0 &amp; 1 \\end{bmatrix} =\n\\begin{bmatrix} R_i^{i-1} &amp; o_i^{i-1} \\\\ 0_{1x3} &amp; 1 \\end{bmatrix} \\right\\]$\n\n[\/latex]\n\nIn layman's terms, this transformation tells you the orientation and position coordinates of the robot's current joint location relative to the previous one.\u00a0 This is illustrated in the following diagram:\n\n[caption id=\"attachment_26\" align=\"aligncenter\" width=\"393\"]<img class=\"wp-image-145\" src=\"https:\/\/libraryresources.nse.org.ng\/wp-content\/uploads\/sites\/18\/2026\/03\/DH-diagram-scaled-1.jpg\" alt=\"DH Frame Diagram\" width=\"393\" height=\"110\"> Figure 3.3: DH Frame Diagram[\/caption]\n\nwhere the parameter assignments are:\n<ul>\n \t<li>$\\theta_i$ joint angle: angle from $x_{i-1}$ to $x_i$ around $z_{i-1}$<\/li>\n \t<li>$d_i$ joint angle: angle from $x_{i-1}$ to $x_i$ along $z_{i-1}$<\/li>\n \t<li>$a_i$ joint angle: angle from $z_{i-1}$ to $z_i$ along $x_i$<\/li>\n \t<li>$\\alpha_i$ joint angle: angle from $z_{i-1}$ to $z_i$ around $x_i$<\/li>\n<\/ul>\nThere are a few special cases for parameter assignment.\n<ol>\n \t<li>\n<div>If $z_{i-1}$ and $z_i$ are not coplanar:\n$x_i$ goes from $z_{i-1}$ to $z_i$ perpendicularly<\/div><\/li>\n \t<li>\n<div>If $z_{i-1}$ and $z_i$ are parallel:\n$x_i$ goes along link<em> i-1<\/em><\/div><\/li>\n \t<li>\n<div>If $z_{i-1}$ and $z_i$ intersect:\n$x_i$ is perpendicular to that plane<\/div><\/li>\n<\/ol>\nThis theory is explained in the video below.\n\nVideo: <a href=\"https:\/\/youtu.be\/PkS7srpJId0\" rel=\"noopener\">Forward Kinematics - Denavit-Hartenberg (DH) Method<\/a> (click link for closed caption version)\n\n[embed]https:\/\/youtu.be\/PkS7srpJId0[\/embed]\n\nOnce the parameter definitions and mathematical rules are understood, the procedure for actually determining the forward kinematics equations is:\n<ol>\n \t<li>Identify joint axes $z_i$ (1 per joint)<\/li>\n \t<li>Attach coordinate frames (1 per link, $x_i$ on link)<\/li>\n \t<li>Identify and tabulate DH parameters<\/li>\n \t<li>Determine link transformations $T_i^{i-1}$<\/li>\n \t<li>Multiply all\u00a0<em>T<\/em>'s to obtain $T_n^0 = T_1^0 T_2^1 ... T_n^{n-1}$<\/li>\n<\/ol>\n<p style=\"text-align: left;\">$T_n^0 = T_1^0 T_2^1 ... T_n^{n-1} = \\begin{bmatrix} R_n^0 &amp; o_n^0 \\\\ 0 &amp; 1 \\end{bmatrix} $<\/p>\nKeep in mind that while these transformations are extremely tedious and complicated to find by hand, they can be calculated very efficiently in Matlab by writing a function for the transformation matrix and using the DH parameters obtained in step 3 as inputs.\n<h2>Examples<\/h2>\nTo demonstrate how to apply this theory to physical robots, two example videos are included.\u00a0 The first video below shows how to derive the DH parameters for a RPP cylindrical robot:\n\nVideo: <a href=\"https:\/\/youtu.be\/5jhvB8tMYcU\" rel=\"noopener\">FK Example - DH Method - RPP Cylindrical Robot<\/a> (click link for closed caption version)\n\nThe original version of this chapter contained H5P content. You may want to remove or replace this element.\n\nThe following video shows how to derive the DH parameters for an RRR spherical wrist (the distal half of a standard 6-axis robot):\n\nVideo: <a href=\"https:\/\/youtu.be\/qf_xQvx8KxM\" rel=\"noopener\">FK Example - DH Method - RRR Spherical Wrist<\/a> (click link for closed caption version)\n\n[embed]https:\/\/youtu.be\/qf_xQvx8KxM[\/embed]\n<h2>Quick Quiz<\/h2>\nThe original version of this chapter contained H5P content. You may want to remove or replace this element.\n<h1>3) Product of Exponentials Method<\/h1>\n<h2>Theory<\/h2>\nThe Product of Exponentials (PE) method of forward kinematics uses the axis-angle formulation with $\\hat\\omega$ instead of $\\hat{k}$ symbolizing the axis of rotation.\u00a0 For this method, math is done in the fixed (world) coordinate frame.\u00a0 The PE formula to find the transformation expressing the tip pose in the base frame is:\n<p style=\"text-align: center;\">$T_n^0 (\\theta) = e^{\\hat{\\xi_1}\\theta_1} e^{\\hat{\\xi_2}\\theta_2} ... e^{\\hat{\\xi_n}\\theta_n} T_n^0 (0) $<\/p>\nwhere $T_n^0 (0) $ is the robot's home configuration (when all joint angles = 0) and $e^{\\hat{\\xi_i}\\theta_i}$ is the 4x4 transformation for link <em>i<\/em>. The subscripts <em>0<\/em> represents base frame and <em>n<\/em> represents tip frame.\u00a0 The squiggle <strong>$\\xi$<\/strong> is the Greek letter \"xi\" and is different than <strong>$\\zeta$<\/strong> (\"zeta\").\u00a0 In layman's terms, this transformation tells you the orientation and position coordinates of the robot's tip relative to its base frame.\n\nThe procedure for implementing the product of exponentials method is as follows.\n<ol>\n \t<li>Assign coordinate frames (base\u00a0<em>0<\/em> and tip\u00a0<em>n<\/em>), link velocities ($\\hat\\omega$'s) and joint positions (<em>d's,\u00a0<\/em>$\\theta$'s).<\/li>\n \t<li>Place\u00a0<em>p<\/em>'s (initial points)<\/li>\n \t<li>Find home configuration $T_n^0 (0) $<\/li>\n \t<li>Calculate twists ($\\xi$'s and $\\hat\\xi$'s)<\/li>\n \t<li>Use the product of exponentials formula $e^{\\hat{\\xi_i}\\theta_i}$ to build the base-to-tip transformation matrix<\/li>\n<\/ol>\n$T_n^0 (\\theta) = e^{\\hat{\\xi_1}\\theta_1} e^{\\hat{\\xi_2}\\theta_2} ... e^{\\hat{\\xi_n}\\theta_n} T_n^0 (0) $\n\nThis theory is explained in the video below.\n\nVideo: <a href=\"https:\/\/youtu.be\/6p6NJ7O1byo\" rel=\"noopener\">Forward Kinematics - Product of Exponentials Method<\/a> (click link for closed caption version)\n\n[embed]https:\/\/youtu.be\/6p6NJ7O1byo[\/embed]\n\nThe steps to implement the PE method of forward kinematics are detailed below:\n\n<strong>Step 1:<\/strong> Assign coordinate frames (base\u00a0<em>0<\/em> and tip\u00a0<em>n<\/em>), link velocities ($\\hat\\omega$'s) and joint positions (<em>d's,\u00a0<\/em>$\\theta$'s).\n<ul>\n \t<li>Only assign coordinate frames for the links whose location in 3D space matters.\n<ul>\n \t<li>If all that matters is the end effector location, only assign frames for base and tip.<\/li>\n \t<li>If simulating the entire robot (and all links need to be plotted), assign frames for all links.<\/li>\n<\/ul>\n<\/li>\n \t<li>$\\hat\\omega$ points along the Z axis ($\\hat{k}$) of the joint.\u00a0 It is a unit vector for revolute joints and 0 for prismatic joints since a prismatic joint has no angular velocity.<\/li>\n \t<li><em>d\u00a0<\/em>and $\\theta$ are positive in the +Z direction.<\/li>\n \t<li>Remember that all coordinates are given in the world frame (fixed frame, base frame).<\/li>\n<\/ul>\n<strong>Step 2:<\/strong> Place\u00a0<em>p<\/em>'s (initial points)\n<ul>\n \t<li>Place these anywhere along the joint's Z axis.<\/li>\n \t<li>The most intuitive placement is on each joint frame origin.<\/li>\n \t<li>These values should be declared as constant parameters from the initial configuration, no need to account for joint motion.<\/li>\n<\/ul>\n<strong>Step 3:<\/strong> Find home configuration $T_n^0 (0) $\n<ul>\n \t<li>$R_n^0$ is a rotation you must determine from the relative orientations of the base and tip frames.\u00a0 Look at the two frames and see what rotations need to be done to go from base to tip.\u00a0 If the base and tip frames point in the same direction in this initial configuration, then $R_n^0$ is just the identity matrix.<\/li>\n \t<li>$o_n^0$ should be the same as\u00a0<em>p<\/em> for the tip<\/li>\n \t<li>$T_n^0 = \\begin{bmatrix} R_n^0 &amp; o_n^0 \\\\ 0 &amp; 1 \\end{bmatrix} $<\/li>\n<\/ul>\n<strong>Step 4:<\/strong> Calculate twist coordinates ($\\xi$'s) and twists ($\\hat\\xi$'s)\n<ul>\n \t<li>These represent joint velocities.<\/li>\n \t<li>For revolute joints: calculate these from $\\hat\\omega$ and\u00a0<em>p.<\/em><\/li>\n \t<li>For prismatic joints: calculate these from\u00a0<em>v.<\/em><\/li>\n \t<li>Formulas for the angular velocity vectors, twist coordinates, and twists are shown in the table below:<\/li>\n<\/ul>\n<table class=\"shaded aligncenter\" style=\"border-collapse: collapse; width: 100%; height: 123px;\" border=\"0\">\n<tbody>\n<tr style=\"height: 15px;\">\n<td style=\"width: 317.825px; height: 15px;\"><\/td>\n<td style=\"width: 318.237px; height: 15px;\">Prismatic Joints<\/td>\n<td style=\"width: 317.888px; height: 15px;\">Revolute Joints<\/td>\n<\/tr>\n<tr style=\"height: 31px;\">\n<td style=\"width: 317.825px; height: 31px;\">Angular velocity $\\vec\\omega$:<\/td>\n<td style=\"width: 318.237px; height: 31px;\">n\/a<\/td>\n<td style=\"width: 317.888px; height: 31px;\">$\\vec\\omega = \\begin{bmatrix} \\omega_x \\\\ \\omega_y \\\\ \\omega_z \\end{bmatrix} $<\/td>\n<\/tr>\n<tr style=\"height: 47px;\">\n<td style=\"width: 317.825px; height: 47px;\">Hatted ang vel $\\hat\\omega$:<\/td>\n<td style=\"width: 318.237px; height: 47px;\">n\/a<\/td>\n<td style=\"width: 317.888px; height: 47px;\">$\\hat\\omega = \\begin{bmatrix} 0 &amp; -\\omega_z &amp; \\omega_y \\\\ \\omega_z &amp; 0 &amp; -\\omega_x \\\\ -\\omega_y &amp; \\omega_x &amp; 0 \\end{bmatrix} $<\/td>\n<\/tr>\n<tr style=\"height: 15px;\">\n<td style=\"width: 317.825px; height: 15px;\">Twist coordinates ($\\xi$):<\/td>\n<td style=\"width: 318.237px; height: 15px;\">$\\xi = \\begin{bmatrix} \\vec{v} \\\\ 0 \\end{bmatrix} $ (6x1 matrix)<\/td>\n<td style=\"width: 317.888px; height: 15px;\">$\\xi = \\begin{bmatrix} -\\omega \\times p \\\\ \\vec{\\omega} \\end{bmatrix} $ (6x1 matrix)<\/td>\n<\/tr>\n<tr style=\"height: 15px;\">\n<td style=\"width: 317.825px; height: 15px;\">Twists ($\\hat\\xi$):<\/td>\n<td style=\"width: 318.237px; height: 15px;\">$\\hat\\xi = \\begin{bmatrix} 0 &amp; v \\\\ 0 &amp; 0 \\end{bmatrix} $ (4x4 matrix)<\/td>\n<td style=\"width: 317.888px; height: 15px;\">$\\hat\\xi = \\begin{bmatrix} \\hat{\\omega} &amp; -\\omega \\times p \\\\ 0 &amp; 0 \\end{bmatrix} $ (4x4 matrix)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\nKeep in mind that sometimes 0 represents the matrix 0 depending on the elements to fill.\u00a0 The subscript\u00a0<em>i<\/em> represents the joint number.\n\n<strong>Step 5:<\/strong>\u00a0Use the product of exponentials formula $e^{\\hat{\\xi_i}\\theta_i}$ to build the base-to-tip transformation matrix\n<p style=\"text-align: center;\">$T_n^0 (\\theta) = e^{\\hat{\\xi_1}\\theta_1} e^{\\hat{\\xi_2}\\theta_2} ... e^{\\hat{\\xi_n}\\theta_n} T_n^0 (0) $<\/p>\n<img class=\"alignnone wp-image-149\" src=\"https:\/\/libraryresources.nse.org.ng\/wp-content\/uploads\/sites\/18\/2026\/03\/rodriguez-scaled.png\" alt=\"\" width=\"499\" height=\"271\">\n\nKeep in mind that while these calculations are extremely tedious and complicated to do by hand, they can be very efficiently simulated in Matlab by writing functions for steps 4 and 5 of the analysis and calling them in a script after defining and using the parameters obtained from steps 1-3.\n<h2>Examples<\/h2>\nThese next few examples show how to perform forward kinematics analysis for serial robots using the Product of Exponentials method.\u00a0 The first video demonstrates an RPP cylindrical robot, the same robot from the example above using the DH method, but this time taking a new approach to analysis.\n\nVideo: <a href=\"https:\/\/youtu.be\/pgLEnSCc-uw\" rel=\"noopener\">FK Example - Prod Exp Method - RPP Cylindrical Robot<\/a> (click link for closed caption version)\n\n[embed]https:\/\/youtu.be\/pgLEnSCc-uw[\/embed]\n\nThis next example covers PE FK analysis of a 6-DOF standard cobot arm.\n\nVideo: <a href=\"https:\/\/youtu.be\/ed6lnh-CEH4\" rel=\"noopener\">FK Example - Prod Exp Method - 6R UR Robot<\/a> (click link for closed caption version)\n\nThe original version of this chapter contained H5P content. You may want to remove or replace this element.\n<h2>Quick Quiz<\/h2>\nThe original version of this chapter contained H5P content. You may want to remove or replace this element.","rendered":"<p>[latexpage]<\/p>\n<h1>1) Basics of Forward Kinematics<\/h1>\n<h2>Theory<\/h2>\n<p>Forward kinematics maps a robot&#8217;s joint positions to its end effector pose.\u00a0 It describes a manipulator\u2019s motion irrespective of force and torque.<\/p>\n<figure id=\"attachment_26\" aria-describedby=\"caption-attachment-26\" style=\"width: 391px\" class=\"wp-caption aligncenter\"><img decoding=\"async\" class=\"wp-image-25\" style=\"font-size: 1em;\" src=\"https:\/\/libraryresources.nse.org.ng\/wp-content\/uploads\/sites\/18\/2024\/08\/FK-300x99.jpg\" alt=\"forward kinematics\" width=\"391\" height=\"129\" srcset=\"https:\/\/libraryresources.nse.org.ng\/robotics\/wp-content\/uploads\/sites\/18\/2024\/08\/FK-300x99.jpg 300w, https:\/\/libraryresources.nse.org.ng\/robotics\/wp-content\/uploads\/sites\/18\/2024\/08\/FK-1024x339.jpg 1024w, https:\/\/libraryresources.nse.org.ng\/robotics\/wp-content\/uploads\/sites\/18\/2024\/08\/FK-768x254.jpg 768w, https:\/\/libraryresources.nse.org.ng\/robotics\/wp-content\/uploads\/sites\/18\/2024\/08\/FK-1536x508.jpg 1536w, https:\/\/libraryresources.nse.org.ng\/robotics\/wp-content\/uploads\/sites\/18\/2024\/08\/FK-65x21.jpg 65w, https:\/\/libraryresources.nse.org.ng\/robotics\/wp-content\/uploads\/sites\/18\/2024\/08\/FK-225x74.jpg 225w, https:\/\/libraryresources.nse.org.ng\/robotics\/wp-content\/uploads\/sites\/18\/2024\/08\/FK-350x116.jpg 350w, https:\/\/libraryresources.nse.org.ng\/robotics\/wp-content\/uploads\/sites\/18\/2024\/08\/FK.jpg 1854w\" sizes=\"(max-width: 391px) 100vw, 391px\" \/><figcaption id=\"caption-attachment-26\" class=\"wp-caption-text\">Figure 3.1: Forward Kinematics<\/figcaption><\/figure>\n<p>For simplicity, assume each joint in the chain has 1 DoF (or is two joints, etc.).\u00a0 For serial manipulators, place a coordinate frame on each joint, and number the joints in order from base to tip.\u00a0 The robot&#8217;s base is considered link 0, so the first joint (joint 1) drives link 1, joint 2 drives link 2, etc.\u00a0 The Z axis of each joint should indicate the axis of motion.\u00a0 An example robot (<a href=\"https:\/\/new.abb.com\/products\/robotics\/robots\/articulated-robots\/irb-6700\" rel=\"noopener\">ABB IRB 6700<\/a>) is shown below, with coordinate frames attached to each joint.<\/p>\n<figure id=\"attachment_26\" aria-describedby=\"caption-attachment-26\" style=\"width: 422px\" class=\"wp-caption aligncenter\"><img decoding=\"async\" class=\"wp-image-26\" src=\"https:\/\/libraryresources.nse.org.ng\/wp-content\/uploads\/sites\/18\/2026\/03\/ABB-IRB-coord-frames-300x281.jpg\" alt=\"Standard 6-Axis Industrial Robot with Coordinate Frames\" width=\"422\" height=\"395\" srcset=\"https:\/\/libraryresources.nse.org.ng\/robotics\/wp-content\/uploads\/sites\/18\/2026\/03\/ABB-IRB-coord-frames-300x281.jpg 300w, https:\/\/libraryresources.nse.org.ng\/robotics\/wp-content\/uploads\/sites\/18\/2026\/03\/ABB-IRB-coord-frames-1024x960.jpg 1024w, https:\/\/libraryresources.nse.org.ng\/robotics\/wp-content\/uploads\/sites\/18\/2026\/03\/ABB-IRB-coord-frames-768x720.jpg 768w, https:\/\/libraryresources.nse.org.ng\/robotics\/wp-content\/uploads\/sites\/18\/2026\/03\/ABB-IRB-coord-frames-1536x1440.jpg 1536w, https:\/\/libraryresources.nse.org.ng\/robotics\/wp-content\/uploads\/sites\/18\/2026\/03\/ABB-IRB-coord-frames-65x61.jpg 65w, https:\/\/libraryresources.nse.org.ng\/robotics\/wp-content\/uploads\/sites\/18\/2026\/03\/ABB-IRB-coord-frames-225x211.jpg 225w, https:\/\/libraryresources.nse.org.ng\/robotics\/wp-content\/uploads\/sites\/18\/2026\/03\/ABB-IRB-coord-frames-350x328.jpg 350w, https:\/\/libraryresources.nse.org.ng\/robotics\/wp-content\/uploads\/sites\/18\/2026\/03\/ABB-IRB-coord-frames.jpg 1610w\" sizes=\"(max-width: 422px) 100vw, 422px\" \/><figcaption id=\"caption-attachment-26\" class=\"wp-caption-text\">Figure 3.2: Standard 6-Axis Industrial Robot with Coordinate Frames<\/figcaption><\/figure>\n<p>For a detailed introduction to forward kinematics, watch the Forward Kinematics Introduction video below.<\/p>\n<p>Video: <a href=\"https:\/\/youtu.be\/0uS3XsuXiXA\" rel=\"noopener\">Forward Kinematics Intro<\/a> (click link for closed caption version)<\/p>\n<p>The original version of this chapter contained H5P content. You may want to remove or replace this element.<\/p>\n<p>There are three common methods of solving for a robot&#8217;s forward kinematics equations.\u00a0 These are:<\/p>\n<ol>\n<li>Basic Method<\/li>\n<li>Denavit-Hartenberg (DH) Method<\/li>\n<li>Product of Exponentials (PE) Method<\/li>\n<\/ol>\n<p>The basic method is used for simple robots, generally those that have three or fewer joints.\u00a0 The DH and PE methods are used for more complicated robots.\u00a0 Each section of this chapter will cover a different method of forward kinematics, with theory and examples.<\/p>\n<p>The procedure for the basic method of forward kinematics is as follows:<\/p>\n<ol>\n<li>Put one coordinate frame on each link<\/li>\n<li>Find the link positions $o_1^0$ \u2026 $o_n^0$<\/li>\n<li>Find the end effector frame orientation $R_n^0$<\/li>\n<li>Make the homogeneous transformation $T_n^0 = \\begin{bmatrix} R_n^0 &amp; o_n^0 \\\\ 0_{1&#215;3} &amp; 1 \\end{bmatrix} $<\/li>\n<\/ol>\n<h2>Examples<\/h2>\n<p>For a detailed explanation and example of forward kinematics for a two-link RR robot, see the video below.<\/p>\n<p>Video: <a href=\"https:\/\/youtu.be\/2tDR8JXvkd0\" rel=\"noopener\">Forward Kinematics &#8211; Basic Method<\/a> (click link for closed caption version)<\/p>\n<p>The original version of this chapter contained H5P content. You may want to remove or replace this element.<\/p>\n<h2>Quick Quiz<\/h2>\n<p>The original version of this chapter contained H5P content. You may want to remove or replace this element.<\/p>\n<h1>2) Denavit-Hartenberg (DH) Method<\/h1>\n<h2>Theory<\/h2>\n<p>The Denavit-Hartenberg (DH) method of forward kinematics uses a current-frame approach. Each transformation from one coordinate frame to another is represented by the product of four basic transformations:<\/p>\n<ol>\n<li>Rotation around current Z by angle $\\theta$ (&#8220;joint angle&#8221;)<\/li>\n<li>Translation along current Z by distance\u00a0<em>d<\/em> (&#8220;link offset&#8221;)<\/li>\n<li>Translation along current X by distance\u00a0<em>a<\/em> (&#8220;link length&#8221;)<\/li>\n<li>Rotation around current X by angle $\\alpha$ (&#8220;link twist&#8221;)<\/li>\n<\/ol>\n<p>[latex]$T_i^{i-1} = [Rot_{z,\\theta_i}] [Trans_{z,d_i}] [Trans_{x,a_i}] [Rot_{x,\\alpha_i}]\u00a0 \\\\ \\\\ $  $T_i^{i-1} = \\left\\[ \\begin{bmatrix} c_{\\theta i} & -s_{\\theta i}c_{\\alpha i} & s_{\\theta i}s_{\\alpha i} & a_i c_{\\theta i} \\\\ s_{\\theta i} & c_{\\theta i}c_{\\alpha i} & -c_{\\theta i}s_{\\alpha i} & a_i s_{\\theta i} \\\\ 0 & s_{\\alpha i} & c_{\\alpha i} & d_i\\\\ 0 & 0 & 0 & 1 \\end{bmatrix} = \\begin{bmatrix} R_i^{i-1} & o_i^{i-1} \\\\ 0_{1x3} & 1 \\end{bmatrix} \\right\\]$[\/latex]<\/p>\n<p>In layman&#8217;s terms, this transformation tells you the orientation and position coordinates of the robot&#8217;s current joint location relative to the previous one.\u00a0 This is illustrated in the following diagram:<\/p>\n<figure id=\"attachment_26\" aria-describedby=\"caption-attachment-26\" style=\"width: 393px\" class=\"wp-caption aligncenter\"><img decoding=\"async\" class=\"wp-image-145\" src=\"https:\/\/libraryresources.nse.org.ng\/wp-content\/uploads\/sites\/18\/2026\/03\/DH-diagram-scaled-1.jpg\" alt=\"DH Frame Diagram\" width=\"393\" height=\"110\" \/><figcaption id=\"caption-attachment-26\" class=\"wp-caption-text\">Figure 3.3: DH Frame Diagram<\/figcaption><\/figure>\n<p>where the parameter assignments are:<\/p>\n<ul>\n<li>$\\theta_i$ joint angle: angle from $x_{i-1}$ to $x_i$ around $z_{i-1}$<\/li>\n<li>$d_i$ joint angle: angle from $x_{i-1}$ to $x_i$ along $z_{i-1}$<\/li>\n<li>$a_i$ joint angle: angle from $z_{i-1}$ to $z_i$ along $x_i$<\/li>\n<li>$\\alpha_i$ joint angle: angle from $z_{i-1}$ to $z_i$ around $x_i$<\/li>\n<\/ul>\n<p>There are a few special cases for parameter assignment.<\/p>\n<ol>\n<li>\n<div>If $z_{i-1}$ and $z_i$ are not coplanar:<br \/>\n$x_i$ goes from $z_{i-1}$ to $z_i$ perpendicularly<\/div>\n<\/li>\n<li>\n<div>If $z_{i-1}$ and $z_i$ are parallel:<br \/>\n$x_i$ goes along link<em> i-1<\/em><\/div>\n<\/li>\n<li>\n<div>If $z_{i-1}$ and $z_i$ intersect:<br \/>\n$x_i$ is perpendicular to that plane<\/div>\n<\/li>\n<\/ol>\n<p>This theory is explained in the video below.<\/p>\n<p>Video: <a href=\"https:\/\/youtu.be\/PkS7srpJId0\" rel=\"noopener\">Forward Kinematics &#8211; Denavit-Hartenberg (DH) Method<\/a> (click link for closed caption version)<\/p>\n<p><iframe loading=\"lazy\" id=\"oembed-1\" title=\"Forward Kinematics - Denavit Hartenberg (DH) Method\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/PkS7srpJId0?feature=oembed&#38;rel=0\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/p>\n<p>Once the parameter definitions and mathematical rules are understood, the procedure for actually determining the forward kinematics equations is:<\/p>\n<ol>\n<li>Identify joint axes $z_i$ (1 per joint)<\/li>\n<li>Attach coordinate frames (1 per link, $x_i$ on link)<\/li>\n<li>Identify and tabulate DH parameters<\/li>\n<li>Determine link transformations $T_i^{i-1}$<\/li>\n<li>Multiply all\u00a0<em>T<\/em>&#8216;s to obtain $T_n^0 = T_1^0 T_2^1 &#8230; T_n^{n-1}$<\/li>\n<\/ol>\n<p style=\"text-align: left;\">$T_n^0 = T_1^0 T_2^1 &#8230; T_n^{n-1} = \\begin{bmatrix} R_n^0 &amp; o_n^0 \\\\ 0 &amp; 1 \\end{bmatrix} $<\/p>\n<p>Keep in mind that while these transformations are extremely tedious and complicated to find by hand, they can be calculated very efficiently in Matlab by writing a function for the transformation matrix and using the DH parameters obtained in step 3 as inputs.<\/p>\n<h2>Examples<\/h2>\n<p>To demonstrate how to apply this theory to physical robots, two example videos are included.\u00a0 The first video below shows how to derive the DH parameters for a RPP cylindrical robot:<\/p>\n<p>Video: <a href=\"https:\/\/youtu.be\/5jhvB8tMYcU\" rel=\"noopener\">FK Example &#8211; DH Method &#8211; RPP Cylindrical Robot<\/a> (click link for closed caption version)<\/p>\n<p>The original version of this chapter contained H5P content. You may want to remove or replace this element.<\/p>\n<p>The following video shows how to derive the DH parameters for an RRR spherical wrist (the distal half of a standard 6-axis robot):<\/p>\n<p>Video: <a href=\"https:\/\/youtu.be\/qf_xQvx8KxM\" rel=\"noopener\">FK Example &#8211; DH Method &#8211; RRR Spherical Wrist<\/a> (click link for closed caption version)<\/p>\n<p><iframe loading=\"lazy\" id=\"oembed-2\" title=\"FK Example - DH Method - RRR Spherical Wrist\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/qf_xQvx8KxM?feature=oembed&#38;rel=0\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/p>\n<h2>Quick Quiz<\/h2>\n<p>The original version of this chapter contained H5P content. You may want to remove or replace this element.<\/p>\n<h1>3) Product of Exponentials Method<\/h1>\n<h2>Theory<\/h2>\n<p>The Product of Exponentials (PE) method of forward kinematics uses the axis-angle formulation with $\\hat\\omega$ instead of $\\hat{k}$ symbolizing the axis of rotation.\u00a0 For this method, math is done in the fixed (world) coordinate frame.\u00a0 The PE formula to find the transformation expressing the tip pose in the base frame is:<\/p>\n<p style=\"text-align: center;\">$T_n^0 (\\theta) = e^{\\hat{\\xi_1}\\theta_1} e^{\\hat{\\xi_2}\\theta_2} &#8230; e^{\\hat{\\xi_n}\\theta_n} T_n^0 (0) $<\/p>\n<p>where $T_n^0 (0) $ is the robot&#8217;s home configuration (when all joint angles = 0) and $e^{\\hat{\\xi_i}\\theta_i}$ is the 4&#215;4 transformation for link <em>i<\/em>. The subscripts <em>0<\/em> represents base frame and <em>n<\/em> represents tip frame.\u00a0 The squiggle <strong>$\\xi$<\/strong> is the Greek letter &#8220;xi&#8221; and is different than <strong>$\\zeta$<\/strong> (&#8220;zeta&#8221;).\u00a0 In layman&#8217;s terms, this transformation tells you the orientation and position coordinates of the robot&#8217;s tip relative to its base frame.<\/p>\n<p>The procedure for implementing the product of exponentials method is as follows.<\/p>\n<ol>\n<li>Assign coordinate frames (base\u00a0<em>0<\/em> and tip\u00a0<em>n<\/em>), link velocities ($\\hat\\omega$&#8217;s) and joint positions (<em>d&#8217;s,\u00a0<\/em>$\\theta$&#8217;s).<\/li>\n<li>Place\u00a0<em>p<\/em>&#8216;s (initial points)<\/li>\n<li>Find home configuration $T_n^0 (0) $<\/li>\n<li>Calculate twists ($\\xi$&#8217;s and $\\hat\\xi$&#8217;s)<\/li>\n<li>Use the product of exponentials formula $e^{\\hat{\\xi_i}\\theta_i}$ to build the base-to-tip transformation matrix<\/li>\n<\/ol>\n<p>$T_n^0 (\\theta) = e^{\\hat{\\xi_1}\\theta_1} e^{\\hat{\\xi_2}\\theta_2} &#8230; e^{\\hat{\\xi_n}\\theta_n} T_n^0 (0) $<\/p>\n<p>This theory is explained in the video below.<\/p>\n<p>Video: <a href=\"https:\/\/youtu.be\/6p6NJ7O1byo\" rel=\"noopener\">Forward Kinematics &#8211; Product of Exponentials Method<\/a> (click link for closed caption version)<\/p>\n<p><iframe loading=\"lazy\" id=\"oembed-3\" title=\"Forward Kinematics - Product of Exponentials Method\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/6p6NJ7O1byo?feature=oembed&#38;rel=0\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/p>\n<p>The steps to implement the PE method of forward kinematics are detailed below:<\/p>\n<p><strong>Step 1:<\/strong> Assign coordinate frames (base\u00a0<em>0<\/em> and tip\u00a0<em>n<\/em>), link velocities ($\\hat\\omega$&#8217;s) and joint positions (<em>d&#8217;s,\u00a0<\/em>$\\theta$&#8217;s).<\/p>\n<ul>\n<li>Only assign coordinate frames for the links whose location in 3D space matters.\n<ul>\n<li>If all that matters is the end effector location, only assign frames for base and tip.<\/li>\n<li>If simulating the entire robot (and all links need to be plotted), assign frames for all links.<\/li>\n<\/ul>\n<\/li>\n<li>$\\hat\\omega$ points along the Z axis ($\\hat{k}$) of the joint.\u00a0 It is a unit vector for revolute joints and 0 for prismatic joints since a prismatic joint has no angular velocity.<\/li>\n<li><em>d\u00a0<\/em>and $\\theta$ are positive in the +Z direction.<\/li>\n<li>Remember that all coordinates are given in the world frame (fixed frame, base frame).<\/li>\n<\/ul>\n<p><strong>Step 2:<\/strong> Place\u00a0<em>p<\/em>&#8216;s (initial points)<\/p>\n<ul>\n<li>Place these anywhere along the joint&#8217;s Z axis.<\/li>\n<li>The most intuitive placement is on each joint frame origin.<\/li>\n<li>These values should be declared as constant parameters from the initial configuration, no need to account for joint motion.<\/li>\n<\/ul>\n<p><strong>Step 3:<\/strong> Find home configuration $T_n^0 (0) $<\/p>\n<ul>\n<li>$R_n^0$ is a rotation you must determine from the relative orientations of the base and tip frames.\u00a0 Look at the two frames and see what rotations need to be done to go from base to tip.\u00a0 If the base and tip frames point in the same direction in this initial configuration, then $R_n^0$ is just the identity matrix.<\/li>\n<li>$o_n^0$ should be the same as\u00a0<em>p<\/em> for the tip<\/li>\n<li>$T_n^0 = \\begin{bmatrix} R_n^0 &amp; o_n^0 \\\\ 0 &amp; 1 \\end{bmatrix} $<\/li>\n<\/ul>\n<p><strong>Step 4:<\/strong> Calculate twist coordinates ($\\xi$&#8217;s) and twists ($\\hat\\xi$&#8217;s)<\/p>\n<ul>\n<li>These represent joint velocities.<\/li>\n<li>For revolute joints: calculate these from $\\hat\\omega$ and\u00a0<em>p.<\/em><\/li>\n<li>For prismatic joints: calculate these from\u00a0<em>v.<\/em><\/li>\n<li>Formulas for the angular velocity vectors, twist coordinates, and twists are shown in the table below:<\/li>\n<\/ul>\n<table class=\"shaded aligncenter\" style=\"border-collapse: collapse; width: 100%; height: 123px;\">\n<tbody>\n<tr style=\"height: 15px;\">\n<td style=\"width: 317.825px; height: 15px;\"><\/td>\n<td style=\"width: 318.237px; height: 15px;\">Prismatic Joints<\/td>\n<td style=\"width: 317.888px; height: 15px;\">Revolute Joints<\/td>\n<\/tr>\n<tr style=\"height: 31px;\">\n<td style=\"width: 317.825px; height: 31px;\">Angular velocity $\\vec\\omega$:<\/td>\n<td style=\"width: 318.237px; height: 31px;\">n\/a<\/td>\n<td style=\"width: 317.888px; height: 31px;\">$\\vec\\omega = \\begin{bmatrix} \\omega_x \\\\ \\omega_y \\\\ \\omega_z \\end{bmatrix} $<\/td>\n<\/tr>\n<tr style=\"height: 47px;\">\n<td style=\"width: 317.825px; height: 47px;\">Hatted ang vel $\\hat\\omega$:<\/td>\n<td style=\"width: 318.237px; height: 47px;\">n\/a<\/td>\n<td style=\"width: 317.888px; height: 47px;\">$\\hat\\omega = \\begin{bmatrix} 0 &amp; -\\omega_z &amp; \\omega_y \\\\ \\omega_z &amp; 0 &amp; -\\omega_x \\\\ -\\omega_y &amp; \\omega_x &amp; 0 \\end{bmatrix} $<\/td>\n<\/tr>\n<tr style=\"height: 15px;\">\n<td style=\"width: 317.825px; height: 15px;\">Twist coordinates ($\\xi$):<\/td>\n<td style=\"width: 318.237px; height: 15px;\">$\\xi = \\begin{bmatrix} \\vec{v} \\\\ 0 \\end{bmatrix} $ (6&#215;1 matrix)<\/td>\n<td style=\"width: 317.888px; height: 15px;\">$\\xi = \\begin{bmatrix} -\\omega \\times p \\\\ \\vec{\\omega} \\end{bmatrix} $ (6&#215;1 matrix)<\/td>\n<\/tr>\n<tr style=\"height: 15px;\">\n<td style=\"width: 317.825px; height: 15px;\">Twists ($\\hat\\xi$):<\/td>\n<td style=\"width: 318.237px; height: 15px;\">$\\hat\\xi = \\begin{bmatrix} 0 &amp; v \\\\ 0 &amp; 0 \\end{bmatrix} $ (4&#215;4 matrix)<\/td>\n<td style=\"width: 317.888px; height: 15px;\">$\\hat\\xi = \\begin{bmatrix} \\hat{\\omega} &amp; -\\omega \\times p \\\\ 0 &amp; 0 \\end{bmatrix} $ (4&#215;4 matrix)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Keep in mind that sometimes 0 represents the matrix 0 depending on the elements to fill.\u00a0 The subscript\u00a0<em>i<\/em> represents the joint number.<\/p>\n<p><strong>Step 5:<\/strong>\u00a0Use the product of exponentials formula $e^{\\hat{\\xi_i}\\theta_i}$ to build the base-to-tip transformation matrix<\/p>\n<p style=\"text-align: center;\">$T_n^0 (\\theta) = e^{\\hat{\\xi_1}\\theta_1} e^{\\hat{\\xi_2}\\theta_2} &#8230; e^{\\hat{\\xi_n}\\theta_n} T_n^0 (0) $<\/p>\n<p><img decoding=\"async\" class=\"alignnone wp-image-149\" src=\"https:\/\/libraryresources.nse.org.ng\/wp-content\/uploads\/sites\/18\/2026\/03\/rodriguez-scaled.png\" alt=\"\" width=\"499\" height=\"271\" \/><\/p>\n<p>Keep in mind that while these calculations are extremely tedious and complicated to do by hand, they can be very efficiently simulated in Matlab by writing functions for steps 4 and 5 of the analysis and calling them in a script after defining and using the parameters obtained from steps 1-3.<\/p>\n<h2>Examples<\/h2>\n<p>These next few examples show how to perform forward kinematics analysis for serial robots using the Product of Exponentials method.\u00a0 The first video demonstrates an RPP cylindrical robot, the same robot from the example above using the DH method, but this time taking a new approach to analysis.<\/p>\n<p>Video: <a href=\"https:\/\/youtu.be\/pgLEnSCc-uw\" rel=\"noopener\">FK Example &#8211; Prod Exp Method &#8211; RPP Cylindrical Robot<\/a> (click link for closed caption version)<\/p>\n<p><iframe loading=\"lazy\" id=\"oembed-4\" title=\"FK Example - Prod Exp Method - RPP Cylindrical Robot\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/pgLEnSCc-uw?feature=oembed&#38;rel=0\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/p>\n<p>This next example covers PE FK analysis of a 6-DOF standard cobot arm.<\/p>\n<p>Video: <a href=\"https:\/\/youtu.be\/ed6lnh-CEH4\" rel=\"noopener\">FK Example &#8211; Prod Exp Method &#8211; 6R UR Robot<\/a> (click link for closed caption version)<\/p>\n<p>The original version of this chapter contained H5P content. You may want to remove or replace this element.<\/p>\n<h2>Quick Quiz<\/h2>\n<p>The original version of this chapter contained H5P content. You may want to remove or replace this element.<\/p>\n","protected":false},"author":1,"menu_order":3,"template":"","meta":{"pb_show_title":"","pb_short_title":"Ch. 3: Forward Kinematics","pb_subtitle":"","pb_authors":["eledoux"],"pb_section_license":""},"chapter-type":[],"contributor":[62],"license":[],"class_list":["post-29","chapter","type-chapter","status-publish","hentry","contributor-eledoux"],"part":18,"_links":{"self":[{"href":"https:\/\/libraryresources.nse.org.ng\/robotics\/wp-json\/pressbooks\/v2\/chapters\/29","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/libraryresources.nse.org.ng\/robotics\/wp-json\/pressbooks\/v2\/chapters"}],"about":[{"href":"https:\/\/libraryresources.nse.org.ng\/robotics\/wp-json\/wp\/v2\/types\/chapter"}],"author":[{"embeddable":true,"href":"https:\/\/libraryresources.nse.org.ng\/robotics\/wp-json\/wp\/v2\/users\/1"}],"version-history":[{"count":1,"href":"https:\/\/libraryresources.nse.org.ng\/robotics\/wp-json\/pressbooks\/v2\/chapters\/29\/revisions"}],"predecessor-version":[{"id":30,"href":"https:\/\/libraryresources.nse.org.ng\/robotics\/wp-json\/pressbooks\/v2\/chapters\/29\/revisions\/30"}],"part":[{"href":"https:\/\/libraryresources.nse.org.ng\/robotics\/wp-json\/pressbooks\/v2\/parts\/18"}],"metadata":[{"href":"https:\/\/libraryresources.nse.org.ng\/robotics\/wp-json\/pressbooks\/v2\/chapters\/29\/metadata\/"}],"wp:attachment":[{"href":"https:\/\/libraryresources.nse.org.ng\/robotics\/wp-json\/wp\/v2\/media?parent=29"}],"wp:term":[{"taxonomy":"chapter-type","embeddable":true,"href":"https:\/\/libraryresources.nse.org.ng\/robotics\/wp-json\/pressbooks\/v2\/chapter-type?post=29"},{"taxonomy":"contributor","embeddable":true,"href":"https:\/\/libraryresources.nse.org.ng\/robotics\/wp-json\/wp\/v2\/contributor?post=29"},{"taxonomy":"license","embeddable":true,"href":"https:\/\/libraryresources.nse.org.ng\/robotics\/wp-json\/wp\/v2\/license?post=29"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}