Files
PX4-Autopilot/docs/en/msg_docs/BatteryStatus.md
PX4BuildBot 38eb03c91f docs: auto-sync metadata [skip ci]
Co-Authored-By: PX4 BuildBot <bot@px4.io>
2026-03-04 09:11:54 +00:00

19 KiB
Raw Blame History

pageClass
pageClass
is-wide-page

BatteryStatus (UORB message)

Battery status.

Battery status information for up to 3 battery instances. These are populated from power module and smart battery device drivers, and one battery updated from MAVLink. Battery instance information is also logged and streamed in MAVLink telemetry.

TOPICS: battery_status

Fields

Name Type Unit [Frame] Range/Enum Description
timestamp uint64 us Time since system start
connected bool Whether or not a battery is connected. For power modules this is based on a voltage threshold.
voltage_v float32 V Battery voltage (Invalid: 0)
current_a float32 A Battery current (Invalid: -1)
current_average_a float32 A Battery current average (for FW average in level flight) (Invalid: -1)
discharged_mah float32 mAh Discharged amount (Invalid: -1)
remaining float32 [0 : 1] Remaining capacity (Invalid: -1)
scale float32 [1 : -] Scaling factor to compensate for lower actuation power caused by voltage sag (Invalid: -1)
time_remaining_s float32 s Predicted time remaining until battery is empty under previous averaged load (Invalid: NaN)
temperature float32 degC Temperature of the battery (Invalid: NaN)
cell_count uint8 Number of cells (Invalid: 0)
source uint8 SOURCE Battery source
priority uint8 Zero based priority is the connection on the Power Controller V1..Vn AKA BrickN-1
capacity uint16 mAh Capacity of the battery when fully charged
cycle_count uint16 Number of discharge cycles the battery has experienced
average_time_to_empty uint16 minutes Predicted remaining battery capacity based on the average rate of discharge
manufacture_date uint16 Manufacture date, part of serial number of the battery pack. Formatted as: Day + Month×32 + (Year1980)×512
state_of_health uint16 % [0 : 100] State of health. FullChargeCapacity/DesignCapacity
max_error uint16 % [1 : 100] Max error, expected margin of error in the state-of-charge calculation
id uint8 ID number of a battery. Should be unique and consistent for the lifetime of a vehicle. 1-indexed
interface_error uint16 Interface error counter
voltage_cell_v float32[14] V Battery individual cell voltages (Invalid: 0)
max_cell_voltage_delta float32 V Max difference between individual cell voltages
is_powering_off bool Power off event imminent indication, false if unknown
is_required bool Set if the battery is explicitly required before arming
warning uint8 WARNINGSTATE Current battery warning
faults uint16 FAULT Smart battery supply status/fault flags (bitmask) for health indication
full_charge_capacity_wh float32 Wh Compensated battery capacity
remaining_capacity_wh float32 Wh Compensated battery capacity remaining
over_discharge_count uint16 Number of battery overdischarge
nominal_voltage float32 V Nominal voltage of the battery pack
internal_resistance_estimate float32 Ohm Internal resistance per cell estimate
ocv_estimate float32 V Open circuit voltage estimate
ocv_estimate_filtered float32 V Filtered open circuit voltage estimate
volt_based_soc_estimate float32 [0 : 1] Normalized volt based state of charge estimate
voltage_prediction float32 V Predicted voltage
prediction_error float32 V Prediction error
estimation_covariance_norm float32 Norm of the covariance matrix

Enums

SOURCE

Name Type Value Description
SOURCE_POWER_MODULE uint8 0 Power module (analog ADC or I2C power monitor)
SOURCE_EXTERNAL uint8 1 External (MAVLink, CAN, or external driver)
SOURCE_ESCS uint8 2 ESCs (via ESC telemetry)

WARNING

Name Type Value Description
WARNING_NONE uint8 0 No battery low voltage warning active
WARNING_LOW uint8 1 Low voltage warning
WARNING_CRITICAL uint8 2 Critical voltage, return / abort immediately
WARNING_EMERGENCY uint8 3 Immediate landing required
WARNING_FAILED uint8 4 Battery has failed completely

STATE

Name Type Value Description
STATE_UNHEALTHY uint8 6 Battery is diagnosed to be defective or an error occurred, usage is discouraged / prohibited. Possible causes (faults) are listed in faults field
STATE_CHARGING uint8 7 Battery is charging

FAULT

Name Type Value Description
FAULT_DEEP_DISCHARGE uint8 0 Battery has deep discharged
FAULT_SPIKES uint8 1 Voltage spikes
FAULT_CELL_FAIL uint8 2 One or more cells have failed
FAULT_OVER_CURRENT uint8 3 Over-current
FAULT_OVER_TEMPERATURE uint8 4 Over-temperature
FAULT_UNDER_TEMPERATURE uint8 5 Under-temperature fault
FAULT_INCOMPATIBLE_VOLTAGE uint8 6 Vehicle voltage is not compatible with this battery (batteries on same power rail should have similar voltage)
FAULT_INCOMPATIBLE_FIRMWARE uint8 7 Battery firmware is not compatible with current autopilot firmware
FAULT_INCOMPATIBLE_MODEL uint8 8 Battery model is not supported by the system
FAULT_HARDWARE_FAILURE uint8 9 Hardware problem
FAULT_FAILED_TO_ARM uint8 10 Battery had a problem while arming
FAULT_COUNT uint8 11 Counter. Keep this as last element

