Calibrate arms with Series Elastic Actuators

🏁 Goal of this guide

By the end of this guide, you will know how to calibrate the Tiago Pro arms to achieve greater torque estimation accuracy, thus increasing the performance of torque-dependant controllers.

Tiago Pro arms are powered by Series Elastic Actuators, a type of actuator that includes an elastic element (a spring) in series with the mechanical energy source (a motor). They enable precise control of force output, which is crucial for the tasks Tiago Pro is designed for, like delicate handling of objects or interaction with humans.

Inside these actuators, we can find two different encoders, that we will call “Motor encoder”, which measures the position of the mechanical unit; and the “Joint Encoder”, which measures the position of the output element, where the arm is attached. Knowing the difference between their positions, we can calculate the deflection of the spring connecting them. With this information, the torque the actuator is experiencing at any given moment can be estimated (as we know the mechanical properties of the spring).

However, for this estimation to be accurate, the fingerprint of the actuator must be calculated. This fingerprint represents the difference between the encoders (and thus the spring deflection) in zero torque conditions. From this baseline, we know that any extra encoder displacement will be due to an external torque, which we are interested in for our application.

We have prepared an online fingerprint estimation script, that can be run directly on the robot and automatically checks for the joints that need to be calibrated.

Automatic calibration of the whole arm

The standard method for calibrating the SEA is through the Complete Arm Calibration Script. This script automatically checks the torque estimation offset, using the torque that the gravity is generating as a reference. If it detects an offset above the threshold, it will trigger the calibration of that specific joint. This threshold is 1Nm, and it’s the maximum error that the controllers depending on the torque estimation can handle.

Important

The calibration script will move the arms of the robot. Please ensure there is enough space around the robot for safe operation.

The script comes installed by default in all Tiago Pros. In case you don’t have, please update or install manually:

sudo apt install pal-alum-sea-calibration

Running the script is straightforward:

ros2 run sea_calibration complete_arm_calibration --side left/right/head

The script only takes one argument: the side of the arm to be calibrated.

After starting it, you will first see some information regarding the joints that need to be calibrated, associated with their offsets. It will look something like:

[INFO] [1752052148.137898398] [sea_arm_calibration]: SEA Calibration status:
[INFO] [1752052148.138288248] [sea_arm_calibration]: - Joint arm_left_1_joint offset: 0.864178141574725 -> OK
[INFO] [1752052148.138593169] [sea_arm_calibration]: - Joint arm_left_2_joint offset: 4.303363510874778 -> Calibration needed
[INFO] [1752052148.138892125] [sea_arm_calibration]: - Joint arm_left_3_joint offset: 0.5450954855181681 -> OK
[INFO] [1752052148.139182346] [sea_arm_calibration]: - Joint arm_left_4_joint offset: 0.006764587809676925 -> OK
[INFO] [1752052148.139471242] [sea_arm_calibration]: - Joint arm_left_5_joint offset: 1.3428523365070164 -> Calibration needed
[INFO] [1752052148.139756599] [sea_arm_calibration]: - Joint arm_left_6_joint offset: 0.7334157238370739 -> OK
[INFO] [1752052148.140047489] [sea_arm_calibration]: - Joint arm_left_7_joint offset: 0.6787202152301025 -> OK

Joint Calibration Process

After executing the calibration command, you will be prompted to select which joints to calibrate. The system then initiates a per-joint calibration sequence for each selected joint.

Warning

Before calibration begins, you must ensure the workspace around the robot is completely clear. The calibration process will only commence after you explicitly confirm that the area is safe for operation.

During the calibration process, each selected joint will execute a full range-of-motion cycle:

  1. Move from its lower mechanical limit to its upper mechanical limit

  2. Return to the lower limit

  3. Finally return to the initial position

Note

Each joint calibration may take up to 45 seconds to complete.

Safety Considerations

The joint calibration operates in fully automatic mode and will trigger necessary joint movements without further user intervention. Exercise extreme caution during this process.

Ensure adequate clearance around the robot, as some joints have extensive range of motion that may require significant workspace area. The calibration will not proceed until you confirm the area is properly cleared.

Post-Calibration Steps

Once calibration completes, you must restart the arm controllers to apply the new calibration parameters. Choose one of the following methods:

  • Option 1 - Reboot the entire robot system

  • Option 2 - Restart the module manager:

    pal module manager restart
    

Note

This restart requirement exists because the calibration process updates internal parameters that the controllers cache during initialization. The controllers must reload these updated parameters to ensure accurate joint positioning and motion control.