Depending on the application, you can use brushed, brushless, SAC, IPM, or linear motors. Brushless are great for drone rotor power, so you’re not wrong there, but the motor choice depends on the application.
The motor controller is the part that receives control signals from somewhere, plus main power, and transfers that into the power signals needed to make the motor “go” the way you want. In many instances, you also have some kind of sensor on the motor, or on the output of whatever the motor is driving, so that the controller can match a desired speed, position, or torque. (This is typically referred to as “closed loop servo control.”)
The name “Electronic Speed Control” is a hobby term, used for hobby radio controlled airplanes, cars, and now drones. Typically, an ESC receives pulse-width input (1000 us pulse means “minimum,” 2000 us pulse means “maximum” typically somewhere between 3 and 16 millisecond period between each pulse.
I have not seen documentation for the Xavier mention any programmable controller hardware that can generate a high-accuracy pulse train as needed to control those ESC devices. Thus, you have two choices:
Use an intermediate controller that speaks USB, UART, I2C, CAN, or some other protocol that the Xavier does well, and converts instructions over this protocol to the PWM pulses needed by a typical ESC. You could use an Arduino or a Teensy 3.2 (my favorite) microcontroller to speak to the Jetson on one side and the controller on the other. There are tons of other options (Pololu Mini Maestro, Adafruit I2C Servo PWM board, and so on.)
Use a motor controller that can speak one of those protocols. Most common in hobby drone circles seem to be UART or I2C based controllers, but I think some of them can do CAN, too. I think some of the higher-end ones on HobbyKing may be able to do this; you’ll need to do some searching to find a good model and source.
Btw, the hobby king controllers you’re pointing at are limited at 20A, and typically overheat if you keep drawing that current for any amount of time (so they should be run at a lower typical load.) This may not be enough to drive the propellers/motors that will lift a drone that mounts a 700 gram controller like the Jetson, in addition to all the other weight (motors, battery, frame, etc.)
Once you have a motor matched to the application, and a controller matched to the motor, and a protocol that the Jetson can emit, you need to write code on the Jetson to emit the appropriate control signals over that protocol / hardware device. You can do this in any language, using any library, or no library at all other than the Linux kernel/device driver interface.
Yes, you can use ROS as a library. Yes, you can write code in Python. Whether that’s the right choice for you, depends entirely on what you already know how to do do, and what you want to achieve.
For example, for drone flight, you will need to use an IMU of some sort. Typically you will poll this very quickly, at the same rate as your motor control. The normal Linux kernel on the Jetson is not great at real-time work, so you’ll probably want some smaller microcontroller for the IMU and motor control bit, rather than trying to use the Jetson for all of that I/O and reactive work. You can use an existing “pilot” controller for this, or you can build your own on top of a microcontroller (like the Teensy.) Again, entirely depends on what you want to achieve.