Cartesian Impedance Control: C++ implementation with ros_control bindings

We are happy to announce that our Cartesian impedance controller implementation for torque-controlled manipulators is available on Github.

Cartesian impedance control is a type of motion control strategy for robots that improves safety in partially unknown environments by achieving a compliant behavior of the robot with respect to its external forces. This compliant robot behavior has the added benefit of allowing physical human guidance of the robot.

The controller is developed using the seven degree-of-freedom (DoF) robot arm LBR iiwa by KUKA AG and has also been tested with the Franka Emika Robot (Panda) both in reality and simulation.

The implementation consists of a

  1. base library that has few dependencies and can e.g. be directly integrated into software such as the DART simulator and a
  2. ros_control integration on top of it.

We have already quickly pitched this repo at the lightning talk session at ROSCon: Cartesian Impedance Controller ROSCon 2022 Lightning Talk - YouTube (Full session)
A JOSS paper is on the way and the preprint is here.


  • Configurable stiffness values along all Cartesian dimensions at runtime
  • Configurable damping factors along all Cartesian dimensions at runtime
  • Change reference pose at runtime
  • Apply Cartesian forces and torques at runtime
  • Optional filtering of stiffnesses, pose and wrenches for smoother operation
  • Handling of joint trajectories with nullspace configurations, e.g. from MoveIt
  • Jerk limitation
  • Separate base library that can be integrated in non-ROS environments
  • Interface to ROS messages and dynamic_reconfigure for easy runtime configuration
  • Robot agnostic: Works with any torque-controlled manipulator

Important links:

Let us know if there are any questions, comments and suggestions. We are also happy to receive pull requests.


This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.