SO-ARM101 calibration command failed

:light_bulb: Using this template is recommended — you may also edit it freely, but you must fully describe your product and the problem (at least: product name, version, and problem description).

Product and Purchase

  • Product model: SO-ARM101
  • SKU or kit name: advanced

Issue Description

  1. After following the tutorial step by step, the robot could operate normally. However, next day, after powering it on again, running the teleoperation command immediately resulted in an error. When attempting to recalibrate the leader arm, the calibration failed with the following error message:
(lerobot) G:\develop\lerobot\lerobot>lerobot-calibrate --teleop.type=so101_leader --teleop.port=COM22 --teleop.id=my_awesome_leader_arm
INFO 2026-07-30 21:25:40 calibrate.py:73 {'robot': None,
 'teleop': {'calibration_dir': None,
            'id': 'my_awesome_leader_arm',
            'port': 'COM22',
            'use_degrees': False}}
INFO 2026-07-30 21:25:40 01_leader.py:82 my_awesome_leader_arm SO101Leader connected.
Press ENTER to use provided calibration file associated with the id my_awesome_leader_arm, or type 'c' and press ENTER to run calibration: c
INFO 2026-07-30 21:25:43 01_leader.py:99
Running calibration of my_awesome_leader_arm SO101Leader
Move my_awesome_leader_arm SO101Leader to the middle of its range of motion and press ENTER....
Traceback (most recent call last):
  File "G:\develop\anaconda3\envs\lerobot\lib\runpy.py", line 196, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "G:\develop\anaconda3\envs\lerobot\lib\runpy.py", line 86, in _run_code
    exec(code, run_globals)
  File "G:\develop\anaconda3\envs\lerobot\Scripts\lerobot-calibrate.exe\__main__.py", line 5, in <module>
  File "G:\develop\lerobot\lerobot\src\lerobot\calibrate.py", line 86, in main
    calibrate()
  File "G:\develop\anaconda3\envs\lerobot\lib\site-packages\draccus\argparsing.py", line 225, in wrapper_inner
    response = fn(cfg, *args, **kwargs)
  File "G:\develop\lerobot\lerobot\src\lerobot\calibrate.py", line 81, in calibrate
    device.calibrate()
  File "G:\develop\lerobot\lerobot\src\lerobot\teleoperators\so101_leader\so101_leader.py", line 105, in calibrate
    homing_offsets = self.bus.set_half_turn_homings()
  File "G:\develop\lerobot\lerobot\src\lerobot\motors\motors_bus.py", line 715, in set_half_turn_homings
    self.write("Homing_Offset", motor, offset)
  File "G:\develop\lerobot\lerobot\src\lerobot\motors\motors_bus.py", line 1020, in write
    value = self._encode_sign(data_name, {id_: value})[id_]
  File "G:\develop\lerobot\lerobot\src\lerobot\motors\feetech\feetech.py", line 318, in _encode_sign
    ids_values[id_] = encode_sign_magnitude(ids_values[id_], sign_bit)
  File "G:\develop\lerobot\lerobot\src\lerobot\utils\encoding_utils.py", line 23, in encode_sign_magnitude
    raise ValueError(f"Magnitude {magnitude} exceeds {max_magnitude} (max for {sign_bit_index=})")
ValueError: Magnitude 31482 exceeds 2047 (max for sign_bit_index=11)

The connection to the leader arm succeeded. The failure occurs when LeRobot calculates and writes the homing offsets. The SO-ARM101 code centers each current position on 2047, while the HX-10HM position-correction field accepts only -2047 to 2047. At least one servo returned a position that produced the invalid offset magnitude 31482.

Please recover in this order:

  1. Stop teleoperation and keep the arm’s workspace clear.
  2. Confirm in Device Manager that COM22 is still the leader-arm port and was not exchanged with the follower-arm port.
  3. Run the same command again:
lerobot-calibrate --teleop.type=so101_leader --teleop.port=COM22 --teleop.id=my_awesome_leader_arm
  1. At the prompt, press Enter without typing c. This reapplies the existing calibration file that worked previously. The failed recalibration may have left the motor-side offsets reset or partially rewritten, but it does not overwrite the saved calibration file before calibration completes.
  2. Test teleoperation again after the saved calibration has been applied.

If the problem remains, do not repeatedly recalibrate, manually enter the 31482 value, or flash firmware yet. Open ServoStudio at baud rate 1000000, scan the leader-arm servos, and provide screenshots showing each servo’s ID, present position, position-correction value, and operating mode. Please also include the complete teleoperation traceback and confirm that IDs 1 through 6 are all present and unique.


If this reply was helpful, you can mark it as the solution using the button below.