Joint Impedance Control
关节阻抗控制AdvancedMaking every joint of a robot behave like a spring and damper, yielding compliantly when pushed instead of resisting rigidly.
Impedance control was systematically developed by MIT's Neville Hogan in his 1984–1985 papers, with the goal not being to rigidly hold a position or force, but to specify how ‘soft’ the robot should feel under external force. Joint impedance control sets this spring-damper behavior at each individual joint, with a typical control law τ = K(q_d − q) + D(q̇_d − q̇) + gravity and Coriolis compensation, where τ is joint torque, q and q_d the actual and desired joint angle, K the stiffness, and D the damping. It looks like PD control in form, but requires the joint to output torque directly and compensate for dynamics, and K is deliberately set low so the robot gets pushed away by contact with a person or object rather than fighting back. The closely related Cartesian impedance control instead sets the spring on the end-effector's x, y, z, and orientation, which more directly specifies which direction the hand should feel soft in; admittance control runs the opposite direction — measuring external force first, then computing how to move — and suits inherently stiff, position-controlled arms.
ExampleFranka arms default to joint impedance mode built in; libfranka's setJointImpedance sets each joint's stiffness, and franka_ros's example controller computes each joint's command torque as ‘Coriolis compensation + k·(q_d − q) + d·(q̇_d − q̇),’ letting the arm trace a circle while staying compliant.
- Also called
- Joint-Space Impedance Control
- Related
- Impedance Control · Cartesian Impedance Control · Admittance Control · Torque Control · Proportional-Derivative Control · Gravity Compensation
- Sources
- Impedance control - Wikipedia
libfranka robot.h(setJointImpedance / ControllerMode::kJointImpedance)
franka_ros joint_impedance_example_controller.cpp