AP_BattMonitor Detailed Reference

Class Documentation

Warning

doxygenclass: Cannot find class “AP_BattMonitor” in doxygen xml output for project “ArduPilot” from directory: /home/runner/work/APMapi/APMapi/docs/../build/output-xml

Detailed Description

AP_BattMonitor is the battery monitoring system for ArduPilot. It handles battery voltage, current sensing, capacity tracking, and provides failsafe functionality for low battery conditions.

Key Features:

  • Multiple battery monitor backends (Analog, SMBus, DroneCAN, INA2XX, etc.)

  • Voltage and current monitoring

  • Capacity tracking (mAh consumed)

  • Cell voltage monitoring for smart batteries

  • Battery failsafe functionality

  • Current prediction for remaining flight time

Inheritance

This class does not inherit from any other class. It is a top-level driver class.

Derived Classes (Backends):

Related Classes:

Public Types

enum AP_BattMonitor::Failsafe

Battery failsafe state.

Noindex:

None = 0,           // No failsafe
Low = 1,            // Low voltage/capacity
Critical = 2,       // Critical level
Emergency = 3       // Emergency level
enum AP_BattMonitor::ChargingState

Battery charging state.

Noindex:

Not_Charging = 0,
Charging = 1,
Charged = 2,
Discharged = 3,
Error = 4

Public Member Functions

Singleton

static AP_BattMonitor *AP_BattMonitor::get_singleton()

Get singleton instance of battery monitor.

Returns:

Pointer to AP_BattMonitor instance, or nullptr if not available

Initialization & Update

void AP_BattMonitor::read()

Read battery data from all monitors. Must be called in main loop.

Health & Status

bool AP_BattMonitor::healthy(uint8_t instance) const

Check if specific battery instance is healthy.

Parameters:

instance – Battery instance index

Returns:

true if healthy

bool AP_BattMonitor::healthy() const

Check if primary battery is healthy.

Returns:

true if healthy

Voltage & Current

float AP_BattMonitor::voltage(uint8_t instance) const

Get battery voltage.

Parameters:

instance – Battery instance index

Returns:

Voltage in Volts

float AP_BattMonitor::voltage() const

Get primary battery voltage.

Returns:

Voltage in Volts

float AP_BattMonitor::current(uint8_t instance) const

Get battery current draw.

Parameters:

instance – Battery instance index

Returns:

Current in Amperes (negative when discharging)

float AP_BattMonitor::current() const

Get primary battery current.

Returns:

Current in Amperes

float AP_BattMonitor::current_total() const

Get total current across all batteries.

Returns:

Total current in Amperes

Capacity & Energy

float AP_BattMonitor::capacity_remaining_pct(uint8_t instance) const

Get remaining capacity as percentage.

Parameters:

instance – Battery instance index

Returns:

Remaining capacity (0-100%)

float AP_BattMonitor::capacity_remaining_pct() const

Get primary battery remaining capacity.

Returns:

Remaining capacity (0-100%)

int32_t AP_BattMonitor::capacity_consumed_mah(uint8_t instance) const

Get capacity consumed.

Parameters:

instance – Battery instance index

Returns:

Consumed capacity in mAh

int32_t AP_BattMonitor::capacity_consumed_mah() const

Get primary battery consumed capacity.

Returns:

Consumed capacity in mAh

float AP_BattMonitor::wh_remaining(uint8_t instance) const

Get remaining energy.

Parameters:

instance – Battery instance index

Returns:

Remaining energy in Watt-hours

float AP_BattMonitor::total_energy() const

Get total battery capacity.

Returns:

Total energy in Watt-hours

Cell Voltage

float AP_BattMonitor::cell_voltage(uint8_t instance, uint8_t cell) const

Get cell voltage for smart batteries.

Parameters:
  • instance – Battery instance index

  • cell – Cell index (0-based)

Returns:

Cell voltage in Volts

uint8_t AP_BattMonitor::cell_count(uint8_t instance) const

Get number of cells.

Parameters:

instance – Battery instance index

Returns:

Number of cells

Temperature

float AP_BattMonitor::temperature(uint8_t instance) const

Get battery temperature.

Parameters:

instance – Battery instance index

Returns:

Temperature in Celsius

float AP_BattMonitor::temperature() const

Get primary battery temperature.

Returns:

Temperature in Celsius

Power

float AP_BattMonitor::power(uint8_t instance) const

Get instantaneous power consumption.

Parameters:

instance – Battery instance index

Returns:

Power in Watts

float AP_BattMonitor::power() const

Get primary battery power.

Returns:

Power in Watts

Failsafe

AP_BattMonitor::Failsafe AP_BattMonitor::get_failsafe_state(uint8_t instance) const

Get battery failsafe state.

Parameters:

instance – Battery instance index

Returns:

Failsafe state enum

bool AP_BattMonitor::has_failsafed(uint8_t instance) const

Check if battery has triggered failsafe.

Parameters:

instance – Battery instance index

Returns:

true if failsafe was triggered

bool AP_BattMonitor::in_failsafe() const

Check if any battery is in failsafe.

Returns:

true if in failsafe

State of Charge

AP_BattMonitor::ChargingState AP_BattMonitor::get_charging_state(uint8_t instance) const

Get charging state.

Parameters:

instance – Battery instance index

Returns:

Charging state enum

bool AP_BattMonitor::is_charging(uint8_t instance) const

Check if battery is charging.

Parameters:

instance – Battery instance index

Returns:

true if charging

uint8_t AP_BattMonitor::get_failsafe_priorities() const

Get failsafe priority bitmask.

Returns:

Priority bitmask

Usage Example

#include <AP_BattMonitor.h>

AP_BattMonitor *battery;

void setup() {
    battery = AP_BattMonitor::get_singleton();
    if (battery == nullptr) {
        Serial.println("Battery monitor not available");
        return;
    }
}

void loop() {
    // Read battery data
    battery->read();

    // Check health
    if (battery->healthy()) {
        // Get voltage
        float voltage = battery->voltage();
        Serial.printf("Voltage: %.2f V\n", voltage);

        // Get current
        float current = battery->current();
        Serial.printf("Current: %.2f A\n", current);

        // Get power
        float power = battery->power();
        Serial.printf("Power: %.2f W\n", power);

        // Get remaining capacity
        float remaining = battery->capacity_remaining_pct();
        Serial.printf("Remaining: %.1f %%\n", remaining);

        // Get consumed capacity
        int32_t consumed = battery->capacity_consumed_mah();
        Serial.printf("Consumed: %d mAh\n", (int)consumed);

        // Get temperature
        float temp = battery->temperature();
        if (temp > 0) {
            Serial.printf("Temperature: %.1f C\n", temp);
        }

        // Check failsafe
        if (battery->in_failsafe()) {
            Serial.println("WARNING: Battery failsafe active!");
        }
    }
}

See Also

  • Sensor Libraries - Overview of sensor libraries

  • api/ap_gps - GPS (for flight time estimation)

  • AP_BattMonitor_Backend - Backend driver base class

  • AP_BattMonitor_Analog - Analog battery monitor

  • AP_BattMonitor_SMBus - SMBus smart battery