Hello ROS community!
Over the past few weeks, I have been working on the adaptive_admittance_controller repository, an alternative admittance controller for ROS2 Jazzy. It is designed to work as a chainable controller to be used right after your base controller (e.g., joint_trajectory_controller). It includes topic-based, real-time parameter-modification mechanisms to facilitate frequent updates of compliant behaviours in a manipulation application, including gradual parameter modification to avoid abrupt robot movements, as well as force/torque sensor bias estimation mechanisms.
Thanks for reading, below there is some additional information about the controller:
Motivation
The use of a compliant behaviour in robotic manipulation applications enhances the robot’s capabilities, specially in operations involving physical contact (e.g., assembly tasks or advanced teleoperation). These kinds of operations require the reconfiguration of the admittance control parameters regularly to adjust the compliant behaviour to the different phases of the task. Nevertheless, a smooth transition between different admittance parameter profiles is necessary to ensure the system’s estability, especially when changing the stiffness values drastically. The addition of a ramp that modifies the admittance control parameters would allow shifting between different compliant profiles safely.
Additionally, the force/torque sensors usually suffer from sensor bias and drift, which affects directly the performance of the admittance controllers. The capability to estimate this sensor bias during execution time and mitigate its effect would enhance the quality of the compliant behaviour.
Features
- Chainable ROS2 controller designed to be placed as the last controller (e.g., after a joint trajectory controller).
- Accepts admittance parameters (stiffness, damping, mass, wrench command, active axes, and compliance frame) as well as tool parameters (mass and center-of-gravity) via topics.
- Includes a low-pass filter to smooth the wrench values received from the force/torque sensor.
- During the admittance and tool paremeter modification, the recalibration of the force/torque sensor bias can be triggered.
- The admittance control law calculates a twist value, which is internally computed to generate joint positions using KDL to generate the Jacobian matrix and Eigen to calculate the pseudo-inverse using SVD.
- Allows an open-loop mode in which the previously commanded joint positions are used instead of the joint positions from the state interfaces, avoiding the injection of hardware feedback latency and transport delays into the command generation loop.
- The controller enables the smoothing of admittance parameter modifications by adding a ramp to modify the parameters gradually (e.g., reducing the stiffness from 5000 to 500 over 1 second). These ramps are also applied when the admittance controller axes are activated/deactivated.
- The controller includes the option to enable a feedback topic of the admittance parameters, and wrench and twist values are published to facilitate the controller introspection during the deployment.
Testing
The controller has been tested on a UR16e robot, using the robot’s own force/torque sensor data. These tests included the use of the adaptive admittance controller chained with the standard joint trajectory controller and a custom twist controller intended for teleoperation, which have been switched in real time to ensure the safe transition between both controller configurations.
Chain: Joint Trajectory Controller & Adaptive admittance controller
Execution of trajectories with compliant behaviour.

Chain: Twist controller & Adaptive admittance controller
Teleoperation with a 6D SpaceMouse joystick with compliant behaviour.

Transition between different admittance control profiles
The ramp-based admittance control parameter modification: All axes deactivated > Soft Z axis > Soft XY axis > All axes deactivated

Repo
The README includes information about the configuration of the controller.
Feedback
I would appreciate feedback on:
- API design
- Additional features