Constants

Name Type Value Description
MESSAGE_VERSION uint32 1
MAX_INSTANCES uint8 3

Source Message

Source file (GitHub)

::: details Click here to see original file

# Battery status
#
# Battery status information for up to 3 battery instances.
# These are populated from power module and smart battery device drivers, and one battery updated from MAVLink.
# Battery instance information is also logged and streamed in MAVLink telemetry.

uint32 MESSAGE_VERSION = 1
uint8 MAX_INSTANCES = 3

uint64 timestamp # [us] Time since system start

bool connected # Whether or not a battery is connected. For power modules this is based on a voltage threshold.
float32 voltage_v # [V] [@invalid 0] Battery voltage
float32 current_a # [A] [@invalid -1] Battery current
float32 current_average_a # [A] [@invalid -1] Battery current average (for FW average in level flight)
float32 discharged_mah # [mAh] [@invalid -1] Discharged amount
float32 remaining # [@range 0,1] [@invalid -1] Remaining capacity
float32 scale # [-] [@range 1,] [@invalid -1] Scaling factor to compensate for lower actuation power caused by voltage sag
float32 time_remaining_s # [s] [@invalid NaN] Predicted time remaining until battery is empty under previous averaged load
float32 temperature # [degC] [@invalid NaN] Temperature of the battery
uint8 cell_count # [-] [@invalid 0] Number of cells

uint8 source # [@enum SOURCE] Battery source
uint8 SOURCE_POWER_MODULE = 0 # Power module (analog ADC or I2C power monitor)
uint8 SOURCE_EXTERNAL = 1 # External (MAVLink, CAN, or external driver)
uint8 SOURCE_ESCS = 2 # ESCs (via ESC telemetry)

uint8 priority # [-] Zero based priority is the connection on the Power Controller V1..Vn AKA BrickN-1
uint16 capacity # [mAh] Capacity of the battery when fully charged
uint16 cycle_count # [-] Number of discharge cycles the battery has experienced
uint16 average_time_to_empty # [minutes] Predicted remaining battery capacity based on the average rate of discharge
uint16 manufacture_date # [-] Manufacture date, part of serial number of the battery pack. Formatted as: Day + Month×32 + (Year1980)×512
uint16 state_of_health # [%] [@range 0, 100] State of health. FullChargeCapacity/DesignCapacity
uint16 max_error # [%] [@range 1, 100] Max error, expected margin of error in the state-of-charge calculation
uint8 id # [-] ID number of a battery. Should be unique and consistent for the lifetime of a vehicle. 1-indexed
uint16 interface_error # [-] Interface error counter

float32[14] voltage_cell_v # [V] [@invalid 0] Battery individual cell voltages
float32 max_cell_voltage_delta # [V] Max difference between individual cell voltages

bool is_powering_off # Power off event imminent indication, false if unknown
bool is_required # Set if the battery is explicitly required before arming

uint8 warning # [@enum WARNING STATE] Current battery warning
uint8 WARNING_NONE = 0 # No battery low voltage warning active
uint8 WARNING_LOW = 1 # Low voltage warning
uint8 WARNING_CRITICAL = 2 # Critical voltage, return / abort immediately
uint8 WARNING_EMERGENCY = 3 # Immediate landing required
uint8 WARNING_FAILED = 4 # Battery has failed completely
uint8 STATE_UNHEALTHY = 6 # Battery is diagnosed to be defective or an error occurred, usage is discouraged / prohibited. Possible causes (faults) are listed in faults field
uint8 STATE_CHARGING = 7 # Battery is charging

uint16 faults # [@enum FAULT] Smart battery supply status/fault flags (bitmask) for health indication
uint8 FAULT_DEEP_DISCHARGE = 0 # Battery has deep discharged
uint8 FAULT_SPIKES = 1 # Voltage spikes
uint8 FAULT_CELL_FAIL= 2 # One or more cells have failed
uint8 FAULT_OVER_CURRENT = 3 # Over-current
uint8 FAULT_OVER_TEMPERATURE = 4 # Over-temperature
uint8 FAULT_UNDER_TEMPERATURE = 5 # Under-temperature fault
uint8 FAULT_INCOMPATIBLE_VOLTAGE = 6 # Vehicle voltage is not compatible with this battery (batteries on same power rail should have similar voltage)
uint8 FAULT_INCOMPATIBLE_FIRMWARE = 7 # Battery firmware is not compatible with current autopilot firmware
uint8 FAULT_INCOMPATIBLE_MODEL = 8 # Battery model is not supported by the system
uint8 FAULT_HARDWARE_FAILURE = 9 # Hardware problem
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
uint16 over_discharge_count # [-] Number of battery overdischarge
float32 nominal_voltage # [V] Nominal voltage of the battery pack

float32 internal_resistance_estimate # [Ohm] Internal resistance per cell estimate
float32 ocv_estimate # [V] Open circuit voltage estimate
float32 ocv_estimate_filtered # [V] Filtered open circuit voltage estimate
float32 volt_based_soc_estimate # [-] [@range 0, 1] Normalized volt based state of charge estimate
float32 voltage_prediction # [V] Predicted voltage
float32 prediction_error # [V] Prediction error
float32 estimation_covariance_norm # [-] Norm of the covariance matrix

:::