diff --git a/src/modules/simulator/simulator_mavlink.cpp b/src/modules/simulator/simulator_mavlink.cpp index 0afddabe5a..c641ec5db2 100644 --- a/src/modules/simulator/simulator_mavlink.cpp +++ b/src/modules/simulator/simulator_mavlink.cpp @@ -368,14 +368,16 @@ void Simulator::handle_message(mavlink_message_t *msg, bool publish) batt_sim_start = now; } - float ibatt = -1.0f; + float ibatt = -1.0f; // no current sensor in simulation + const float minimum_percentage = 0.5f; // change this value if you want to simulate low battery reaction - const float battery_time = (now - batt_sim_start) / discharge_interval_us; - float vbatt = math::gradual(battery_time, 0.f, 1.f, _battery.full_cell_voltage(), _battery.empty_cell_voltage()); + /* Simulate the voltage of a linearly draining battery but stop at the minimum percentage */ + float battery_percentage = (now - batt_sim_start) / discharge_interval_us; + battery_percentage = math::min(battery_percentage, minimum_percentage); + float vbatt = math::gradual(battery_percentage, 0.f, 1.f, _battery.full_cell_voltage(), _battery.empty_cell_voltage()); vbatt *= _battery.cell_count(); - // TODO: don't hard-code throttle. - const float throttle = 0.5f; + const float throttle = 0.0f; // simulate no throttle compensation to make the estimate predictable _battery.updateBatteryStatus(now, vbatt, ibatt, true, true, 0, throttle, armed, &_battery_status); // publish the battery voltage