No response from ODrive using CAN on motor calibration message

I am trying to understand how the CAN protocol works and in the process of doing that, I found this script in the github repository that looked like a good start the verify that the odrive can receive messages. I am receiving the heartbeat from the odrive, but it doesn’t seem to actually do anything when I send a command.


I did validate that the odrive runs the calibration sequence via USB, but no luck with CAN. Any suggestions?

I seem to have fixed the issue. I think I made a silly mistake somewhere with the axis_ids and which CAN network I was listening on. However the script seems to be flawed because the axis state messages do in fact get returned but the conditional

if current_state == 0x1:
    break

isn’t correct. The current_state switches between 0x80000004 (idle), 0x80000007 (calibration), and back to idle. instead it should be

last_16bits = current_state & ((1 << 16) - 1)
if last_16bits == 0x1:
    break

Oh, we changed the protocol at some point. I’ll have to fix the script