AP_Baro Detailed Reference

Class Documentation

class AP_Baro
class WindCoeff

Detailed Description

AP_Baro is the core barometer (air pressure) sensor driver for ArduPilot. It provides altitude estimation based on atmospheric pressure readings, which is critical for maintaining altitude in fixed-wing aircraft and for altitude hold in multirotors.

Key Features:

  • Multiple barometer backend support (BMP280, MS5611, BMP388, etc.)

  • Altitude calculation using barometric formula

  • Pressure correction for temperature and wind effects

  • Ground pressure/temperature tracking

  • EAS (Equivalent Airspeed) to TAS (True Airspeed) conversion

  • Sensor fusion with GPS for improved accuracy

Inheritance

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

Derived Classes:

Related Classes:

Public Types

enum AP_Baro::baro_type_t

Barometer type/sensor model.

Noindex:

BARO_TYPE_AIRPRESSURE = 0,  // Standard air pressure sensor
BARO_TYPE_WIND = 1,          // Wind pressure sensor
BARO_TYPE_WIND_TUNNEL = 2   // Wind tunnel pressure sensor

Public Member Variables

AP_Baro::sensor sensors[BARO_MAX_INSTANCES]

Array of barometer sensor data structures containing pressure, temperature, altitude, etc.

Public Member Functions

Singleton

static AP_Baro *AP_Baro::get_singleton(void)

Get singleton instance of the barometer driver.

Returns:

Pointer to AP_Baro instance, or nullptr if not available

AP_Baro *baro = AP_Baro::get_singleton();
if (baro == nullptr) {
    // Baro not available
}

Initialization & Update

void AP_Baro::update(void)

Update barometer readings. Must be called in main loop.

void AP_Baro::calibrate(bool save = true)

Calibrate barometer. Saves calibration if save is true.

Parameters:

save – Whether to save calibration to persistent storage

void AP_Baro::update_calibration(void)

Update running calibration parameters.

Health & Status

bool AP_Baro::healthy(void) const

Check if primary barometer is healthy.

Returns:

true if barometer is healthy

bool AP_Baro::healthy(uint8_t instance) const

Check if specific barometer instance is healthy.

Parameters:

instance – Barometer instance index

Returns:

true if healthy

bool AP_Baro::all_healthy(void) const

Check if all barometers are healthy.

Returns:

true if all barometers are healthy

uint8_t AP_Baro::get_primary(void) const

Get primary barometer instance.

Returns:

Primary barometer instance index

Pressure Data

float AP_Baro::get_pressure(void) const

Get current pressure from primary barometer.

Returns:

Pressure in Pa

float AP_Baro::get_pressure(uint8_t instance) const

Get pressure from specific barometer instance.

Parameters:

instance – Barometer instance index

Returns:

Pressure in Pa

const Vector3f &AP_Baro::get_dynamic_pressure(uint8_t instance) const

Get dynamic pressure vector (for airspeed calculation).

Parameters:

instance – Barometer instance index

Returns:

Vector3f with dynamic pressure

float AP_Baro::get_corrected_pressure(uint8_t instance) const

Get corrected pressure (with wind/temperature corrections).

Parameters:

instance – Barometer instance index

Returns:

Corrected pressure in Pa

Temperature Data

float AP_Baro::get_temperature(void) const

Get temperature from primary barometer.

Returns:

Temperature in Celsius

float AP_Baro::get_temperature(uint8_t instance) const

Get temperature from specific barometer instance.

Parameters:

instance – Barometer instance index

Returns:

Temperature in Celsius

Altitude Data

float AP_Baro::get_altitude(void) const

Get altitude estimate from primary barometer.

Returns:

Altitude in meters (relative to ground)

float AP_Baro::get_altitude(uint8_t instance) const

Get altitude from specific barometer instance.

Parameters:

instance – Barometer instance index

Returns:

Altitude in meters

float AP_Baro::get_altitude_AMSL(uint8_t instance) const

Get altitude above mean sea level (AMSL).

Parameters:

instance – Barometer instance index

Returns:

Altitude in meters AMSL

float AP_Baro::get_altitude_AMSL(void) const

Get AMSL altitude from primary barometer.

Returns:

Altitude in meters AMSL

Climb Rate

float AP_Baro::get_climb_rate(void)

Get estimated climb rate.

Returns:

Climb rate in m/s

Ground Reference

float AP_Baro::get_ground_pressure(void) const

Get ground pressure (set during calibration).

Returns:

Ground pressure in Pa

float AP_Baro::get_ground_temperature(void) const

Get ground temperature (for altitude calculations).

Returns:

Ground temperature in Celsius

Static Altitude Methods

static float AP_Baro::get_altitude_from_pressure(float pressure) const

Calculate altitude from pressure (barometric formula).

Parameters:

pressure – Pressure in Pa

Returns:

Altitude in meters

static float AP_Baro::get_sealevel_pressure(float pressure, float altitude) const

Calculate sea level pressure from measured pressure and altitude.

Parameters:
  • pressure – Measured pressure in Pa

  • altitude – Current altitude in meters

Returns:

Sea level pressure in Pa

float AP_Baro::get_altitude_difference(float base_pressure, float pressure) const

Calculate altitude difference between two pressures.

Parameters:
  • base_pressure – Base pressure in Pa

  • pressure – Current pressure in Pa

Returns:

Altitude difference in meters

EAS/TAS Conversion

static float AP_Baro::get_EAS2TAS_for_alt_amsl(float alt_amsl)

Get Equivalent Airspeed to True Airspeed ratio for given altitude.

Parameters:

alt_amsl – Altitude above mean sea level in meters

Returns:

EAS2TAS ratio

static float AP_Baro::get_air_density_for_alt_amsl(float alt_amsl)

Get air density ratio for given altitude.

Parameters:

alt_amsl – Altitude above mean sea level in meters

Returns:

Air density ratio (relative to sea level)

Usage Example

#include <AP_Baro.h>

AP_Baro *baro;

void setup() {
    baro = AP_Baro::get_singleton();
    if (baro == nullptr) {
        Serial.println("Baro not available");
        return;
    }

    // Calibrate barometer on startup
    baro->calibrate(true);
}

void loop() {
    // Update barometer
    baro->update();

    // Check health
    if (baro->healthy()) {
        // Get altitude
        float altitude = baro->get_altitude();
        Serial.printf("Altitude: %.2f m\n", altitude);

        // Get pressure
        float pressure = baro->get_pressure();
        Serial.printf("Pressure: %.2f Pa\n", pressure);

        // Get temperature
        float temperature = baro->get_temperature();
        Serial.printf("Temperature: %.2f C\n", temperature);

        // Get climb rate
        float climb_rate = baro->get_climb_rate();
        Serial.printf("Climb Rate: %.2f m/s\n", climb_rate);
    }
}

See Also

  • Sensor Libraries - Overview of sensor libraries

  • api/ap_gps - GPS sensor (often used with baro for altitude)

  • AP_Baro_Backend - Backend driver base class (see libraries/AP_Baro/)

  • AP_Baro_MS5611 - Common barometer sensor driver