Inverse Kinematics: Pose from Point instead of Point from Pose

Robotics
Math
Authors

Alireza Azimi

Veronika Ivanytska

Published

June 28, 2025

Modified

June 28, 2025

Introduction

Point at your nose. In how many ways can you orient your arm and index finger to accomplish this?

Why am I asking you this? As humans, we move our arms naturally and effortlessly to perform such tasks, but robotic arms do not have this intuitive ability. For a robot, specifying a hand (an end-effector) position requires providing the exact joint angles and orientation. This would be tedious if humans had to consciously think about the precise angles of our elbows or shoulders every time we moved. In robotics, one common method for achieving a desired end-effector position is called inverse kinematics.

In inverse kinematics, we are given a desired end-effector position and must determine the joint angles that achieve it—if such a configuration exists. For example, as in the nose-pointing scenario, there are many possible ways to arrange your arm to reach the same point. On the contrary, if you are asked to place your hand on the ceiling without assistance, it may be physically impossible. In mathematical terms, this means that an exact solution to the inverse kinematics problem may not exist if the target position is outside the robot’s reachable workspace.

General Formulation of Inverse Kinematics

A forward kinematics function maps from joint angles (\(\mathbf{q} \in \mathbb{R}^n\)) to gripper position (\(\mathbf{x} \in \mathbb{R}^3\)):

\[ \mathbf{x} = f(\mathbf{q}) \]

In inverse kinematics, we want to find \(\mathbf{q}^*\) such that it satisfies the following optimization problem:

\[ \mathbf{q}^* = \underset{\mathbf{q}}{\operatorname{argmin}}\, \lVert f(\mathbf{q}) - \mathbf{x}_{\text{target}} \rVert \]

The Jacobian of a robotic manipulator relates joint velocities (\(\dot{\mathbf{q}}\)) to end-effector velocities (\(\dot{\mathbf{x}}\)):

\[ \dot{\mathbf{x}} = \mathbf{J}(\mathbf{q})\, \dot{\mathbf{q}} \]

We can use the pseudo-inverse of the Jacobian to perform inverse kinematics:

\[ \dot{\mathbf{q}} = \mathbf{J}(\mathbf{q})^\dagger\, \dot{\mathbf{x}} \]

And then solve this equation using numerical and iterative methods.

\begin{algorithm} \caption{Iterative Inverse Kinematics Using Jacobian Pseudoinverse} \begin{algorithmic} \State Start with initial joint angles $\theta$ \Repeat \State Compute end-effector position $x = f(\theta)$ \State Compute error $\delta = x_{target} - x$ \State Compute Jacobian $J(\theta)$ \State Compute update $\Delta\theta = J^{\dagger} \delta$ \State Update angles $\theta \gets \theta + \alpha \Delta\theta$ \Until{$||\delta||$ < $\epsilon$} \end{algorithmic} \end{algorithm}

Future work

In this post, I only covered the base case of inverse kinematics. This can be extended to additional links and 3D space. Stay tuned for more content!