Impedance and admittance control for contact tasks
The moment a robot touches the world, position control breaks. Impedance control turns the arm into a programmable spring; admittance control inverts the relationship. Here's the difference, the math, and when to pick which.
Position-control a robot into a wall and it either crashes through or stalls and burns out the motor. Real-world contact tasks — peg-in-hole, polishing, opening doors — need a controller that says "if there's resistance, give a little." That's impedance and admittance control.
The mental model: spring + damper
Imagine the end-effector as a virtual spring-damper system attached to the desired pose. Push it; it resists with a force proportional to displacement (spring) and velocity (damper). Don't push; it stays at the goal.
That's the desired contact force at the end-effector. The control system makes the robot exert this force on the environment.
Choose small → the arm is soft (gives way easily, safe near humans). Choose large → stiff (good for precise positioning, but careful near contact). Adjust at runtime to switch between modes.
Two implementation paths
Impedance control
Direct route: command joint torques that produce the desired end-effector force.
τ = J^T · F_desired
Where J is the Jacobian. The robot's torque controller realizes the spring-damper behavior through the dynamics.
Requires: torque-controlled hardware. Direct-drive motors, BLDCs with FOC, or a sufficiently fast position-controlled servo with current-mode override.
Admittance control
Inverse route: measure the contact force; compute a corresponding velocity that makes the system look like a spring-damper; command that velocity.
The velocity is sent to a standard position controller.
Requires: a force/torque sensor at the end-effector, plus a position-controlled robot. Easier on industrial arms.
Impedance vs admittance: the practical difference
| Impedance | Admittance | |
|---|---|---|
| Hardware | Torque control (BLDC, direct-drive) | Position control + F/T sensor |
| Best at | Soft contacts, light forces, dynamic interaction | Heavy contacts, precise force tracking |
| Stability with stiff contact | Limited by max controllable stiffness | Limited by sensor + position-loop bandwidth |
| Stability in free space | Limited by min controllable damping | Excellent |
| Common in | Franka, KUKA LBR, MIT mini-cheetah, drones | UR arms with F/T, industrial assembly |
Rule of thumb: if you want softness in dynamic interaction (collaborative robots, legged contact), impedance. If you want precise force tracking on a stiff industrial arm, admittance.
Cartesian impedance — the practical formulation
Most arms run Cartesian impedance: spring-damper in task space, mapped to joints via the Jacobian. The full law:
The term cancels gravity, Coriolis, etc. via feedback linearization (covered in the Feedback Linearization lesson). The result: a programmable virtual spring at the end-effector, with whatever stiffness you set at runtime.
Tuning Kp and Kd
Two knobs per Cartesian axis (3 translational + 3 rotational = 6 axes total). Conventions:
- Translational stiffness: 100–2000 N/m. Lower = softer.
- Rotational stiffness: 5–50 Nm/rad.
- Damping: usually critically damped, .
For peg-in-hole: low along the insertion axis (so the peg slides), high orthogonal (so it stays aligned). For polishing: high normal-direction to maintain contact pressure; tangential motion is position-controlled.
The contact instability problem
Push a stiff arm into a stiff wall and the closed-loop can oscillate or buzz. Reasons:
- Discrete-time control: between samples, the arm is in pure position mode, hits the wall, bounces, etc.
- Sensor noise on the force measurement amplified by high gains.
- Unmodeled link flexibility.
Mitigations:
- Higher control rates (1 kHz minimum).
- Lower stiffness near contact.
- Compliant mechanical surfaces (rubber pads, springs).
- Variable impedance: stiff away from contact, soft near.
When neither works
Some tasks need explicit force control along certain axes (push with exactly 5 N) and position control along others (move 100 mm/s sideways). That's hybrid motion/force control, the next lesson — picks coordinates explicitly per axis.
Production examples
- Franka Emika Panda: native Cartesian-impedance API. Set stiffness in 6 DOF; arm becomes a programmable spring.
- UR e-series with FT300: admittance — F/T sensor at the wrist, the standard pattern in industrial assembly.
- Boston Dynamics Spot: impedance per leg. Stiff in stance, compliant in swing — different gains across the gait.
- Surgical robots (da Vinci): high-fidelity impedance for haptic feedback to the surgeon's hand.
Exercise
In MuJoCo, simulate a 1-DOF arm (single joint) pushing against a fixed wall. Implement position control: command the arm to move past the wall. Watch torque saturate. Implement impedance with : same goal. Watch the arm settle gently against the wall, applying constant force proportional to penetration depth. Drop to 10 N/m: the arm barely touches the wall before stopping. You've just made a programmable spring.
Next
Force control proper — when "exert exactly 5 N here" is the spec, not "be soft."
Comments
Sign in to post a comment.