Cooperative Localisation Filters 0.0.1
Loading...
Searching...
No Matches
filter.h
Go to the documentation of this file.
1
9#ifndef INCLUDE_SRC_FILTER_H_
10#define INCLUDE_SRC_FILTER_H_
11
12#include <DataHandler/DataHandler.h>
13#include <Eigen/Dense>
14
15class Filter {
16protected:
21 static const unsigned short total_states = 3;
26 static const unsigned short total_inputs = 2;
31 static const unsigned short total_measurements = 2;
32
33 /* Enums for easier accessing of variables in arrays and vectors. */
35 enum { RANGE = 0, BEARING = 1 };
36 enum { X = 0, Y = 1, ORIENTATION = 2 };
37
38 /* General Vector Types Definitions. */
39 typedef Eigen::Matrix<double, 2, 1> vector2D_t;
40 typedef Eigen::Matrix<double, total_states, 1> vector3D_t;
41 typedef Eigen::Matrix<double, 2 * total_states, 1> vector6D_t;
42
43 /* General Square Matrix Type Definitions. */
44 typedef Eigen::Matrix<double, 2, 2> matrix2D_t;
45 typedef Eigen::Matrix<double, total_states, total_states> matrix3D_t;
46 typedef Eigen::Matrix<double, 2 * total_states, 2 * total_states> matrix6D_t;
47
48 /* State Type Definitions. */
51
52 /* Covariance Type Definitions. */
55
56 /* Information Type Definitions. */
59
60 /* Precision Type Definitions. */
63
64 /* Measurement Type Definitions. */
67
68 /* Measurement Type Definitions. */
69 typedef Eigen::Matrix<double, 2 * total_states, total_measurements>
71
72 /* Motion Model Type Definitions. */
73 typedef Eigen::Matrix<double, total_states, total_states> motionJacobian_t;
74
75 typedef Eigen::Matrix<double, total_states, total_inputs> processJacobian_t;
76
77 typedef Eigen::Matrix<double, total_measurements, 2 * total_states>
79
80 typedef Eigen::Matrix<double, total_inputs, total_inputs> processCovariance_t;
81
82 /* Huber Cost Function Type Definitions. */
83 typedef Eigen::Matrix<double, total_measurements, 1>
85
86 typedef Eigen::Matrix<double, total_measurements, total_measurements>
88
89 typedef Eigen::Matrix<double, 2 * total_states, 1> huberStateThresholds_t;
90 typedef Eigen::Matrix<double, 2 * total_states, 2 * total_states>
92
97 DataHandler &data_;
98
104 unsigned short id;
105 unsigned short barcode;
106
114 state_t state_estimate = state_t::Zero();
115
119 measurement_t measurement = measurement_t::Zero();
120
129 measurement_t innovation = measurement_t::Zero();
130
135 measurementCovariance_t::Zero();
136
143 augmentedState_t estimation_residual = augmentedState_t::Zero();
144
151 covariance_t error_covariance = covariance_t::Identity() * 0.001;
152
160 kalmanGain_t kalman_gain = kalmanGain_t::Zero();
161
173 processCovariance_t process_noise = processCovariance_t::Zero();
174
184 measurementCovariance_t measurement_noise = measurementCovariance_t::Zero();
185
190 motionJacobian_t motion_jacobian = motionJacobian_t::Zero();
191
196 processJacobian_t process_jacobian = processJacobian_t::Zero();
197
201 measurementJacobian_t measurement_jacobian = measurementJacobian_t::Zero();
202
215 state_t information_vector = state_t::Zero();
216
225 };
226
230 std::vector<EstimationParameters> robot_parameters;
231
235 std::vector<EstimationParameters> landmark_parameters;
236
242 (huberMeasurementThresholds_t() << 0.2, 0.01).finished();
243
250 (huberStateThresholds_t() << 0.15, 0.154, 0.255, 0.0104, 0.0104, 0.0)
251 .finished();
252
253 /* Filter Functionality Functions */
254 virtual void prediction(const Robot::Odometry &, EstimationParameters &) = 0;
255
257 const EstimationParameters &) = 0;
258
259 /* Motion Model Functions. */
260 void motionModel(const Robot::Odometry &, EstimationParameters &,
261 const double);
262
263 void calculateMotionJacobian(const Robot::Odometry &, EstimationParameters &,
264 const double);
265
267
268 /* Measurement Model Functions. */
270 const EstimationParameters &);
271
273 const EstimationParameters &);
274
275 /* Filter Helper Functions. */
277
278 state_t marginalise(const vector6D_t &, const matrix6D_t &);
279
281 const state_t &);
282
284 const covariance_t &);
285
286 void normaliseAngle(double &);
287
289
292
293 /* Huber Cost Functions. */
296
298 const huberStateThresholds_t &);
299
302
303public:
304 explicit Filter(DataHandler &data);
305 virtual ~Filter();
306
307 void performInference();
308};
309
310#endif // INCLUDE_SRC_FILTER_H_
Definition filter.h:15
matrix3D_t marginalise(const matrix6D_t &)
Schur complement-based marginalisation that marginalises a 6x6 matrix into a 3x3 matrix.
Definition filter.cpp:475
matrix3D_t computePseudoInverse(const matrix3D_t &)
Definition filter.cpp:635
matrix6D_t augmentedPrecision_t
Definition filter.h:62
void normaliseAngle(double &)
Normalise an angle between .
Definition filter.cpp:571
Eigen::Matrix< double, total_measurements, 1 > huberMeasurementThresholds_t
Definition filter.h:84
vector3D_t state_t
Definition filter.h:49
Eigen::Matrix< double, 2 *total_states, 1 > vector6D_t
Definition filter.h:41
Eigen::Matrix< double, 2, 1 > vector2D_t
Definition filter.h:39
vector6D_t augmentedInformation_t
Definition filter.h:58
void performInference()
Performs robot state inference using the EKF bayesian inference framework for all robots provided.
Definition filter.cpp:99
std::vector< EstimationParameters > robot_parameters
Houses all estimation parameters for all robots.
Definition filter.h:230
matrix3D_t precision_t
Definition filter.h:61
vector6D_t augmentedState_t
Definition filter.h:50
static const unsigned short total_measurements
The total number of system measurements: range [m] and bearing [rad].
Definition filter.h:31
const huberStateThresholds_t state_thresholds
The thresholds for the huber state cost function.
Definition filter.h:249
Eigen::Matrix< double, total_inputs, total_inputs > processCovariance_t
Definition filter.h:80
virtual ~Filter()
vector2D_t measurement_t
Definition filter.h:65
virtual void prediction(const Robot::Odometry &, EstimationParameters &)=0
matrix6D_t augmentedCovariance_t
Definition filter.h:54
@ ORIENTATION
Definition filter.h:36
@ Y
Definition filter.h:36
@ X
Definition filter.h:36
void motionModel(const Robot::Odometry &, EstimationParameters &, const double)
The unicycle motion model used to perform motion predictions.
Definition filter.cpp:297
measurement_t measurementModel(EstimationParameters &, const EstimationParameters &)
Uses the non-linear measurement model to predict what the measurement from the system would be given ...
Definition filter.cpp:395
Eigen::Matrix< double, total_states, total_states > matrix3D_t
Definition filter.h:45
DataHandler & data_
Data class housing all the data pertaining to cooperative localisation (positioning).
Definition filter.h:97
@ FORWARD_VELOCITY
Definition filter.h:34
@ ANGULAR_VELOCITY
Definition filter.h:34
Eigen::Matrix< double, 2 *total_states, 1 > huberStateThresholds_t
Definition filter.h:89
augmentedCovariance_t createAugmentedMatrix(const covariance_t &, const covariance_t &)
Combines the covariance/precision matrix of the 3 states of the ego vehicle (x,y,orientation),...
Definition filter.cpp:555
Eigen::Matrix< double, total_measurements, total_measurements > huberMeasurementWeights_t
Definition filter.h:87
vector3D_t information_t
Definition filter.h:57
void calculateMotionJacobian(const Robot::Odometry &, EstimationParameters &, const double)
Calculates the Jacobian matrix of the unicycle motion model in terms of the systems states (x,...
Definition filter.cpp:333
static const unsigned short total_inputs
The total number of system inputs: forward velocity [m/s] and angular velocity [rad/s].
Definition filter.h:26
augmentedState_t calculateNormalisedEstimationResidual(const EstimationParameters &)
Calculates the normalised residual of the initial estimate and updated estimate.
Definition filter.cpp:610
Eigen::Matrix< double, total_states, total_inputs > processJacobian_t
Definition filter.h:75
huberMeasurementWeights_t HuberMeasurement(const measurement_t &, const huberMeasurementThresholds_t &)
Huber Measurement cost function,.
Definition filter.cpp:229
augmentedInformation_t createAugmentedVector(const state_t &, const state_t &)
Combines the 3 states of the ego vehicle (x,y,orientation), with the state of the agent measured to c...
Definition filter.cpp:522
const huberMeasurementThresholds_t measurement_thresholds
The thresholds for the huber measurement cost function.
Definition filter.h:241
huberStateWeights_t HuberState(const augmentedState_t &, const huberStateThresholds_t &)
Huber State cost function,.
Definition filter.cpp:256
Eigen::Matrix< double, 2, 2 > matrix2D_t
Definition filter.h:44
measurement_t calculateNormalisedInnovation(const EstimationParameters &)
Calculates the normalised residual of the value produced by the sensor measurement and the prior esti...
Definition filter.cpp:583
Eigen::Matrix< double, total_states, total_states > motionJacobian_t
Definition filter.h:73
Eigen::Matrix< double, 2 *total_states, total_measurements > kalmanGain_t
Definition filter.h:70
matrix3D_t covariance_t
Definition filter.h:53
matrix2D_t measurementCovariance_t
Definition filter.h:66
@ BEARING
Definition filter.h:35
@ RANGE
Definition filter.h:35
Eigen::Matrix< double, total_states, 1 > vector3D_t
Definition filter.h:40
Eigen::Matrix< double, total_measurements, 2 *total_states > measurementJacobian_t
Definition filter.h:78
Eigen::Matrix< double, 2 *total_states, 2 *total_states > huberStateWeights_t
Definition filter.h:91
virtual void correction(EstimationParameters &, const EstimationParameters &)=0
static const unsigned short total_states
The total number of system states: x coordinate [m], y-coordinate [m], and orientation (heading) [rad...
Definition filter.h:21
std::vector< EstimationParameters > landmark_parameters
Houses all estimation parameters for all landmarks.
Definition filter.h:235
void calculateProcessJacobian(EstimationParameters &, const double)
Calculates the Jacobian matrix of the motion model evaluated in terms of the process inputs.
Definition filter.cpp:362
void calculateMeasurementJacobian(EstimationParameters &, const EstimationParameters &)
Jacobian of the measurement model evaluated in terms of the systems states: x,y, and heading.
Definition filter.cpp:444
Eigen::Matrix< double, 2 *total_states, 2 *total_states > matrix6D_t
Definition filter.h:46
Houses the parameters required for performing Bayesian filtering.
Definition filter.h:103
covariance_t error_covariance
Estimation Error Covariance: 3x3 matrix.
Definition filter.h:151
measurement_t measurement
Recieved range and bearing measurement: 2x1 matrix.
Definition filter.h:119
augmentedState_t estimation_residual
The difference between the prior and posterior state estimtes.
Definition filter.h:143
processJacobian_t process_jacobian
Jacobian matrix of the motion model evaluated in terms of the process inputs.
Definition filter.h:196
measurementCovariance_t measurement_noise
Measurement noise covariance matrix: 2x2 matrix.
Definition filter.h:184
precision_t precision_matrix
Precision matrix: 3x3 matrix.
Definition filter.h:224
unsigned short barcode
Definition filter.h:105
state_t information_vector
Information vector: 3x1 matrix.
Definition filter.h:215
kalmanGain_t kalman_gain
Kalman gain: 5x2 matrix.
Definition filter.h:160
measurementJacobian_t measurement_jacobian
Jacobian of the measurement model: 2 x 6 matrix.
Definition filter.h:201
unsigned short id
Definition filter.h:104
state_t state_estimate
Estimated robot state - x coordinate [m], y-coordinate [m], and orientation (heading) [rad]: 3x1 matr...
Definition filter.h:114
measurement_t innovation
The difference between the measurement recieved by the sensor and the predicted measurement based on ...
Definition filter.h:129
motionJacobian_t motion_jacobian
Jacobian matrix of the motion model evaluated in terms of the systems states: x, y and orientation.
Definition filter.h:190
measurementCovariance_t innovation_covariance
Measurement innovation covariance matrix: 2x2 matrix.
Definition filter.h:134
processCovariance_t process_noise
Odometry process noise covariance matrix: 2x2 matrix.
Definition filter.h:173