-
Notifications
You must be signed in to change notification settings - Fork 57
Expand file tree
/
Copy pathukf.h
More file actions
executable file
·161 lines (122 loc) · 3.94 KB
/
ukf.h
File metadata and controls
executable file
·161 lines (122 loc) · 3.94 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
#ifndef UKF_H
#define UKF_H
#include "measurement_package.h"
#include "Eigen/Dense"
#include <vector>
#include <string>
#include <fstream>
#include "tools.h"
using Eigen::MatrixXd;
using Eigen::VectorXd;
class UKF {
public:
// initially set to false, set to true in first call of ProcessMeasurement
bool is_initialized_;
// if this is false, laser measurements will be ignored (except for init)
bool use_laser_;
// if this is false, radar measurements will be ignored (except for init)
bool use_radar_;
// time when the state is true, in us
long long time_us_;
// Process noise standard deviation longitudinal acceleration in m/s^2
double std_a_;
// Process noise standard deviation yaw acceleration in rad/s^2
double std_yawdd_;
// Laser measurement noise standard deviation position1 in m
double std_laspx_;
// Laser measurement noise standard deviation position2 in m
double std_laspy_;
// Radar measurement noise standard deviation radius in m
double std_radr_;
// Radar measurement noise standard deviation angle in rad
double std_radphi_;
// Radar measurement noise standard deviation radius change in m/s
double std_radrd_ ;
// State dimension
int n_x_;
// Augmented state dimension
int n_aug_;
// Number of sigma points
int n_aug_sigma_;
// Sigma point spreading parameter
double lambda_;
// the current NIS for radar
double NIS_radar_;
// the current NIS for laser
double NIS_laser_;
// Weights of sigma points
VectorXd weights_;
// state vector: [pos1 pos2 vel_abs yaw_angle yaw_rate] in SI units and rad
VectorXd x_;
// state covariance matrix
MatrixXd P_;
// predicted sigma points matrix
MatrixXd Xsig_pred_;
// augmented sigma points matrix
MatrixXd Xsig_aug_;
/**
* Constructor
*/
UKF();
/**
* Destructor
*/
virtual ~UKF();
/**
* ProcessMeasurement
* @param meas_package The latest measurement data of either radar or laser
*/
void ProcessMeasurement(MeasurementPackage meas_package);
/**
* Initialize the state, covariance matrix and timestamp using a radar measurement
* @param meas_package The first measurement
*/
void Initialization(MeasurementPackage meas_package);
/**
* Prediction Predicts sigma points, the state, and the state covariance
* matrix
* @param delta_t Time between k and k+1 in s
*/
void Prediction(double delta_t);
/**
* Updates the state and the state covariance matrix using a laser measurement
* @param meas_package The measurement at k+1
*/
void UpdateLidar(MeasurementPackage meas_package);
/**
* Predict either lidar or radar measurement with given Sigma predictions
* @param n_z The measurement dimension
* @param Zsig The matrix for sigma points in measurement space
* @param z_pred The predicted measurement mean
* @param S The measurement covariance matrix
* @param R The measurement noise covariance matrix
*/
void PredictMeasurement(int n_z, const MatrixXd &Zsig, VectorXd &z_pred, MatrixXd &S, MatrixXd &R) ;
/**
* Updates the state and the state covariance matrix using a radar measurement
* @param meas_package The measurement at k+1
*/
void UpdateRadar(MeasurementPackage meas_package);
/**
* Updates the state with either lidar or radar measurement
* @param z The measurement at k+1
* @param z_pred The predictionof measurement at k+1
* @param S The measurement covariance matrix
* @param Zsig The matrix for sigma points in measurement space
*/
void UpdateState(const VectorXd &z, const VectorXd &z_pred, const MatrixXd &S, const MatrixXd &Zsig);
/**
* Calculate augmented sigma points: Xsig_agu_
*/
void AugmentSigmaPoints();
/**
* Predict the sigma points: Xsig_pred_
* @param delta_t Time between k and k+1 in s
*/
void PredictSigmaPoints(double delta_t);
/**
* Predict Mean and Covariance of the predicted state: x_ and P_
*/
void PredictMeanAndCovariance();
};
#endif /* UKF_H */