Impedance Control
Impednace is the relationship between motion and force. This was first introduced to me by Cheng when working on robot arms. There are 2 main types of controls:
- Cartesian Impedance control
- Torque Impedance control
https://en.wikipedia.org/wiki/Impedance_control https://www.diag.uniroma1.it/~deluca/rob2_en/15_ImpedanceControl.pdf
What is Impedance again??
In the context of robotics, impedance refers to the dynamic relationship between the motion of the robot (position, velocity, and acceleration) and the forces applied by or to the robot.
Impedance control is an approach to dynamic control relating force and position. It is often used in applications where a manipulator interacts with its environment and the force position relation is of concern.
Position control (task space):
How does the torque
\tauwork here?The torque is proportional to current, see BLDC Motor.
Impedance control (simple 1D form):
- = desired rotational inertia
- = desired damping
- = desired stiffness
Let , we define error dynamics:
Desired acceleration form:
Joint-space impedance example:
Control loop
// read state
q = read_joint_position();
qd = read_joint_velocity();
// desired
q_des = ...; // setpoint or trajectory
qd_des = 0.0; // usually 0 for a fixed target
// PD gains
Kp = ...; // "stiffness"
Kd = ...; // "damping"
// torque command
tau_cmd = Kp * (q_des - q) + Kd * (qd_des - qd);
// send to motor driver (motor turns this into current)
send_torque_to_motor(tau_cmd);
Impedance control
// read state
q = read_joint_position();
qd = read_joint_velocity();
// desired
q_des = ...; // desired angle
qd_des = 0.0;
// desired impedance parameters
K_stiff = ...; // Nm/rad, how hard it feels (spring)
B_damp = ...; // Nms/rad, how sticky it feels (damper)
// torque command (joint-space impedance)
tau_cmd = K_stiff * (q_des - q) + B_damp * (qd_des - qd);
// send to motor
send_torque_to_motor(tau_cmd);