mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-05-21 06:57:35 +08:00
Add Range-based RTL
This commit is contained in:
committed by
Lorenz Meier
parent
e817fb83f5
commit
7482413005
@@ -3858,6 +3858,8 @@ void Commander::battery_status_check()
|
||||
hrt_abstime oldest_update = hrt_absolute_time();
|
||||
|
||||
_battery_current = 0.0f;
|
||||
float battery_level = 0.0f;
|
||||
|
||||
|
||||
// Only iterate over connected batteries. We don't care if a disconnected battery is not regularly publishing.
|
||||
for (size_t i = 0; i < num_connected_batteries; i++) {
|
||||
@@ -3871,6 +3873,36 @@ void Commander::battery_status_check()
|
||||
|
||||
// Sum up current from all batteries.
|
||||
_battery_current += batteries[i].current_filtered_a;
|
||||
|
||||
// average levels from all batteries
|
||||
battery_level += batteries[i].remaining;
|
||||
}
|
||||
|
||||
battery_level /= num_connected_batteries;
|
||||
|
||||
_rtl_flight_time_sub.update();
|
||||
float battery_usage_to_home = _rtl_flight_time_sub.valid() ?
|
||||
_rtl_flight_time_sub.get().rtl_limit_fraction : 0;
|
||||
|
||||
|
||||
auto warning_level = [this](float battery_level_fraction, float battery_to_home) {
|
||||
float battery_at_home = battery_level_fraction - battery_to_home;
|
||||
|
||||
if (battery_at_home < _param_bat_crit_thr.get()) {
|
||||
return battery_status_s::BATTERY_WARNING_CRITICAL;
|
||||
}
|
||||
|
||||
if (battery_at_home < _param_bat_low_thr.get()) {
|
||||
return battery_status_s::BATTERY_WARNING_LOW;
|
||||
}
|
||||
|
||||
return battery_status_s::BATTERY_WARNING_NONE;
|
||||
};
|
||||
|
||||
uint8_t battery_range_warning = warning_level(battery_level, battery_usage_to_home);
|
||||
|
||||
if (battery_range_warning > worst_warning) {
|
||||
worst_warning = battery_range_warning;
|
||||
}
|
||||
|
||||
bool battery_warning_level_increased_while_armed = false;
|
||||
@@ -3892,6 +3924,7 @@ void Commander::battery_status_check()
|
||||
_battery_warning = worst_warning;
|
||||
}
|
||||
|
||||
|
||||
_status_flags.condition_battery_healthy =
|
||||
// All connected batteries are regularly being published
|
||||
(hrt_elapsed_time(&oldest_update) < 5_s)
|
||||
|
||||
Reference in New Issue
Block a user