Browse Source

Copter: move check for position up

master
Peter Barker 6 years ago committed by Randy Mackay
parent
commit
fab2d59a1c
  1. 8
      ArduCopter/mode.cpp
  2. 2
      ArduCopter/mode_auto.cpp
  3. 5
      ArduCopter/mode_brake.cpp
  4. 4
      ArduCopter/mode_circle.cpp
  5. 6
      ArduCopter/mode_drift.cpp
  6. 4
      ArduCopter/mode_guided.cpp
  7. 4
      ArduCopter/mode_loiter.cpp
  8. 5
      ArduCopter/mode_poshold.cpp
  9. 4
      ArduCopter/mode_rtl.cpp
  10. 2
      ArduCopter/mode_smart_rtl.cpp
  11. 4
      ArduCopter/mode_zigzag.cpp

8
ArduCopter/mode.cpp

@ -200,6 +200,14 @@ bool Copter::set_mode(control_mode_t mode, mode_reason_t reason)
} }
#endif #endif
if (!ignore_checks &&
new_flightmode->requires_GPS() &&
!copter.position_ok()) {
gcs().send_text(MAV_SEVERITY_WARNING, "Mode change failed: %s requires position", new_flightmode->name());
Log_Write_Error(ERROR_SUBSYSTEM_FLIGHT_MODE,mode);
return false;
}
if (!new_flightmode->init(ignore_checks)) { if (!new_flightmode->init(ignore_checks)) {
gcs().send_text(MAV_SEVERITY_WARNING,"Flight mode change failed"); gcs().send_text(MAV_SEVERITY_WARNING,"Flight mode change failed");
Log_Write_Error(ERROR_SUBSYSTEM_FLIGHT_MODE,mode); Log_Write_Error(ERROR_SUBSYSTEM_FLIGHT_MODE,mode);

2
ArduCopter/mode_auto.cpp

@ -22,7 +22,7 @@
// auto_init - initialise auto controller // auto_init - initialise auto controller
bool Copter::ModeAuto::init(bool ignore_checks) bool Copter::ModeAuto::init(bool ignore_checks)
{ {
if ((copter.position_ok() && mission.num_commands() > 1) || ignore_checks) { if (mission.num_commands() > 1 || ignore_checks) {
_mode = Auto_Loiter; _mode = Auto_Loiter;
// reject switching to auto mode if landed with motors armed but first command is not a takeoff (reduce chance of flips) // reject switching to auto mode if landed with motors armed but first command is not a takeoff (reduce chance of flips)

5
ArduCopter/mode_brake.cpp

@ -9,8 +9,6 @@
// brake_init - initialise brake controller // brake_init - initialise brake controller
bool Copter::ModeBrake::init(bool ignore_checks) bool Copter::ModeBrake::init(bool ignore_checks)
{ {
if (copter.position_ok() || ignore_checks) {
// set target to current position // set target to current position
wp_nav->init_brake_target(BRAKE_MODE_DECEL_RATE); wp_nav->init_brake_target(BRAKE_MODE_DECEL_RATE);
@ -27,9 +25,6 @@ bool Copter::ModeBrake::init(bool ignore_checks)
_timeout_ms = 0; _timeout_ms = 0;
return true; return true;
}else{
return false;
}
} }
// brake_run - runs the brake controller // brake_run - runs the brake controller

4
ArduCopter/mode_circle.cpp

@ -9,7 +9,6 @@
// circle_init - initialise circle controller flight mode // circle_init - initialise circle controller flight mode
bool Copter::ModeCircle::init(bool ignore_checks) bool Copter::ModeCircle::init(bool ignore_checks)
{ {
if (copter.position_ok() || ignore_checks) {
pilot_yaw_override = false; pilot_yaw_override = false;
// initialize speeds and accelerations // initialize speeds and accelerations
@ -22,9 +21,6 @@ bool Copter::ModeCircle::init(bool ignore_checks)
copter.circle_nav->init(); copter.circle_nav->init();
return true; return true;
}else{
return false;
}
} }
// circle_run - runs the circle flight mode // circle_run - runs the circle flight mode

6
ArduCopter/mode_drift.cpp

@ -31,11 +31,7 @@
// drift_init - initialise drift controller // drift_init - initialise drift controller
bool Copter::ModeDrift::init(bool ignore_checks) bool Copter::ModeDrift::init(bool ignore_checks)
{ {
if (copter.position_ok() || ignore_checks) { return true;
return true;
}else{
return false;
}
} }
// drift_run - runs the drift controller // drift_run - runs the drift controller

4
ArduCopter/mode_guided.cpp

@ -40,13 +40,9 @@ struct Guided_Limit {
// guided_init - initialise guided controller // guided_init - initialise guided controller
bool Copter::ModeGuided::init(bool ignore_checks) bool Copter::ModeGuided::init(bool ignore_checks)
{ {
if (copter.position_ok() || ignore_checks) {
// start in position control mode // start in position control mode
pos_control_start(); pos_control_start();
return true; return true;
}else{
return false;
}
} }

4
ArduCopter/mode_loiter.cpp

@ -9,7 +9,6 @@
// loiter_init - initialise loiter controller // loiter_init - initialise loiter controller
bool Copter::ModeLoiter::init(bool ignore_checks) bool Copter::ModeLoiter::init(bool ignore_checks)
{ {
if (copter.position_ok() || ignore_checks) {
if (!copter.failsafe.radio) { if (!copter.failsafe.radio) {
float target_roll, target_pitch; float target_roll, target_pitch;
// apply SIMPLE mode transform to pilot inputs // apply SIMPLE mode transform to pilot inputs
@ -33,9 +32,6 @@ bool Copter::ModeLoiter::init(bool ignore_checks)
} }
return true; return true;
} else {
return false;
}
} }
#if PRECISION_LANDING == ENABLED #if PRECISION_LANDING == ENABLED

5
ArduCopter/mode_poshold.cpp

@ -74,11 +74,6 @@ static struct {
// poshold_init - initialise PosHold controller // poshold_init - initialise PosHold controller
bool Copter::ModePosHold::init(bool ignore_checks) bool Copter::ModePosHold::init(bool ignore_checks)
{ {
// fail to initialise PosHold mode if no GPS lock
if (!copter.position_ok() && !ignore_checks) {
return false;
}
// initialize vertical speeds and acceleration // initialize vertical speeds and acceleration
pos_control->set_max_speed_z(-get_pilot_speed_dn(), g.pilot_speed_up); pos_control->set_max_speed_z(-get_pilot_speed_dn(), g.pilot_speed_up);
pos_control->set_max_accel_z(g.pilot_accel_z); pos_control->set_max_accel_z(g.pilot_accel_z);

4
ArduCopter/mode_rtl.cpp

@ -12,15 +12,11 @@
// rtl_init - initialise rtl controller // rtl_init - initialise rtl controller
bool Copter::ModeRTL::init(bool ignore_checks) bool Copter::ModeRTL::init(bool ignore_checks)
{ {
if (copter.position_ok() || ignore_checks) {
// initialise waypoint and spline controller // initialise waypoint and spline controller
wp_nav->wp_and_spline_init(); wp_nav->wp_and_spline_init();
build_path(!copter.failsafe.terrain); build_path(!copter.failsafe.terrain);
climb_start(); climb_start();
return true; return true;
}else{
return false;
}
} }
// re-start RTL with terrain following disabled // re-start RTL with terrain following disabled

2
ArduCopter/mode_smart_rtl.cpp

@ -11,7 +11,7 @@
bool Copter::ModeSmartRTL::init(bool ignore_checks) bool Copter::ModeSmartRTL::init(bool ignore_checks)
{ {
if ((copter.position_ok() || ignore_checks) && g2.smart_rtl.is_active()) { if (g2.smart_rtl.is_active()) {
// initialise waypoint and spline controller // initialise waypoint and spline controller
wp_nav->wp_and_spline_init(); wp_nav->wp_and_spline_init();

4
ArduCopter/mode_zigzag.cpp

@ -11,10 +11,6 @@
// initialise zigzag controller // initialise zigzag controller
bool Copter::ModeZigZag::init(bool ignore_checks) bool Copter::ModeZigZag::init(bool ignore_checks)
{ {
if (!copter.position_ok() && !ignore_checks) {
return false;
}
// initialize's loiter position and velocity on xy-axes from current pos and velocity // initialize's loiter position and velocity on xy-axes from current pos and velocity
loiter_nav->clear_pilot_desired_acceleration(); loiter_nav->clear_pilot_desired_acceleration();
loiter_nav->init_target(); loiter_nav->init_target();

Loading…
Cancel
Save