mirror of
https://github.com/ArduPilot/ardupilot
synced 2025-01-08 17:08:28 -04:00
AP_MotorsUGV: steering limits and constraint done by each output handler
each motor output handler (regular, skid, omni) becomes responsible for constraining the steering input (if required) and setting the limits flags it is possible to reduce duplicate code but I think it might be more important to keep it clear which level is responsible for the limiting and constraining of steering
This commit is contained in:
parent
95eda5d9b7
commit
5faff519c3
@ -161,7 +161,7 @@ void AP_MotorsUGV::setup_servo_output()
|
||||
// no scaling by speed or angle should be performed
|
||||
void AP_MotorsUGV::set_steering(float steering, bool apply_scaling)
|
||||
{
|
||||
_steering = constrain_float(steering, -4500.0f, 4500.0f);
|
||||
_steering = steering;
|
||||
_scale_steering = apply_scaling;
|
||||
}
|
||||
|
||||
@ -230,9 +230,6 @@ void AP_MotorsUGV::output(bool armed, float ground_speed, float dt)
|
||||
// sanity check parameters
|
||||
sanity_check_parameters();
|
||||
|
||||
// clear and set limits based on input (limit flags may be set again by output_regular or output_skid_steering methods)
|
||||
set_limits_from_input(armed, _steering, _throttle);
|
||||
|
||||
// slew limit throttle
|
||||
slew_limit_throttle(dt);
|
||||
|
||||
@ -465,6 +462,13 @@ void AP_MotorsUGV::output_regular(bool armed, float ground_speed, float steering
|
||||
}
|
||||
}
|
||||
|
||||
// clear and set limits based on input
|
||||
// we do this here because vectored thrust or speed scaling may have reduced steering request
|
||||
set_limits_from_input(armed, steering, throttle);
|
||||
|
||||
// constrain steering
|
||||
steering = constrain_float(steering, -4500.0f, 4500.0f);
|
||||
|
||||
// always allow steering to move
|
||||
SRV_Channels::set_output_scaled(SRV_Channel::k_steering, steering);
|
||||
}
|
||||
@ -475,6 +479,13 @@ void AP_MotorsUGV::output_omni(bool armed, float steering, float throttle, float
|
||||
if (!has_lateral_control()) {
|
||||
return;
|
||||
}
|
||||
|
||||
// clear and set limits based on input
|
||||
set_limits_from_input(armed, steering, throttle);
|
||||
|
||||
// constrain steering
|
||||
steering = constrain_float(steering, -4500.0f, 4500.0f);
|
||||
|
||||
if (armed) {
|
||||
// scale throttle, steering and lateral to -1 ~ 1
|
||||
const float scaled_throttle = throttle / 100.0f;
|
||||
@ -527,6 +538,12 @@ void AP_MotorsUGV::output_skid_steering(bool armed, float steering, float thrott
|
||||
return;
|
||||
}
|
||||
|
||||
// clear and set limits based on input
|
||||
set_limits_from_input(armed, steering, throttle);
|
||||
|
||||
// constrain steering
|
||||
steering = constrain_float(steering, -4500.0f, 4500.0f);
|
||||
|
||||
// handle simpler disarmed case
|
||||
if (!armed) {
|
||||
if (_disarm_disable_pwm) {
|
||||
|
Loading…
Reference in New Issue
Block a user