Why pure position control breaks on contact
Most robot arms are taught one thing very well: go to a commanded position and hold it stiffly there. A good PID controller watching the joint encoders will fight any deviation hard — push the arm and it pushes back to where it was told to be. In free air, that stiffness is exactly what you want: crisp, accurate motion. The trouble starts the instant the robot touches something solid.
Imagine you command the gripper to a point one millimeter *inside* a steel table. The controller sees a one-millimeter error it can never close, so it commands more and more torque trying to reach a place it can never reach. Because steel barely deforms, even that tiny commanded overshoot turns into an enormous contact force — the arm strains, the table dents, or a safety fault trips. The robot is not misbehaving; it is doing exactly what position control asks, with no notion that a force is building up.
The fix is to stop insisting on an exact position and instead make the robot's contact behavior programmable. We want to dial in how soft or stiff the arm feels when something pushes on it — sometimes rigid like a clamp, sometimes yielding like a spring you can press by hand. That programmable softness is the heart of compliant control.
Impedance and admittance: two mirror-image ideas
The cleanest way to make a robot feel "springy" is impedance control. Instead of commanding a position, you tell the arm to *behave like a tunable spring and damper* attached to a target point. You pick a stiffness (how hard it resists being displaced), a damping (how much it resists velocity), and optionally a virtual mass. The controller then measures how far the arm has been pushed from its target and commands exactly the spring-and-damper force that displacement implies. Push it 5 mm with a stiffness of 200 N/m and it pushes back with 1 N — gently and predictably.
impedance: F_cmd = K (x_target - x) + D (v_target - v)
in : measured position/velocity out: a force/torque to apply
admittance: x_target = x_ref + (1/K) * F_measured (then a stiff position loop tracks x_target)
in : measured contact force out: a motion to followAdmittance control is the exact mirror image. Here you *measure* the contact force with a force/torque sensor and turn it into a *motion*: feel a push, glide away from it as a virtual spring would. The robot still ends up behaving like that same spring-damper, but the plumbing runs the other way — force in, position out, with an ordinary stiff position loop doing the actual tracking.
Why two flavors of the same spring? Because real hardware differs. Impedance control shines on arms that are backdrivable — you can push the joints and the motors give way easily — often built with low-ratio gears, a series-elastic actuator (a deliberate spring between motor and load), or harmonic drives with joint-level force sensing. Such robots can command honest forces. Admittance control suits stiff, high-gear-ratio industrial arms that are *not* easy to push: they cannot fake a soft force, so instead they read a wrist force sensor and move in response. The choice often comes down to one property: backdrivability.
Force control and the hybrid trick
Sometimes you do not want a spring at all — you want to hold a *specific* push. A deburring tool should press the workpiece with, say, exactly 10 N no matter how the surface waves up and down. That is pure force control: the set-point is a force, the feedback comes from a force sensor, and the controller moves the arm in or out until the measured force matches the target. Position becomes a free variable; force is the thing you guard.
But most real tasks mix both needs at once. Wiping a window, you must follow the glass plane precisely (a position job) *while* pressing into it with a steady force (a force job) — in directions that are perpendicular to each other. Hybrid position/force control handles this by splitting the workspace into directions: be stiff and position-controlled along the axes you must trace, and soft and force-controlled along the axis where you make contact. The two never fight, because each direction is governed by only one of them.
- Decide the task frame — for a surface, that is two directions along the surface and one perpendicular to it.
- Assign each direction a role: position-controlled where the path matters, force-controlled where contact happens.
- Run a position loop on the first set of axes and a force loop on the second, using a selection matrix so each axis listens to only one loop.
- Combine the two commands in the task frame and map them back to joint torques to drive the arm.
A working mental model: insertion, polishing, hand-guiding
Picture the classic peg-in-hole. Demanding that the peg slot into a hole located to the exact micron is brittle — the smallest misalignment jams it. With a soft impedance in the sideways directions, the peg can *give* a little, slide along the chamfer, and self-center as it goes down. Engineers even build a mechanical version of this forgiveness called a remote center of compliance. Insertion is the textbook case for compliant, contact-rich manipulation: stay stiff downward to push the peg home, stay soft sideways to absorb error.
Polishing and grinding are force-control jobs. The exact path along the curved part matters less than the *pressure* of the tool against it; you want a constant normal force so the finish is even, while the surface itself decides the in/out position. Hand-guiding a collaborative robot is the friendliest example of all: a worker grabs the arm and walks it through a motion, and the robot, running impedance or admittance control, simply flows with the human's push instead of resisting it — the same compliance that keeps it safe to bump into.
So how do you choose a scheme? Lead with two questions about your hardware. First, can the arm be pushed? A backdrivable arm with joint torque sensing leans toward impedance control and can run fast, soft, and reactive. A stiff, geared arm leans toward admittance control with a wrist force/torque sensor. Second, what does the task guard — a path or a force? Trace a shape: position control. Hold a pressure: force control. Touch a person or an uncertain surface: a soft impedance. Most jobs want a deliberate mixture, which is exactly what hybrid control was invented to express.