If you have enough battery power, you can make a rover use stepper motors. There might even be an opportunity to use direct drive brushless gimbal motors for precise rover odometry or a direct drive balancing robot.
That's a rover board using A3967 stepper motor controllers. Unlike an ESC, the A3967 has complete control of the motor position. Unlike a brushless gimbal controller, it only has 32 steps per revolution. A brushless gimbal controller has thousands of steps. The mane parameters for a stepper motor are the total current, the size of the step, the steps per second, & the direction.
The DAC on the STM32 connected to the REF pins determines the total current. GPIO's bang out the steps. This would be better done with hardware PWM than bitbanging. The A3967's are using the Easydriver reference design.
The motors overheat well below the maximum current a REF of 3.3V provides. The current is foremost limited by the voltage & resistance of the coil. When that fails, the A3967 clips it based on the REF voltage.
The MS pins determine the number of steps per phase. For a pointing application, you want 8 steps. For a rover, you want 1 step.
The stepper motors succeed in guaranteeing that all the wheels rotate at exactly the same speed & distance. They allow a much wider range of speeds & more consistent speed than an ESC or variable resistor. An encoder regulating RPM is not as accurate.
Combined with the consistent motor speed at low speeds, a magnetometer is enough to provide reasonably precise turning. It has to be carefully calibrated & perfectly level.
The reality of wheel slippage is still there. That prevents driving in straight lines without heading feedback & turning without a magnetometer.