Most ‘absolute encoders’ are only absolute to within one turn - they wrap around back to zero. The ODrive can’t store the multi-turn offset, as that would mean writing to EEPROM continuously, which would wear it out (plus in the event of a power failure, it would corrupt the data)
It’s possible to get ‘absolute multi-turn’ encoders though, but these are expensive industrial beasts.
Or, use another absolute encoder at the other end of the gearbox to work out which ‘turn’ the motor encoder is on.
That is indeed odd. full_calibration is simply motor_calibration (which measures motor resistance & inductance) followed by encoder_offset_calibration (which is needed to find a commutation reference) So are you saying that encoder_offset_calibration works even /with/ the leg connected? Or do you have to disconnect the leg?
I suppose index_search might not initialise the commutation reference if encoder_offset_calibration has been done that boot, because the drive already has it. So this could still be an issue with noise on the index input.
Make sure you have set encoder.pre_calibrated=True after you do the encoder_offset_calibration but before you save the config.
I’ve personally never managed to get index_search to work properly, and I’ve heard a number of people having issues with it. And as a control engineer, I struggle to see how it could ever really work with a motor still attached to a load, since the drive will be unable to produce much torque until it has an absolute position reference.
For servo control on PMSM/BLDC motors, I have always used absolute encoders as a matter of course.
Wow, that’s one dangerously large robot. Do you have any public documentation/photos? I’d love to see it.
edit: I think I found it .
By legs, you mean castor style wheels with motors to orient them, like a ‘swerve drive’. I can see why you might need a LOT of torque for steering now, given the application.
Is there no way for you to put the encoder on the back of this motor, by gluing the magnet to the stub-shaft, and having a small hole in your mounting plate for the chip?