mirror of
https://github.com/PX4/PX4-Autopilot.git
synced 2026-05-10 06:39:25 +08:00
fix(battery): Add invalid sentinel for BatteryStatus remaining_capacity_wh and nominal_voltage (#27236)
This commit is contained in:
@@ -65,9 +65,9 @@ uint8 FAULT_FAILED_TO_ARM = 10 # Battery had a problem while arming
|
||||
uint8 FAULT_COUNT = 11 # Counter. Keep this as last element
|
||||
|
||||
float32 full_charge_capacity_wh # [Wh] Compensated battery capacity
|
||||
float32 remaining_capacity_wh # [Wh] Compensated battery capacity remaining
|
||||
float32 remaining_capacity_wh # [Wh] [@invalid NaN] Compensated battery capacity remaining
|
||||
uint16 over_discharge_count # [-] Number of battery overdischarge
|
||||
float32 nominal_voltage # [V] Nominal voltage of the battery pack
|
||||
float32 nominal_voltage # [V] [@invalid NaN] Nominal voltage of the battery pack
|
||||
|
||||
float32 internal_resistance_estimate # [Ohm] Internal resistance per cell estimate
|
||||
float32 ocv_estimate # [V] Open circuit voltage estimate
|
||||
|
||||
@@ -184,7 +184,8 @@ UavcanBatteryBridge::battery_aux_sub_cb(const uavcan::ReceivedDataStructure<ardu
|
||||
_battery_status[instance].cell_count = math::min((uint8_t)msg.voltage_cell.size(), (uint8_t)14);
|
||||
_battery_status[instance].cycle_count = msg.cycle_count;
|
||||
_battery_status[instance].over_discharge_count = msg.over_discharge_count;
|
||||
_battery_status[instance].nominal_voltage = msg.nominal_voltage;
|
||||
// ArduPilot BatteryInfoAux convention: nominal_voltage == 0 means "not provided"
|
||||
_battery_status[instance].nominal_voltage = (msg.nominal_voltage > FLT_EPSILON) ? msg.nominal_voltage : NAN;
|
||||
_battery_status[instance].is_powering_off = msg.is_powering_off;
|
||||
|
||||
if (msg.nominal_voltage > FLT_EPSILON) {
|
||||
|
||||
@@ -184,6 +184,8 @@ battery_status_s Battery::getBatteryStatus()
|
||||
battery_status.warning = _warning;
|
||||
battery_status.timestamp = hrt_absolute_time();
|
||||
battery_status.faults = determineFaults();
|
||||
battery_status.remaining_capacity_wh = NAN; // not measured by dumb power module; smart-battery drivers overwrite
|
||||
battery_status.nominal_voltage = NAN; // not measured by dumb power module; smart-battery drivers overwrite
|
||||
battery_status.internal_resistance_estimate = _internal_resistance_estimate;
|
||||
battery_status.ocv_estimate = _voltage_v + _internal_resistance_estimate * _params.n_cells * _current_a;
|
||||
battery_status.ocv_estimate_filtered = _ocv_filter_v.getState();
|
||||
|
||||
Reference in New Issue
Block a user