diff --git a/src/modules/simulator/simulator.h b/src/modules/simulator/simulator.h index a88fbd54cd..79519cb654 100644 --- a/src/modules/simulator/simulator.h +++ b/src/modules/simulator/simulator.h @@ -300,6 +300,7 @@ private: DEFINE_PARAMETERS( (ParamFloat) _param_sim_bat_drain, ///< battery drain interval + (ParamFloat) _battery_min_percentage, //< minimum battery percentage (ParamInt) _param_mav_type, (ParamInt) _param_mav_sys_id, (ParamInt) _param_mav_comp_id diff --git a/src/modules/simulator/simulator_mavlink.cpp b/src/modules/simulator/simulator_mavlink.cpp index ecfdf627b5..18738b9cbc 100644 --- a/src/modules/simulator/simulator_mavlink.cpp +++ b/src/modules/simulator/simulator_mavlink.cpp @@ -383,12 +383,11 @@ void Simulator::handle_message_hil_sensor(const mavlink_message_t *msg) } float ibatt = -1.0f; // no current sensor in simulation - const float minimum_percentage = 0.499f; // change this value if you want to simulate low battery reaction /* Simulate the voltage of a linearly draining battery but stop at the minimum percentage */ float battery_percentage = 1.0f - (now_us - batt_sim_start) / discharge_interval_us; - battery_percentage = math::max(battery_percentage, minimum_percentage); + battery_percentage = math::max(battery_percentage, _battery_min_percentage.get() / 100.f); float vbatt = math::gradual(battery_percentage, 0.f, 1.f, _battery.empty_cell_voltage(), _battery.full_cell_voltage()); vbatt *= _battery.cell_count(); diff --git a/src/modules/simulator/simulator_params.c b/src/modules/simulator/simulator_params.c index 65bf9aa89f..8a0b582855 100644 --- a/src/modules/simulator/simulator_params.c +++ b/src/modules/simulator/simulator_params.c @@ -51,3 +51,17 @@ * @group SITL */ PARAM_DEFINE_FLOAT(SIM_BAT_DRAIN, 60); + +/** + * Simulator Battery minimal percentage. Can be used to alter + * the battery level during SITL- or HITL-simulation on the fly. + * Particularly useful for testing different low-battery behaviour. + * + * @min 0 + * @max 100 + * @increment 0.1 + * @unit % + * + * @group SITL + */ +PARAM_DEFINE_FLOAT(SIM_BAT_MIN_PCT, 50.0f);