Move the Hand, Not Every Joint: Why Inverse Kinematics Makes Robots Easier to Control

Wendy Labs - Wendy Labs TeamAugust 08, 2026
With IK you move one target and the solver poses every joint for you. Click the cyan target to stop its glide, then drag the arrows to move it anywhere. Drag the background to orbit.

Inverse kinematics turns a desired gripper pose into the joint angles needed to reach it, separating the task a robot should perform from the motor coordinates used to perform it.

Inverse kinematics solves the translation problem between task space and joint space.

A robot arm is generally a chain of motors where software talks to it in joint angles. Because angles are the only thing the motors can actually do, every task you care about is expressed the other way around, as a position in space: pick up the cup at this spot on the table, hold the camera here, place the screw on that hole. Somewhere between the task and the motors, "put the gripper at (x, y, z)" has to become "rotate joint 1 to 42 degrees, joint 2 to negative 13, joint 3 to 77". Inverse kinematics is that translation step.

Those two vocabularies have names, and they come up constantly in robotics. Joint space is the robot's internal coordinate system, with one number per motor. A pose for the four-joint demo arm below is just a list of angles like (42°, -13°, 77°, 5°), and the arm's controller only ever consumes lists like that. Task space (often called Cartesian space) is the coordinate system the work is described in: positions and orientations out in the world, measured in meters and directions, the same x, y, z you would use to say where the cup sits on the table. You, your sensors, and your task planner all think in task space. The motors only understand joint space. Inverse kinematics is the bridge from the first to the second.

The name makes sense once you see its mirror image. Forward kinematics (FK) goes from angles to position. Given every joint angle and the length of every link, you can chain the transforms together and compute exactly where the gripper ends up. That direction is easy, deterministic, and has one answer. Writing the pose of the end of the arm (a pose is a position plus an orientation, and the word means that everywhere in robotics) as a function of the joint angles:

x=f(θ)\mathbf{x} = f(\boldsymbol{\theta})

Inverse kinematics runs the arrow backwards. You know the target pose x\mathbf{x} and you want joint angles that produce it:

θ=f1(x)\boldsymbol{\theta} = f^{-1}(\mathbf{x})

That innocent little superscript hides all the trouble. The function ff is a stack of trigonometry, so inverting it is a nonlinear problem. It can have many solutions (reach the same cup with your elbow up or your elbow down), exactly one, or none at all when the target is out of reach. For most arms beyond a few joints there is no clean formula for f1f^{-1}, which is why the field has spent forty years inventing solvers for it.

Feel the problem: no IK

Without IK, an operator controls the base, shoulder, elbow, and wrist directly, much like the jog controls on an industrial teach pendant.

Without IK you steer every joint yourself. Drag the colored rings to rotate the base, shoulder, elbow, and wrist one at a time, and try to touch the red Target cube. Drag anywhere else to orbit.

Every joint moves the links after it, turning a Cartesian target into manual optimization. The operator becomes the solver, which scales poorly beyond a small arm.

Now with IK

With IK, the target is specified in task space and the solver recomputes the joint angles every frame. An unreachable target produces the closest pose allowed by the arm's reach and joint limits.

With IK you move one target and the solver poses every joint for you. Click the cyan target to stop its glide, then drag the arrows to move it anywhere. Drag the background to orbit.

The goal stays in task space while the solver handles joint space.

The solver behind this demo is cyclic coordinate descent (CCD), one of the simplest IK algorithms that actually works. It loops over the joints from the wrist back to the base, and rotates each one, on its own axis, by whatever angle best swings the gripper toward the target. One sweep helps a little; repeated sweeps converge. This demo runs 18 sweeps per frame with a cap on how far any joint can move per step, plus per-joint angle limits so the arm can't fold through itself. That is the whole algorithm. It's the same iterate-and-improve loop you were doing by hand in the first scene, executed a few thousand times faster and without complaints.

Why IK matters even with AI

IK sits in the middle of almost everything a robot does with its body, usually invisibly:

  • Manipulation. A grasp planner outputs "gripper here, oriented like this". IK turns each candidate grasp into joint angles, and grasps with no IK solution get discarded before anything moves.
  • Motion planning. Planners like the ones in MoveIt plan through joint space, but their start and goal states usually arrive as Cartesian poses. IK converts them. Path constraints like "keep the cup upright while carrying it" get enforced by solving IK repeatedly along the path.
  • Teleoperation and data collection. When an operator steers a robot with a controller or their own tracked hands, their input is a stream of target poses. IK maps that stream onto the robot's joints in real time. Every teleop demonstration dataset behind today's manipulation models was collected through an IK layer.
  • Legged robots. A quadruped or humanoid places its feet at planned positions on the ground. Each footstep is an IK problem for that leg, solved every control cycle while the body moves.
  • Animation and simulation. Game engines and animation tools use IK to pin feet to terrain and hands to objects. The math is identical, which is why graphics papers and robotics papers cite each other constantly.

There's also a subtler reason IK earns its keep. Joint space and task space disagree about distance. Two arm poses can be millimeters apart at the gripper and far apart in joint angles, or the reverse. Humans, tasks, and sensors all live in task space. Motors live in joint space. Any system where those two meet needs the translation, and it needs it fast enough to run inside a control loop.

The technique landscape

Solvers fall into a few families, and each one trades generality against speed against robustness.

Closed-form (analytic) solutions

For specific arm geometries you can invert ff symbolically and get exact answers in microseconds, with every solution enumerated. Most six-axis industrial arms are deliberately designed with a spherical wrist (three axes intersecting at a point) so that position and orientation decouple and a closed-form solution exists. The best known tool here is IKFast from Rosen Diankov's OpenRAVE work, which generates analytic solver code for a given robot automatically. When your robot admits one, an analytic solver is the fastest and most reliable option, full stop. The limitation is rigidity: add a joint, change the geometry, or ask for a redundant arm (one with more joints than the task strictly needs), and the closed form stops existing.

