Hummingbird Flight Software
Flight software for the Hummingbird FCU quadcopter flight controller. Designed to run on the Teensy 4.1. Developed with VSCode+PlatformIO.
gravity_computer.h
Go to the documentation of this file.
1 // ----------------------------------------------------------------------------
2 // GRAVITATIONAL ACCELERATION COMPUTER
3 //
4 // Code By: Michael Wrona
5 // Created: 20 Feb 2021
6 // ----------------------------------------------------------------------------
7 // Compute the gravitational acceleration while in flight. Computes gravity as
8 // a function of latitude, longitude, and altitude above mean sea level.
9 
10 
11 #pragma once
12 
13 #include <math.h>
14 #include "hummingbird_config.h"
15 #include "conversions.h"
16 #include "debugging.h"
17 #include "constants.h"
18 #include "filters/median_filter.h"
19 
20 
21 // #define GRAV_COMPUTER_WGS84_MODEL ///< Use the WGS84 gravity formula (https://en.wikipedia.org/wiki/Gravity_of_Earth#:~:text=various%20cities%20show-,Mathematical%20models,-%5Bedit%5D)
22 // #define GRAV_COMPUTER_NONLINEAR_FAC //< Use the full Free-Air Correction model. Uses the linearized one by default.
23 
24 
29 {
30 public:
33  // Do not allow copies (singleton)
34  static GravityComputer &GetInstance(); // Accessor
35  GravityComputer(const GravityComputer &) = delete;
37 
38  bool Update(float lat_rad = CONSTS_PIDIV4, float lon_rad = 0.0f, float alt_msl = 280.0f);
39  float GetGravity();
40  uint32_t errCount;
41 
42 private:
43  bool _ComputeGravity(float lat, float lon, float alt);
44  float _grav;
46 };
47 
48 // Only one instance of InertialNavSystem
Gravity computer class.
Definition: gravity_computer.h:29
float _grav
Computed gravitational acceleration in [m/s/s].
Definition: gravity_computer.h:44
bool _ComputeGravity(float lat, float lon, float alt)
Compute gravitational acceleration in [m/s/s] using a gravity model.
Definition: gravity_computer.cpp:74
~GravityComputer()
Definition: gravity_computer.h:32
GravityComputer & operator=(const GravityComputer &)=delete
float GetGravity()
Returns gravitational acceleration in [m/s/s].
Definition: gravity_computer.cpp:60
GravityComputer()
Compute gravitational acceleration as a function of latitude and altitude above mean sea level.
Definition: gravity_computer.cpp:17
uint32_t errCount
Number of errors or invalid inputs to the code.
Definition: gravity_computer.h:40
static GravityComputer & GetInstance()
Definition: gravity_computer.cpp:145
bool Update(float lat_rad=CONSTS_PIDIV4, float lon_rad=0.0f, float alt_msl=280.0f)
Use a gravitymodel to compute gravity at a given latitude, longitude, and altitude.
Definition: gravity_computer.cpp:33
GravityComputer(const GravityComputer &)=delete
MedianFilter GravSmoother
Median filter to smooth out gravity.
Definition: gravity_computer.h:45
Definition: median_filter.h:19
constexpr float CONSTS_PIDIV4
Global constants such as grav.
Definition: constants.h:24
GravityComputer & GravComputer
Definition: gravity_computer.cpp:151