RobotForge
Published·~14 min

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.

by RobotForge
#control#impedance#contact

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
HardwareTorque control (BLDC, direct-drive)Position control + F/T sensor
Best atSoft contacts, light forces, dynamic interactionHeavy contacts, precise force tracking
Stability with stiff contactLimited by max controllable stiffnessLimited by sensor + position-loop bandwidth
Stability in free spaceLimited by min controllable dampingExcellent
Common inFranka, KUKA LBR, MIT mini-cheetah, dronesUR 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.