ODriveError.MISSING_ESTIMATE error (undocumented?)

Summary

I’m getting a strange system error called ODriveError.MISSING_ESTIMATE which I can’t find in the documentation.

My setup

  • Odrive 3.6 24V board running firmware 0.5.4
  • The D5065 motor on the ODrive shop.
  • The 8192 CPR AMT102 encoder on the ODrive shop

What I did:

I put the ODrive into torque control mode and asked for 0.1Nm of torque, expecting it to spin slowly and consistently. Instead, there’s a brief jolt, and I can see the current go up on my power supply. But immediately afterwards, the current is back down to AXIS_STATE_IDLE levels, and I get the following error:

system: Error(s):
  ODriveError.MISSING_ESTIMATE
axis0
  axis: no error
  motor: Error(s):
    MotorError.SYSTEM_LEVEL
  DRV fault: none
  sensorless_estimator: no error
  encoder: no error
  controller: no error
axis1
  axis: no error
  motor: Error(s):
    MotorError.SYSTEM_LEVEL
  DRV fault: none
  sensorless_estimator: no error
  encoder: no error
  controller: no error

I can’t find the MISSING_ESTIMATE error anywhere in the v0.5.4 documentation. I’m confident that my motor/encoder are working, because I plugged into a different board (still ODrive 3.6 hardware, but running v0.5.1 firmware), and everything works fine there.

I tried doing position mode as well, and similar behavior happens in position mode - it jolts, then goes to idle.

Terminal output below:

n [1]: odrv0.vbus_voltage
Out[1]: 23.857324600219727

In [2]: odrv0.fw_version_revision
Out[2]: 4

In [3]: odrv0.fw_version_minor
Out[3]: 5

In [4]: odrv0.axis0.requested_state = AXIS_STATE_FULL_CALIBRATION_SEQUENCE

In [5]: odrv0.axis0.requested_state = AXIS_STATE_IDLE

In [6]: odrv0.axis0.controller.config.control_mode = CONTROL_MODE_TORQUE_CONTROL
   ...: 

In [7]: odrv0.axis0.requested_state = AXIS_STATE_CLOSED_LOOP_CONTROL

In [8]: odrv0.axis0.controller.input_torque = 0.1

In [9]: dump_errors(odrv0)
system: Error(s):
  ODriveError.MISSING_ESTIMATE
axis0
  axis: no error
  motor: Error(s):
    MotorError.SYSTEM_LEVEL
  DRV fault: none
  sensorless_estimator: no error
  encoder: no error
  controller: no error
axis1
  axis: no error
  motor: Error(s):
    MotorError.SYSTEM_LEVEL
  DRV fault: none
  sensorless_estimator: no error
  encoder: no error
  controller: no error

Any help would be appreciated.

1 Like

I think I found the solution to this. There seems to be a bug with the error OdriveError.MissingEstimate being reported instead of OdriveError.DC_BUS_OVER_REGEN_CURRENT. According to my terminal output below, I have an error due to the former but the error code belongs to the latter in this version of the firmware.

In [91]: dump_errors(odrv0)
system: Error(s):
  ODriveError.MISSING_ESTIMATE
axis0
  axis: no error
  motor: Error(s):
    MotorError.SYSTEM_LEVEL
  DRV fault: none
  sensorless_estimator: no error
  encoder: no error
  controller: no error
axis1
  axis: no error
  motor: Error(s):
    MotorError.SYSTEM_LEVEL
  DRV fault: none
  sensorless_estimator: no error
  encoder: no error
  controller: no error

In [92]: odrv0.error
Out[92]: 8

The solution was to raise the limit of odrv0.config.dc_max_negative_current.

Curiously, I found the motor only failed when commanded with positive movement and not with a negative moment. I wonder if there is an issue with identifying when the motor is actually regenerating or something similar.

Might want to use the older odrivetool pip install odrive==0.5.4 if you’re running the older firmware.

1 Like

I think this is it - how do I accept this solution?