I’m operating several ODrive V3.6 over CAN bus and now as I finally went down to fault tolerance and crash protection questions I need ODrive to stop wheels if communication from external controller (ROS in my case) is lost. I enabled axis watchdogs, set watchdog timeout, everything works as expected, but it is not clear what is the right way to build the initial start sequence.
Computer boot up and ROS launch takes some time while ODrives start almost immediately after power is applied, so when ROS finally starts sending control messages over CAN bus axis watchdogs are triggered already and all axises are in error state.
Initially I thought that sending clear_errors message over the CAN bus to all axises after control messages started from ROS should solve the problem, but I found out that while axis error disappears and doesn’t raise again motors would not move though ODrive receives velocity input from CAN bus.
It works though if I reboot ODrives by sending reboot command over the CAN bus - they start working as normal but in some case it leads to excessive CAN bus errors as ROS continues to rapidly send control messages to ODrives (with 10Hz rate in my case).
So I wonder what is the right way to do the startup sequence with axis watchdogs enabled when using CAN (no USB connections) to control ODrive?