Predict before you read

Before you read — when a VLA policy outputs a target end-effector pose, which component converts that pose to motor torques?

Think about what is running at 1 kHz vs what is running at 5 Hz.

From Tokens to Embodied Minds  ·  Chapter 25 of 36
Chapter 25

Classical robotics in one chapter

Forward/inverse kinematics, Jacobians, PD, MPC

6
DOF is the minimum arm complexity where IK becomes non-unique
1kHz
is the inner-loop rate a PD controller must sustain — the VLA runs far slower
DH
transform matrices chain joint angles into end-effector pose — the FK backbone
Maturity ladder

When a SmolVLA or GR00T policy fails to pick up a cup, most people blame the neural network. The real culprit is usually 15 lines deeper: a misconfigured PD gain, an IK solver that hit a singularity, or a workspace bound that fired silently. Every learned policy in the humanoid stack — from RT-2 to GR00T N1.5 — runs on top of classical kinematics and classical controllers. You cannot skip this chapter and meaningfully debug the capstone. The substrate is small: forward kinematics (multiply DH transforms, read off end-effector pose), inverse kinematics (invert that map, numerically, accepting non-uniqueness), the Jacobian (velocity-level linkage between joint space and task space), dynamics (mass matrix, Coriolis, gravity, Lagrangian or Newton-Euler), PD and impedance control, and Model Predictive Control for whole-body motions. Lynch and Park's Modern Robotics (Cambridge University Press, 2017) covers all of this with free lectures and full text online — it is the cleanest single reference.

Forward and inverse kinematics

Forward kinematics (FK) is multiplication: given a vector of joint angles q, multiply the Denavit-Hartenberg (DH) homogeneous transform matrices for each joint in sequence and read off the end-effector pose as a 4x4 SE(3) matrix. For a 6-DOF arm this is six matrix multiplications — fast, deterministic, always unique. The DH convention parameterizes each joint by four numbers (link length, link twist, link offset, joint angle); the product chain is the FK map.

Inverse kinematics (IK) inverts that map: given a target end-effector pose, find the joint angles. For a 6-DOF arm the solution is generically non-unique (multiple elbow-up/elbow-down configurations reach the same pose) and may not exist (targets outside the workspace). The two standard numerical solvers are Jacobian-transpose (gradient-descent flavor, cheap, can oscillate near singularities) and Levenberg-Marquardt (damped least-squares, more robust near singularities, used in most production IK libraries). Analytic solutions exist for specific wrist configurations (e.g., spherical wrists) and are always preferred when available.

The Jacobian and velocity control

The Jacobian J(q) maps joint velocities to end-effector velocities: dx/dt = J(q) * dq/dt. It is the linchpin of velocity control — if you want the end-effector to move at 0.1 m/s in the x direction, invert J(q) (or use the pseudoinverse) to get the required joint velocities. Singularities occur when J loses rank — the arm is in a configuration where one or more task-space directions become uncontrollable. Detection (via the smallest singular value of J) and damping (via damped pseudoinverse) are standard engineering practice.

PD control is the inner loop: tau = Kp * (q_desired - q_actual) + Kd * (dq_desired - dq_actual). Impedance control extends this to model the arm as a mass-spring-damper in task space: it allows compliant contact with surfaces, which is mandatory for any manipulation task involving contact forces. A robot that opens a drawer with a pure position controller will break either the drawer or its own joints — impedance control is what makes physical interaction safe.

Dynamics and MPC

Robot dynamics add inertia, Coriolis, and gravity to the control picture: tau = M(q) * ddq + C(q, dq) * dq + g(q), where M is the mass matrix, C is the Coriolis/centrifugal matrix, and g is the gravity vector. The mass matrix couples joints — moving one joint imparts forces on all others. Ignoring dynamics is fine at low speeds; at the joint velocities humanoids require for fluid motion, it is a source of oscillation and instability.

Model Predictive Control (MPC) wraps a dynamics model in an optimization loop: at each timestep, solve a short-horizon trajectory optimization problem, execute the first action, re-plan. Whole-body MPC is computationally expensive — humanoid teams typically run it at 50–200 Hz with a simplified linear dynamics model (centroidal MPC) for balance, and a separate joint-level impedance controller for manipulation. ROS 2 is the middleware substrate that connects all of these components.

Why the capstone cannot skip this

The JHU humanoid capstone runs SmolVLA or GR00T N1.5 at the policy layer. Those policies output target joint positions or end-effector poses at 5–30 Hz. Below that, a trajectory interpolator, an IK solver, and a 1 kHz PD/impedance controller execute the motion. When the policy fails — wrong object grasp, dropped item, collision — the diagnostic chain starts here: was the target pose reachable? Did the IK solver converge? Did the impedance controller saturate? Without this chapter, every failure looks like a neural network bug.

Berkeley CS 294-277 Robots That Learn (Jitendra Malik, Spring 2026) builds on this substrate from the first lecture. Lynch and Park's Modern Robotics is the prerequisite text. Complete the build exercise — drive a 6-DOF arm in MuJoCo from joint-space to a target pose using Jacobian-transpose IK, add impedance control — before touching a VLA.

On skipping this chapter

Every researcher who skipped classical robotics eventually re-learned it via a hardware debugging session at 2am. The Jacobian singularity that stalls an IK solver is not a neural network failure — but you will not know that without this.

Classical Robotics Control StackJoint angles qDH transformsForward KinematicsT_0n = T_01·T_12···T_nEnd-Effector PoseSE(3) matrixIK SolverJacobian-transpose / LMPD / Impedance1 kHz torque loopJacobian J(q)dx/dt = J·dq/dtVLA policy (5–30 Hz) → target pose → IK → q_desired → PD → tau (1 kHz)VLA Policy (SmolVLA / GR00T)
Figure 25.1The classical robotics control stack. FK converts joint angles to end-effector pose via chained DH transforms. IK inverts that map numerically (Jacobian-transpose or Levenberg-Marquardt). A PD/impedance controller closes the torque loop at 1 kHz. A VLA policy sits above — issuing target poses at 5–30 Hz.
Retrieve before you continue

Three questions on what you just read

Q1 Factual What four parameters define each joint in the Denavit-Hartenberg convention?
Q2 Conceptual Why is IK non-unique for a 6-DOF arm and how do numerical solvers handle it?
Q3 Synthetic When a SmolVLA policy outputs a target pose and the robot fails to reach it, what is the first classical-control component to check?