Since each joint has an absolute position encoder it seems calibration (home position to zero joints) should only be needed once to correlate arm physical limits to software position indicators. Physical homing should not be required every time CAN/DXL start hardware control loop is called. Specifically following a bus restart from CAN connection problem should not require homing joints.
The trick here is that the encoder are “partially absolute”. What does it mean: axis 1, 2 and 3 all have a gear ratio, so if you want to make one complete turn on the axis, you’ll have to make multiple turns with the motor.
So, when the communication is lost/robot is reboot, you need to calibrate the axis with NiryoStepper, so the robot knows how many motor rotations (+ the absolute offset that we calculate with the first auto calibration) is the correct offset.
After doing one auto calibration, you can use the manual calibration which is much faster. I hope the explanation is clear!
Ah, of course! I hadn’t considered the gear reductions. Thank you.
Looking to minimize the human interactions with the robot I would still like to avoid calibration if possible.
Suppose the reported position for joints is not significantly different than before the bus is reset it would be safe to assume that the positions were correct and that calibration was not needed.