mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-19 15:23:34 +08:00
Implemented airspeed measurement. Untested
This commit is contained in:
@@ -43,7 +43,8 @@ CSRCS = err.c \
|
||||
conversions.c \
|
||||
cpuload.c \
|
||||
getopt_long.c \
|
||||
up_cxxinitialize.c
|
||||
up_cxxinitialize.c \
|
||||
airspeed.c
|
||||
|
||||
# ppm_decode.c \
|
||||
|
||||
|
||||
@@ -41,11 +41,13 @@
|
||||
*/
|
||||
|
||||
#include "math.h"
|
||||
#include "conversions.h"
|
||||
#include "airspeed.h"
|
||||
|
||||
|
||||
float calc_indicated_airspeed(float pressure_front, float pressure_ambient, float temperature)
|
||||
{
|
||||
return sqrtf((2.0f*(pressure_front - pressure_ambient)) / air_density_sea_level);
|
||||
return sqrtf((2.0f*(pressure_front - pressure_ambient)) / CONSTANTS_AIR_DENSITY_SEA_LEVEL_15C);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -60,7 +62,7 @@ float calc_indicated_airspeed(float pressure_front, float pressure_ambient, floa
|
||||
*/
|
||||
float calc_true_airspeed_from_indicated(float speed, float pressure_ambient, float temperature)
|
||||
{
|
||||
return speed * sqrtf(air_density_sea_level / get_air_density(pressure_ambient, temperature));
|
||||
return speed * sqrtf(CONSTANTS_AIR_DENSITY_SEA_LEVEL_15C / get_air_density(pressure_ambient, temperature));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -76,4 +78,4 @@ float calc_true_airspeed_from_indicated(float speed, float pressure_ambient, flo
|
||||
float calc_true_airspeed(float pressure_front, float pressure_ambient, float temperature)
|
||||
{
|
||||
return sqrtf((2.0f*(pressure_front - pressure_ambient)) / get_air_density(pressure_ambient, temperature));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,13 +33,16 @@
|
||||
****************************************************************************/
|
||||
|
||||
/**
|
||||
* @file airspeed.c
|
||||
* Airspeed estimation
|
||||
* @file airspeed.h
|
||||
* Airspeed estimation declarations
|
||||
*
|
||||
* @author Lorenz Meier <lm@inf.ethz.ch>
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef AIRSPEED_H_
|
||||
#define AIRSPEED_H_
|
||||
|
||||
#include "math.h"
|
||||
#include "conversions.h"
|
||||
|
||||
@@ -83,4 +86,6 @@ __EXPORT float calc_true_airspeed_from_indicated(float speed, float pressure_amb
|
||||
*/
|
||||
__EXPORT float calc_true_airspeed(float pressure_front, float pressure_ambient, float temperature);
|
||||
|
||||
__END_DECLS
|
||||
__END_DECLS
|
||||
|
||||
#endif
|
||||
|
||||
@@ -42,10 +42,6 @@
|
||||
|
||||
#include "conversions.h"
|
||||
|
||||
#define air_gas_constant 8.31432f
|
||||
#define air_density_sea_level 1.225f
|
||||
#define absolute_null_kelvin 273.15f
|
||||
|
||||
int16_t
|
||||
int16_t_from_bytes(uint8_t bytes[])
|
||||
{
|
||||
@@ -154,5 +150,5 @@ void quat2rot(const float Q[4], float R[9])
|
||||
|
||||
float get_air_density(float static_pressure, float temperature_celsius)
|
||||
{
|
||||
return static_pressure / (air_gas_constant * (temperature_celsius + absolute_null_kelvin));
|
||||
return static_pressure / (CONSTANTS_AIR_GAS_CONST * (temperature_celsius + CONSTANTS_ABSOLUTE_NULL_KELVIN));
|
||||
}
|
||||
|
||||
@@ -44,7 +44,10 @@
|
||||
#include <float.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#define CONSTANTS_ONE_G 9.80665f
|
||||
#define CONSTANTS_ONE_G 9.80665f
|
||||
#define CONSTANTS_AIR_DENSITY_SEA_LEVEL_15C 1.225f
|
||||
#define CONSTANTS_AIR_GAS_CONST 8.31432f
|
||||
#define CONSTANTS_ABSOLUTE_NULL_KELVIN 273.15f
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
|
||||
Reference in New Issue
Block a user