Skip to main content

Section 2.3 Inverse Kinematics and Wheel Velocity Commands

While forward kinematics calculates how the robot moves based on wheel speeds, inverse kinematics does the opposite: it takes a desired body motion velocity command \((v, \omega)\) and determines the required individual wheel surface velocities \((v_L, v_R)\text{.}\)
Given a target linear velocity \(v\) and angular velocity \(\omega\text{,}\) inverse kinematics produces the left wheel speed command \(v_L\) and the right wheel speed command \(v_R\) needed to achieve that motion.
This is the direction that actually matters for programming a robot’s autonomous behavior. A human, or an autonomous planning algorithm, thinks in terms of the robot’s overall motionβ€”"drive forward at 0.5 m/s while turning slightly left"β€”not in terms of individual motor speeds. But the motors themselves have no concept of "the robot"; each one only understands "spin at this many radians per second." Inverse kinematics is the translation layer that sits between the high-level intent and the low-level motor commands, and it is running, quietly, every single time a robot changes speed or direction.
Figure 2.3.1. Inverse kinematics converts a target linear and angular velocity into individual left and right wheel-speed commands.

Subsection 2.3.1 Inverse Kinematics Formula

Rearranging the forward kinematics equations yields:
\begin{equation*} v_R = v + \frac{\omega \cdot L}{2} \end{equation*}
\begin{equation*} v_L = v - \frac{\omega \cdot L}{2} \end{equation*}
If wheels have radius \(r\text{,}\) the required rotational motor speeds in radians per second \((\omega_L, \omega_R)\) are:
\begin{equation*} \omega_R = \frac{v_R}{r} = \frac{2v + \omega L}{2r} \end{equation*}
\begin{equation*} \omega_L = \frac{v_L}{r} = \frac{2v - \omega L}{2r} \end{equation*}
Notice this is exactly the forward kinematics equations solved backward: instead of starting from wheel speeds and finding \((v, \omega)\text{,}\) we start from the desired \((v, \omega)\) and add or subtract the same turning term \(\frac{\omega L}{2}\) to split it back into two wheel speeds. The final stepβ€”dividing by wheel radius \(r\)β€”exists because motors don’t control surface speed directly; they control how fast they spin, and a larger wheel covers more ground per rotation than a smaller one at the same spin rate.

Subsection 2.3.2 Real-World & VEX AIM Examples

Real-World Example (Autonomous Vehicle Steering): A self-driving car’s path planner decides on a high-level target: "follow this curve at 12 m/s with a turn rate of 0.3 rad/s." That plan means nothing to the vehicle’s actuators on its own. A lower-level controller performs an inverse-kinematics-style calculation to convert that single desired motion into the specific commands each wheel or steering actuator needs, the same fundamental problem solved here for a two-wheeled differential drive robot.
VEX AIM Robotics Example: During driver-controlled matches, a VEX AIM robot’s single-stick arcade drive code performs inverse kinematics roughly 50 times per second. The joystick’s forward/back axis is read as the desired linear velocity \(v\text{,}\) and its left/right axis is read as the desired angular velocity \(\omega\text{.}\) The controller code then applies these exact \(v_L\) and \(v_R\) formulas to compute how much power to send to the left and right drive motorsβ€”so every time a driver nudges the stick diagonally to "curve" the robot, they are triggering an inverse kinematics calculation without ever seeing the math.

Subsection 2.3.3 Section 2.3 Interactive Exercises

Subsubsection 2.3.3.1 Exercise 2.3.2: Parsons Problem β€” Inverse Kinematics Motor Command Pipeline

Reorder the code blocks below to assemble a function that converts target body velocities \((v, \omega)\) into wheel motor RPM values.

Checkpoint 2.3.2.

Arrange the blocks to form a complete function compute_wheel_rpm that converts target body velocities \((v, \omega)\) into left and right wheel motor RPM values.

Reading Questions 2.3.4 Reading Questions

Check your understanding

1. Exercise 2.3.1: Inverse Kinematics Calculation Check.

A robot with a track width \(L = 0.4\) m needs to execute a velocity command of linear speed \(v = 0.5\) m/s and angular speed \(\omega = 1.0\) rad/s. What are the required left and right wheel velocities \((v_L, v_R)\text{?}\)
  • \(v_L = 0.3\) m/s, \(v_R = 0.7\) m/s
  • Correct! \(v_L = 0.5 - \frac{1.0 \times 0.4}{2} = 0.3\) m/s and \(v_R = 0.5 + \frac{1.0 \times 0.4}{2} = 0.7\) m/s.
  • \(v_L = 0.5\) m/s, \(v_R = 0.5\) m/s
  • Incorrect. Equal wheel velocities produce zero turning rate (\(\omega = 0\)).
  • \(v_L = 0.7\) m/s, \(v_R = 0.3\) m/s
  • Incorrect. The left and right wheel speeds are inverted, causing the robot to turn in the wrong direction.
  • \(v_L = -0.2\) m/s, \(v_R = 0.8\) m/s
  • Incorrect. Check the equation \(v_L = v - \frac{\omega L}{2}\text{.}\)
You have attempted of activities on this page.