Spin up of Orel with Babel


I’ve connected to the Orel with the Babel board and I’d like to calibrate it.
I am using UAVCAN GUI Tool to interface with the Babel board.
The motor I’m using is a DJI 2312 E (800 kV) .
I believe the default number of poles of 14 is correct.
My goal is to be able to use “RPMCommand” to spin the motor with approximately the correct RPM.
(Ultimately I will be using this with Pixhawk / QGroundControl but nothing happened when I tried the QGroundControl UAVCAN control)

If I issue the command:

periodic(0.05, publish_throttle_setpoint)

following this:


The motor chirps but doesn’t spin continuously.
I get about the same result with:

broadcast(uavcan.equipment.esc.RawCommand(cmd=[ 1, 0, 0, 0]), interval=0.01, count=100)
broadcast(uavcan.equipment.esc.RawCommand(cmd=[10, 0, 0, 0]), interval=0.01, count=100)

This page seems to mention a spin up procedure:


Is there a “spin up command” aside from “RawCommand”, “RPMCommand”, etc?
If so can it be sent from the Babel board with UAVCAN GUI Tool?

I have tried increasing mot_v_spinup to 6 and mot_v_min to 3.



Hello Derek,

Is it true that you have PX4 and Babel connected to the CAN bus at the same time? From your description it sounds like they both are connected and they are issuing contradictory commands, which prevent the motors from starting. Please shut down, disconnect, or disable CAN on PX4 and try again. Before trying again, please reset Sapog parameters (those that are related to motor control at least) back to defaults.

Also I just released UAVCAN GUI Tool v0.8, which has this new feature (it supports only raw commands at the moment though):

Regarding the QGC difficulties - yes indeed, there are some issues with it; they are being discussed here: github.com/PX4/Firmware/pull/5356.


Thank you Pavel,

The new ESC Management Panel works well.

I did notice that the Jupyter Console seems to have an RPM cutoff that is not present in the in the ESC Management Panel.
With the ESC panel and a broadcast interval of 0.10 s if I raise the first slider halfway “Generated message” shows:

cmd: [5000. 0, 0, 0]

The motor smoothly ramps up to a reasonable constant RPM.

If I then close the ESC Panel and issue the following command in the console:

broadcast(uavcan.equipment.esc.RawCommand(cmd=[5000, 0, 0, 0], priority=1, interval=0.1, duration=5))

Nothing happens. If I lower the setting:

broadcast(uavcan.equipment.esc.RawCommand(cmd=[2000, 0, 0, 0], priority=1, interval=0.1, duration=5))

The motor spins as expected. The limit seems to be between 2000 and 2100.

Am I missing something?



Hi Derek,

The Sapog firmware has a safety feature that prevents the motor from starting if the initial setpoint value was above 25%. The safety threshold can be adjusted (or disabled completely) via the configuration parameter “cmd_start_dc”. This is documented here: docs.zubax.com/sapog#ESC_control. If you want to disable this behavior, set “cmd_start_dc” to 1.0 (which means 100%).


Thanks Pavel,

I still get no response from RPMCommand:

broadcast(uavcan.equipment.esc.RPMCommand(cmd=[100, 0, 0, 0], priority=1, interval=0.1, duration=5))
broadcast(uavcan.equipment.esc.RPMCommand(cmd=[500, 0, 0, 0], priority=1, interval=0.1, duration=5))
broadcast(uavcan.equipment.esc.RPMCommand(cmd=[1000, 0, 0, 0], priority=1, interval=0.1, duration=5))

When I look on the CAN bus monitor I see that esc.RPMCommand is sent but with a null array:

rpm: []

Why could this be?
Do you happen to know if Pixhawk PX4 issues control commands with RAWCommand() or RPMCommand()?

Thanks again!


The problem is that your message initialization is malformed. The field that carries RPM setpoints is named “rpm”, not “cmd”. It is documented here: uavcan.org/Specification/7._List … rpmcommand

PX4 issues RAWCommand. I recall that there were efforts to implement RPM control on the PX4 side, but I’m not sure what’s the current status of it.

Thank you Pavel.