mirror of
https://github.com/ArduPilot/ardupilot
synced 2025-02-05 23:43:58 -04:00
Copter: allow battery failsafe to trigger RTL
This commit is contained in:
parent
a812ef4660
commit
87127f0ab8
@ -98,9 +98,9 @@ const AP_Param::Info var_info[] PROGMEM = {
|
||||
// @Param: FS_BATT_ENABLE
|
||||
// @DisplayName: Battery Failsafe Enable
|
||||
// @Description: Controls whether failsafe will be invoked when battery voltage or current runs low
|
||||
// @Values: 0:Disabled,1:Enabled
|
||||
// @Values: 0:Disabled,1:Land,2:RTL
|
||||
// @User: Standard
|
||||
GSCALAR(failsafe_battery_enabled, "FS_BATT_ENABLE", FS_BATTERY),
|
||||
GSCALAR(failsafe_battery_enabled, "FS_BATT_ENABLE", FS_BATT_DISABLED),
|
||||
|
||||
// @Param: FS_BATT_VOLTAGE
|
||||
// @DisplayName: Failsafe battery voltage
|
||||
|
@ -356,11 +356,6 @@
|
||||
# define BOARD_VOLTAGE_MAX 5800 // max board voltage in milli volts for pre-arm checks
|
||||
#endif
|
||||
|
||||
// Battery failsafe
|
||||
#ifndef FS_BATTERY
|
||||
# define FS_BATTERY DISABLED
|
||||
#endif
|
||||
|
||||
// GPS failsafe
|
||||
#ifndef FAILSAFE_GPS_TIMEOUT_MS
|
||||
# define FAILSAFE_GPS_TIMEOUT_MS 5000 // gps failsafe triggers after 5 seconds with no GPS
|
||||
|
@ -485,6 +485,11 @@ enum ap_message {
|
||||
#define FS_THR_ENABLED_CONTINUE_MISSION 2
|
||||
#define FS_THR_ENABLED_ALWAYS_LAND 3
|
||||
|
||||
// Battery failsafe definitions (FS_BATT_ENABLE parameter)
|
||||
#define FS_BATT_DISABLED 0 // battery failsafe disabled
|
||||
#define FS_BATT_LAND 1 // switch to LAND mode on battery failsafe
|
||||
#define FS_BATT_RTL 2 // switch to RTL mode on battery failsafe
|
||||
|
||||
// GPS Failsafe definitions (FS_GPS_ENABLE parameter)
|
||||
#define FS_GPS_DISABLED 0 // GPS failsafe disabled
|
||||
#define FS_GPS_LAND 1 // switch to LAND mode on GPS Failsafe
|
||||
|
@ -50,7 +50,7 @@ static void failsafe_radio_on_event()
|
||||
break;
|
||||
case LAND:
|
||||
// continue to land if battery failsafe is also active otherwise fall through to default handling
|
||||
if (g.failsafe_battery_enabled && failsafe.battery) {
|
||||
if (g.failsafe_battery_enabled == FS_BATT_LAND && failsafe.battery) {
|
||||
break;
|
||||
}
|
||||
default:
|
||||
@ -91,7 +91,7 @@ static void failsafe_battery_event(void)
|
||||
}
|
||||
|
||||
// failsafe check
|
||||
if (g.failsafe_battery_enabled && motors.armed()) {
|
||||
if (g.failsafe_battery_enabled != FS_BATT_DISABLED && motors.armed()) {
|
||||
switch(control_mode) {
|
||||
case STABILIZE:
|
||||
case ACRO:
|
||||
@ -100,23 +100,26 @@ static void failsafe_battery_event(void)
|
||||
if (g.rc_3.control_in == 0) {
|
||||
init_disarm_motors();
|
||||
}else{
|
||||
set_mode(LAND);
|
||||
// set mode to RTL or LAND
|
||||
if (g.failsafe_battery_enabled == FS_BATT_RTL && home_distance > wp_nav.get_waypoint_radius()) {
|
||||
if (!set_mode(RTL)) {
|
||||
set_mode(LAND);
|
||||
}
|
||||
}else{
|
||||
set_mode(LAND);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case AUTO:
|
||||
// set_mode to RTL or LAND
|
||||
if (home_distance > wp_nav.get_waypoint_radius()) {
|
||||
default:
|
||||
// set mode to RTL or LAND
|
||||
if (g.failsafe_battery_enabled == FS_BATT_RTL && home_distance > wp_nav.get_waypoint_radius()) {
|
||||
if (!set_mode(RTL)) {
|
||||
set_mode(LAND);
|
||||
}
|
||||
}else{
|
||||
// We have no GPS or are very close to home so we will land
|
||||
set_mode(LAND);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
set_mode(LAND);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -164,7 +164,7 @@ setup_compassmot(uint8_t argc, const Menu::arg *argv)
|
||||
|
||||
// disable throttle and battery failsafe
|
||||
g.failsafe_throttle = FS_THR_DISABLED;
|
||||
g.failsafe_battery_enabled = false;
|
||||
g.failsafe_battery_enabled = FS_BATT_DISABLED;
|
||||
|
||||
// read radio
|
||||
read_radio();
|
||||
|
Loading…
Reference in New Issue
Block a user