Jacobian methods

The workhorse family. The Jacobian matrix J(θ)J(\boldsymbol{\theta}) tells you how small joint velocities map to small gripper velocities. Invert that relationship locally and you can walk the arm toward a target step by step. Three classic variants, laid out cleanly in Buss's tutorial survey:

  • Jacobian transpose uses JJ^{\top} instead of a true inverse. Cheap and stable, but takes crude steps.
  • Pseudoinverse uses the Moore-Penrose inverse J+J^{+} for locally optimal steps, and the leftover freedom of a redundant arm can be spent on secondary goals like staying away from joint limits. Its weakness is violent behavior near singularities, the configurations where the arm loses a direction of motion (think of a fully straightened elbow).
  • Damped least squares (DLS), introduced independently by Wampler and Nakamura and Hanafusa in 1986, adds a damping term that sacrifices a little accuracy for stability near singularities. This is the default serious choice in the family.

Jacobian solvers are general (any chain, any joint count) and integrate naturally with velocity control, which is why differential IK (solving for a small velocity step each control tick instead of a full pose) runs inside many real-time controllers today.

Simple geometric solvers: CCD and FABRIK

These skip the Jacobian entirely in favor of intuitive geometric rules applied over and over until the pose settles. CCD, formalized for manipulators by Wang and Chen in 1991, is what the second demo above runs: rotate one joint at a time to best align the end effector (the robotics term for the gripper, hand, or tool at the end of the chain) with the target, repeat. FABRIK, published by Aristidou and Lasenby in 2011, works on joint positions instead of angles. It slides points along the chain in a forward pass and a backward pass until they settle, which produces smoother poses than CCD and converges quickly without any trigonometry in the inner loop. Both are simple to implement, fast, and tolerant of joint limits bolted on as clamps. They dominate games and animation, and FABRIK has crossed into robotics for many-jointed arms and continuum robots (snake-like designs that bend along their whole body instead of at distinct joints). The 2018 survey by Aristidou, Lasenby, Chrysanthou, and Shamir covers this whole family and is the best single entry point to the literature.

Optimization-based solvers

Treat IK as a constrained optimization problem: minimize distance to the target pose subject to joint limits, collision avoidance, or whatever else you can express as a cost or constraint. TRAC-IK, from Beeson and Ames in 2015, is the well-known open-source example. It runs an improved Newton-style solver and a sequential quadratic programming solver (a standard numerical optimization method) concurrently and takes whichever finishes first. That fixed a chronic weakness of the older KDL solver on humanoid arms, which often reported no solution even when one existed. Modern humanoid and legged-robot stacks push this further, phrasing whole-body IK as one big optimization problem (a quadratic program) that juggles balance, contact, and reach targets at once, solved at hundreds or thousands of hertz.

Learning-based solvers

Neural networks can learn the inverse map directly, and recent work like IKFlow uses normalizing flows (a type of neural network that can be run backwards as easily as forwards) to generate the full diverse set of solutions for redundant arms in one shot rather than one solution at a time. Learned IK also shows up implicitly: end-to-end manipulation policies that output joint actions from camera images have effectively absorbed an IK layer into the network. Explicit learned solvers remain more of a research frontier than a production default, but the direction is active.

What robots actually use today

In practice the choices are boring and sensible. Industrial six-axis arms use analytic solvers, often IKFast-generated, because the geometry allows it and the determinism is worth it. ROS and MoveIt users overwhelmingly configure TRAC-IK or the stock KDL solver for general arms. Real-time control loops and teleop stacks run damped-least-squares differential IK. Humanoids and quadrupeds run optimization-based whole-body solvers. Games and character animation run FABRIK and CCD. Pick the simplest thing that fits your robot's shape and your latency budget, and it's usually one of these five answers.

Where this fits for edge robotics

Everything in the two demos above, from the CCD loop to the joint-limit clamps, is a few hundred lines of TypeScript running at 60 frames per second in your browser tab. The same math scales down comfortably to a control loop on a Jetson Orin Nano or a Raspberry Pi sitting inside an arm. That's the layer we care about at Wendy: the solver is standard, published math, and the hard part is shipping and updating it on a fleet of devices like any other piece of software. On WendyOS, an IK-driven controller is just an app you deploy with wendy run, next to your camera pipeline and your policy model.

If you got the arm to touch the target in the first scene, you have manually performed cyclic coordinate descent, and the second scene will forever feel like cheating. That feeling is the last forty years of robotics working as intended.

Sources

Trending

Related post

Expand your knowledge with these hand-picked posts.

SensorLink: Pair a Device. Borrow Its Senses.
September 12, 2026

SensorLink: Pair a Device. Borrow Its Senses.

Give your Wendy host the eyes and ears of another device. SensorLink brings cameras, microphones, and a shared model for time-series sensors into a familiar pairing workflow.

Wendy Labs - Wendy Labs Team

Free NVIDIA DGX Spark 3D model
September 06, 2026

Free NVIDIA DGX Spark 3D model

Download our free NVIDIA DGX Spark 3D model as a GLB or an editable Blender scene with studio lighting, materials, and cameras. No signup required.

Wendy Labs - Wendy Labs Team

background home assistant robot

Start with one device. Close the loop around it.

Use WendyOS on your hardware or add Wendy Agent to an existing Linux or Apple Silicon Mac. Connect sensors, run your code, and carry what you learn into the next release.