Motor speed scaling base speed (SPD_SCA_BASE)
Description
This parameter is used on Ground Vehicles (Rovers/Boats) with "Regular" steering (e.g., a front-wheel steering car). It defines the "Safe Speed" threshold for full steering authority.
As a rover drives faster, small steering inputs cause much more aggressive cornering, which can lead to rollovers or loss of traction. To prevent this, ArduPilot automatically scales down the steering output as the vehicle's speed increases. SPD_SCA_BASE is the speed at which this reduction begins.
The Mathematics
The steering command is scaled linearly based on the ratio of the base speed to the current ground speed ($V\_{ground}$):
$$ \text{IF } |V\_{ground}| > SPD\_SCA\_BASE: $$
$$ \text{Steering}{eff} = \text{Steering}{cmd} \times \left( \frac{SPD\_SCA\_BASE}{|V\_{ground}|} \right) $$
If the vehicle is moving slower than the base speed, the multiplier is 1.0 (no reduction).
The Engineer's View
In AP_MotorsUGV::output_regular() (libraries/AR_Motors/AP_MotorsUGV.cpp):
- The code checks if
_speed_scale_base is positive.
- It compares the current ground speed to this base.
- The inverse scaling is applied to the steering term.
- This implementation is essentially an "Electronic Steering Rack" that becomes slower and more stable at high speeds, mirroring the behavior of modern high-performance automobiles.
Tuning & Behavior
- Default Value: 1.0 m/s.
- Effect of Increasing: The vehicle maintains full steering sensitivity at higher speeds. Useful for slow, high-torque crawlers.
- Effect of Decreasing: The steering becomes "stiffer" (less sensitive) sooner as you accelerate. Recommended for fast on-road rovers to prevent high-speed flipping.
- 0: Disables speed scaling entirely. Use with caution on fast vehicles.