mirror of https://github.com/ArduPilot/ardupilot
Copter: wait for motors to spool up before trying to upright vehicle
This stops us from progressing through the whole throw mode if the vehicle just happens to be in the right state - which is can be for a drop.
This commit is contained in:
parent
21f8ff4a4e
commit
8ccb77f708
|
@ -1468,11 +1468,13 @@ private:
|
||||||
bool throw_position_good() const;
|
bool throw_position_good() const;
|
||||||
bool throw_height_good() const;
|
bool throw_height_good() const;
|
||||||
bool throw_attitude_good() const;
|
bool throw_attitude_good() const;
|
||||||
|
bool throttle_is_unlimited() const;
|
||||||
|
|
||||||
// Throw stages
|
// Throw stages
|
||||||
enum ThrowModeStage {
|
enum ThrowModeStage {
|
||||||
Throw_Disarmed,
|
Throw_Disarmed,
|
||||||
Throw_Detecting,
|
Throw_Detecting,
|
||||||
|
Throw_Wait_Throttle_Unlimited,
|
||||||
Throw_Uprighting,
|
Throw_Uprighting,
|
||||||
Throw_HgtStabilise,
|
Throw_HgtStabilise,
|
||||||
Throw_PosHold
|
Throw_PosHold
|
||||||
|
|
|
@ -51,12 +51,15 @@ void ModeThrow::run()
|
||||||
stage = Throw_Detecting;
|
stage = Throw_Detecting;
|
||||||
|
|
||||||
} else if (stage == Throw_Detecting && throw_detected()){
|
} else if (stage == Throw_Detecting && throw_detected()){
|
||||||
gcs().send_text(MAV_SEVERITY_INFO,"throw detected - uprighting");
|
gcs().send_text(MAV_SEVERITY_INFO,"throw detected - spooling motors");
|
||||||
stage = Throw_Uprighting;
|
stage = Throw_Wait_Throttle_Unlimited;
|
||||||
|
|
||||||
// Cancel the waiting for throw tone sequence
|
// Cancel the waiting for throw tone sequence
|
||||||
AP_Notify::flags.waiting_for_throw = false;
|
AP_Notify::flags.waiting_for_throw = false;
|
||||||
|
|
||||||
|
} else if (stage == Throw_Wait_Throttle_Unlimited && throttle_is_unlimited()) {
|
||||||
|
gcs().send_text(MAV_SEVERITY_INFO,"throttle is unlimited - uprighting");
|
||||||
|
stage = Throw_Uprighting;
|
||||||
} else if (stage == Throw_Uprighting && throw_attitude_good()) {
|
} else if (stage == Throw_Uprighting && throw_attitude_good()) {
|
||||||
gcs().send_text(MAV_SEVERITY_INFO,"uprighted - controlling height");
|
gcs().send_text(MAV_SEVERITY_INFO,"uprighted - controlling height");
|
||||||
stage = Throw_HgtStabilise;
|
stage = Throw_HgtStabilise;
|
||||||
|
@ -140,6 +143,13 @@ void ModeThrow::run()
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case Throw_Wait_Throttle_Unlimited:
|
||||||
|
|
||||||
|
// set motors to full range
|
||||||
|
motors->set_desired_spool_state(AP_Motors::DesiredSpoolState::THROTTLE_UNLIMITED);
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
case Throw_Uprighting:
|
case Throw_Uprighting:
|
||||||
|
|
||||||
// set motors to full range
|
// set motors to full range
|
||||||
|
@ -294,4 +304,20 @@ bool ModeThrow::throw_position_good() const
|
||||||
// check that our horizontal position error is within 50cm
|
// check that our horizontal position error is within 50cm
|
||||||
return (pos_control->get_pos_error_xy_cm() < 50.0f);
|
return (pos_control->get_pos_error_xy_cm() < 50.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ModeThrow::throttle_is_unlimited() const
|
||||||
|
{
|
||||||
|
switch (motors->get_spool_state()) {
|
||||||
|
case AP_Motors::SpoolState::SHUT_DOWN:
|
||||||
|
case AP_Motors::SpoolState::GROUND_IDLE:
|
||||||
|
case AP_Motors::SpoolState::SPOOLING_UP:
|
||||||
|
return false;
|
||||||
|
case AP_Motors::SpoolState::THROTTLE_UNLIMITED:
|
||||||
|
return true;
|
||||||
|
case AP_Motors::SpoolState::SPOOLING_DOWN:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// compiler ensures we never get here
|
||||||
|
return true;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue