Motors Not Responding to Input Vel

Update: I tried setting the input mode to passthrough and obtained the same result.
Update2: I just noticed that in both passthrough and vel ramp mode, the vel setpoint always returns 0 regardless of what input vel is set to.

I am completely new to ODrive so please bear with me.

I am currently building an autonomous vehicle for a senior design project and would like to use the velocity ramp input to control four motors using two ODrive boards, encoders, and an Arduino Mega.

Currently I am only testing the setup procedure on one motor using the ODrive tool on my laptop and will then follow the same procedure for the other motors/boards once I have everything working on the one motor/board.

My setup is as follows:
44.4VDC (480A) LiPo source
2x ODrive v3.6 (56V) (with included resistor)
4x ODrive AMT102
4x ODrive D6374

Currently the robot is fixed off of the ground so that the wheels just spin with no load other than gearboxes and the drive chain.

I just updated the one board to the latest firmware and wiped the configuration to default parameters. I used the following commands to set up the first motor with no errors. When I send a requested state for a full calibration or index search, the motors move how I would expect them (as described in the getting started documentation), but when I send a velocity input command, the motors do not respond.

odrv0.axis0.motor.config.current_lim = 60
odrv0.axis0.controller.config.vel_limit = 5
odrv0.axis0.motor.config.calibration_current = 60
odrv0.config.brake_resistance = 2
odrv0.axis0.motor.config.pole_pairs = 7
odrv0.axis0.motor.config.torque_constant = .05513333
odrv0.axis0.motor.config.motor_type = 0
odrv0.axis0.encoder.config.cpr = 8192
odrv0.axis0.motor.config.resistance_calib_max_voltage = 12
odrv0.axis0.controller.config.control_mode = 2
odrv0.axis0.controller.config.vel_ramp_rate = .5
odrv0.axis0.controller.config.input_mode = 2
odrv0.save_configuration()

odrv0.axis0.requested_state = 3
odrv0.axis0.encoder.config.use_index = True
odrv0.axis0.requested_state = 6
odrv0.axis0.requested_state = 7
odrv0.axis0.encoder.config.pre_calibrated = True
odrv0.axis0.config.startup_encoder_index_search = True
odrv0.axis0.motor.config.pre_calibrated = True
odrv0.save_configuration()

After using the above commands, I checked for errors and no errors were being reported. I tried rebooting and still no errors. Once I sent an input_vel command for 1, 2, 3, & 4 turn per second, I still had no errors reported but the motor did not begin to rotate.

I’m guessing this might have something to do with overcoming the static friction within the gearbox and drive chain, but I would have thought that with a 60A current limit, torque would not be an issue, but again, I do not specialize in motor controls and I am brand new to ODrive so I may be mistaken. I have been able to troubleshoot my issues so far with what I could find on the forums, but I feel stuck at this point and think I need some help from someone who knows the ODrive system better than I do.

Any help would be greatly appreciated.

Hi Phnx,

You need to set odrv0.axis0.requested_state = AXIS_STATE_CLOSED_LOOP_CONTROL before any input commands are used.

You can also set odrv0.axis0.config.startup_closed_loop_control = True to have that axis go into closed loop after the index search on startup.

That worked. Thank you for your help.