diff --git a/src/modules/commander/commander.cpp b/src/modules/commander/commander.cpp index db8d8c95ce..e2faf8c300 100644 --- a/src/modules/commander/commander.cpp +++ b/src/modules/commander/commander.cpp @@ -2001,7 +2001,7 @@ int commander_thread_main(int argc, char *argv[]) /* if battery voltage is getting lower, warn using buzzer, etc. */ if (battery.warning == battery_status_s::BATTERY_WARNING_LOW && - !low_battery_voltage_actions_done) { + !low_battery_voltage_actions_done) { low_battery_voltage_actions_done = true; if (armed.armed) { mavlink_log_critical(&mavlink_log_pub, "LOW BATTERY, RETURN TO LAND ADVISED"); @@ -2027,8 +2027,14 @@ int commander_thread_main(int argc, char *argv[]) mavlink_and_console_log_emergency(&mavlink_log_pub, "CRITICAL BATTERY, RTL FAILED"); } } + } else if (low_bat_action == 2) { + if (TRANSITION_CHANGED == main_state_transition(&status, commander_state_s::MAIN_STATE_AUTO_LAND, main_state_prev, &status_flags, &internal_state)) { + mavlink_and_console_log_emergency(&mavlink_log_pub, "CRITICAL BATTERY, LANDING AT CURRENT POSITION"); + } else { + mavlink_and_console_log_emergency(&mavlink_log_pub, "CRITICAL BATTERY, LANDING FAILED"); + } } else { - mavlink_and_console_log_emergency(&mavlink_log_pub, "CRITICAL BATTERY, LAND IMMEDIATELY"); + mavlink_and_console_log_emergency(&mavlink_log_pub, "CRITICAL BATTERY, LANDING ADVISED!"); } } @@ -2743,7 +2749,8 @@ int commander_thread_main(int argc, char *argv[]) set_tune(TONE_ARMING_WARNING_TUNE); arm_tune_played = true; - } else if ((status.hil_state != vehicle_status_s::HIL_STATE_ON) && + } else if (!status_flags.usb_connected && + (status.hil_state != vehicle_status_s::HIL_STATE_ON) && (battery.warning == battery_status_s::BATTERY_WARNING_CRITICAL)) { /* play tune on battery critical */ set_tune(TONE_BATTERY_WARNING_FAST_TUNE); diff --git a/src/modules/commander/commander_params.c b/src/modules/commander/commander_params.c index bbff4d98e4..f6532adea3 100644 --- a/src/modules/commander/commander_params.c +++ b/src/modules/commander/commander_params.c @@ -256,8 +256,9 @@ PARAM_DEFINE_INT32(COM_DISARM_LAND, 0); * Action the system takes on low battery. Defaults to off * * @group Commander - * @value 0 No action - * @value 1 RTL on low battery + * @value 0 Warning + * @value 1 Return to Land + * @value 2 Land at current position * @decimal 0 * @increment 1 */