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