mirror of
https://github.com/ArduPilot/ardupilot
synced 2025-03-11 17:13:56 -03:00
APMRover2: Fix skid steer in when in skid steer out
This commit is contained in:
parent
e0a3caea13
commit
b31d2a59da
@ -242,6 +242,7 @@ void Rover::calc_nav_steer() {
|
||||
*****************************************/
|
||||
void Rover::set_servos(void) {
|
||||
static uint16_t last_throttle;
|
||||
bool apply_skid_mix = true; // Normaly true, false when the mixage is done by the controler with skid_steer_in = 1
|
||||
|
||||
if (control_mode == MANUAL || control_mode == LEARNING) {
|
||||
// do a direct pass through of radio values
|
||||
@ -255,6 +256,9 @@ void Rover::set_servos(void) {
|
||||
SRV_Channels::set_output_pwm(SRV_Channel::k_steering, channel_steer->get_radio_trim());
|
||||
}
|
||||
}
|
||||
if (g.skid_steer_in) {
|
||||
apply_skid_mix = false;
|
||||
}
|
||||
} else {
|
||||
if (in_reverse) {
|
||||
SRV_Channels::set_output_scaled(SRV_Channel::k_throttle, constrain_int16(SRV_Channels::get_output_scaled(SRV_Channel::k_throttle),
|
||||
@ -303,6 +307,11 @@ void Rover::set_servos(void) {
|
||||
const float throttle_scaled = SRV_Channels::get_output_norm(SRV_Channel::k_throttle);
|
||||
float motor1 = throttle_scaled + 0.5f * steering_scaled;
|
||||
float motor2 = throttle_scaled - 0.5f * steering_scaled;
|
||||
|
||||
if (!apply_skid_mix) { // Mixage is already done by a controller so just pass the value to motor
|
||||
motor1 = steering_scaled;
|
||||
motor2 = throttle_scaled;
|
||||
}
|
||||
SRV_Channels::set_output_scaled(SRV_Channel::k_steering, 4500 * motor1);
|
||||
SRV_Channels::set_output_scaled(SRV_Channel::k_throttle, 100 * motor2);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user