mad-location-manager-lib 1.0
Library for fusing GPS and ENU accelerometer data
Loading...
Searching...
No Matches
gps_acc_fusion_filter.h
Go to the documentation of this file.
1#ifndef GPSACCKALMAN_H
2#define GPSACCKALMAN_H
3
4#include "kalman.h"
5
9struct kf_state {
10 double x;
11 double y;
12 double x_vel;
13 double y_vel;
14
15 kf_state() : x(0.0), y(0.0), x_vel(0.0), y_vel(0.0) {}
16 kf_state(double x_, double y_, double x_vel_, double y_vel_)
17 : x(x_), y(y_), x_vel(x_vel_), y_vel(y_vel_)
18 {
19 }
20
21 friend std::ostream& operator<<(std::ostream& os, const kf_state& obj);
22};
23
25
51class gps_acc_fusion_filter : public kalman_filter<4, 4, 2>
52{
53 private:
57
58 void rebuild_F(double dt_sec);
59 void rebuild_U(double xAcc, double yAcc);
60 void rebuild_B(double dt_sec);
61 void rebuild_Q(double dt_sec);
62 void rebuild_R(double pos_sigma_2, double vel_sigma_2);
63
64 public:
66
67 void reset(double x, // EAST - longitude in meters
68 double y, // NORTH - latitude in meters
69 double ts, // last update (GPS coordinate) time
70 double x_vel,
71 double y_vel,
72 double acc_sigma_2,
73 double pos_sigma_2);
74
75 void predict(double x_acc, double y_acc, double ts_sec);
76 void update(const kf_state& state,
77 double pos_sigma_2,
78 double vel_sigma_2 = 1e-6);
79
80 const kf_state current_state() const;
81};
83
84#endif // GPSACCKALMAN_H
gps_acc_fusion_filter - Kalman filter implementation for GPS and accelerometer fusion
Definition gps_acc_fusion_filter.h:52
void rebuild_Q(double dt_sec)
Definition gps_acc_fusion_filter.cpp:99
void rebuild_B(double dt_sec)
Definition gps_acc_fusion_filter.cpp:86
double m_acc_sigma_2
timestamp (in seconds) of last predict() call
Definition gps_acc_fusion_filter.h:55
double m_pos_sigma_2
accelerometer sigma^2
Definition gps_acc_fusion_filter.h:56
gps_acc_fusion_filter()
Definition gps_acc_fusion_filter.cpp:3
double m_last_predict_sec
Definition gps_acc_fusion_filter.h:54
void rebuild_U(double xAcc, double yAcc)
Definition gps_acc_fusion_filter.cpp:80
void rebuild_F(double dt_sec)
gps position sigma^2
Definition gps_acc_fusion_filter.cpp:68
const kf_state current_state() const
Definition gps_acc_fusion_filter.cpp:10
void predict(double x_acc, double y_acc, double ts_sec)
Definition gps_acc_fusion_filter.cpp:34
void update(const kf_state &state, double pos_sigma_2, double vel_sigma_2=1e-6)
Definition gps_acc_fusion_filter.cpp:53
void rebuild_R(double pos_sigma_2, double vel_sigma_2)
Definition gps_acc_fusion_filter.cpp:118
void reset(double x, double y, double ts, double x_vel, double y_vel, double acc_sigma_2, double pos_sigma_2)
Definition gps_acc_fusion_filter.cpp:17
Template-based Kalman filter implementation.
Definition kalman.h:19
Kalman filter state vector (X matrix) for 2D tracking.
Definition gps_acc_fusion_filter.h:9
kf_state()
velocity pointing north
Definition gps_acc_fusion_filter.h:15
double y
EAST -> longitude in meters.
Definition gps_acc_fusion_filter.h:11
kf_state(double x_, double y_, double x_vel_, double y_vel_)
Definition gps_acc_fusion_filter.h:16
friend std::ostream & operator<<(std::ostream &os, const kf_state &obj)
double x
Definition gps_acc_fusion_filter.h:10
double x_vel
NORTH -> latitude in meters.
Definition gps_acc_fusion_filter.h:12
double y_vel
velocity pointing east
Definition gps_acc_fusion_filter.h:13