1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package com.irurueta.navigation.inertial.calibration;
17
18 import com.irurueta.navigation.NotReadyException;
19 import com.irurueta.navigation.inertial.INSLooselyCoupledKalmanConfig;
20 import com.irurueta.navigation.inertial.calibration.generators.AccelerometerAndGyroscopeMeasurementsGenerator;
21 import com.irurueta.navigation.inertial.calibration.generators.AccelerometerGyroscopeAndMagnetometerMeasurementsGenerator;
22 import com.irurueta.navigation.inertial.calibration.intervals.thresholdfactor.AccelerometerAndGyroscopeIntervalDetectorThresholdFactorOptimizer;
23 import com.irurueta.navigation.inertial.calibration.intervals.thresholdfactor.AccelerometerGyroscopeAndMagnetometerIntervalDetectorThresholdFactorOptimizer;
24
25
26
27
28
29
30
31
32 public class INSLooselyCoupledKalmanConfigCreator {
33
34
35
36
37 private AccelerometerNoiseRootPsdSource accelerometerNoiseRootPsdSource;
38
39
40
41
42 private GyroscopeNoiseRootPsdSource gyroscopeNoiseRootPsdSource;
43
44
45
46
47 private AccelerometerBiasRandomWalkSource accelerometerBiasRandomWalkSource;
48
49
50
51
52 private GyroscopeBiasRandomWalkSource gyroscopeBiasRandomWalkSource;
53
54
55
56
57 private PositionNoiseStandardDeviationSource positionNoiseStandardDeviationSource;
58
59
60
61
62 private VelocityNoiseStandardDeviationSource velocityNoiseStandardDeviationSource;
63
64
65
66
67 public INSLooselyCoupledKalmanConfigCreator() {
68 }
69
70
71
72
73
74
75
76
77
78
79
80 public INSLooselyCoupledKalmanConfigCreator(
81 final AccelerometerNoiseRootPsdSource accelerometerNoiseRootPsdSource,
82 final GyroscopeNoiseRootPsdSource gyroscopeNoiseRootPsdSource,
83 final AccelerometerBiasRandomWalkSource accelerometerBiasRandomWalkSource,
84 final GyroscopeBiasRandomWalkSource gyroscopeBiasRandomWalkSource,
85 final PositionNoiseStandardDeviationSource positionNoiseStandardDeviationSource,
86 final VelocityNoiseStandardDeviationSource velocityNoiseStandardDeviationSource) {
87 this.accelerometerNoiseRootPsdSource = accelerometerNoiseRootPsdSource;
88 this.gyroscopeNoiseRootPsdSource = gyroscopeNoiseRootPsdSource;
89 this.accelerometerBiasRandomWalkSource = accelerometerBiasRandomWalkSource;
90 this.gyroscopeBiasRandomWalkSource = gyroscopeBiasRandomWalkSource;
91 this.positionNoiseStandardDeviationSource = positionNoiseStandardDeviationSource;
92 this.velocityNoiseStandardDeviationSource = velocityNoiseStandardDeviationSource;
93 }
94
95
96
97
98
99
100
101
102 public INSLooselyCoupledKalmanConfigCreator(
103 final AccelerometerAndGyroscopeMeasurementsGenerator generator,
104 final RandomWalkEstimator randomWalkEstimator) {
105 this(generator, generator, randomWalkEstimator, randomWalkEstimator, randomWalkEstimator, randomWalkEstimator);
106 }
107
108
109
110
111
112
113
114
115 public INSLooselyCoupledKalmanConfigCreator(
116 final AccelerometerGyroscopeAndMagnetometerMeasurementsGenerator generator,
117 final RandomWalkEstimator randomWalkEstimator) {
118 this(generator, generator, randomWalkEstimator, randomWalkEstimator, randomWalkEstimator, randomWalkEstimator);
119 }
120
121
122
123
124
125
126
127
128 public INSLooselyCoupledKalmanConfigCreator(
129 final AccelerometerAndGyroscopeIntervalDetectorThresholdFactorOptimizer optimizer,
130 final RandomWalkEstimator randomWalkEstimator) {
131 this(optimizer, optimizer, randomWalkEstimator, randomWalkEstimator, randomWalkEstimator, randomWalkEstimator);
132 }
133
134
135
136
137
138
139
140
141 public INSLooselyCoupledKalmanConfigCreator(
142 final AccelerometerGyroscopeAndMagnetometerIntervalDetectorThresholdFactorOptimizer optimizer,
143 final RandomWalkEstimator randomWalkEstimator) {
144 this(optimizer, optimizer, randomWalkEstimator, randomWalkEstimator, randomWalkEstimator, randomWalkEstimator);
145 }
146
147
148
149
150
151
152 public AccelerometerNoiseRootPsdSource getAccelerometerNoiseRootPsdSource() {
153 return accelerometerNoiseRootPsdSource;
154 }
155
156
157
158
159
160
161
162 public void setAccelerometerNoiseRootPsdSource(
163 final AccelerometerNoiseRootPsdSource accelerometerNoiseRootPsdSource) {
164 this.accelerometerNoiseRootPsdSource = accelerometerNoiseRootPsdSource;
165 }
166
167
168
169
170
171
172 public GyroscopeNoiseRootPsdSource getGyroscopeNoiseRootPsdSource() {
173 return gyroscopeNoiseRootPsdSource;
174 }
175
176
177
178
179
180
181
182 public void sstGyroscopeNoiseRootPsdSource(final GyroscopeNoiseRootPsdSource gyroscopeNoiseRootPsdSource) {
183 this.gyroscopeNoiseRootPsdSource = gyroscopeNoiseRootPsdSource;
184 }
185
186
187
188
189
190
191 public AccelerometerBiasRandomWalkSource getAccelerometerBiasRandomWalkSource() {
192 return accelerometerBiasRandomWalkSource;
193 }
194
195
196
197
198
199
200
201 public void setAccelerometerBiasRandomWalkSource(
202 final AccelerometerBiasRandomWalkSource accelerometerBiasRandomWalkSource) {
203 this.accelerometerBiasRandomWalkSource = accelerometerBiasRandomWalkSource;
204 }
205
206
207
208
209
210
211 public GyroscopeBiasRandomWalkSource getGyroscopeBiasRandomWalkSource() {
212 return gyroscopeBiasRandomWalkSource;
213 }
214
215
216
217
218
219
220
221 public void setGyroscopeBiasRandomWalkSource(final GyroscopeBiasRandomWalkSource gyroscopeBiasRandomWalkSource) {
222 this.gyroscopeBiasRandomWalkSource = gyroscopeBiasRandomWalkSource;
223 }
224
225
226
227
228
229
230 public PositionNoiseStandardDeviationSource getPositionNoiseStandardDeviationSource() {
231 return positionNoiseStandardDeviationSource;
232 }
233
234
235
236
237
238
239
240 public void setPositionNoiseStandardDeviationSource(
241 final PositionNoiseStandardDeviationSource positionUncertaintySource) {
242 positionNoiseStandardDeviationSource = positionUncertaintySource;
243 }
244
245
246
247
248
249
250 public VelocityNoiseStandardDeviationSource getVelocityNoiseStandardDeviationSource() {
251 return velocityNoiseStandardDeviationSource;
252 }
253
254
255
256
257
258
259
260 public void setVelocityNoiseStandardDeviationSource(
261 final VelocityNoiseStandardDeviationSource velocityUncertaintySource) {
262 velocityNoiseStandardDeviationSource = velocityUncertaintySource;
263 }
264
265
266
267
268
269
270
271 public boolean isReady() {
272 return accelerometerNoiseRootPsdSource != null
273 && gyroscopeNoiseRootPsdSource != null
274 && accelerometerBiasRandomWalkSource != null
275 && gyroscopeBiasRandomWalkSource != null
276 && positionNoiseStandardDeviationSource != null
277 && velocityNoiseStandardDeviationSource != null;
278 }
279
280
281
282
283
284
285
286
287 public INSLooselyCoupledKalmanConfig create() throws NotReadyException {
288 if (!isReady()) {
289 throw new NotReadyException();
290 }
291
292 final var gyroNoisePsd = Math.pow(gyroscopeNoiseRootPsdSource.getGyroscopeBaseNoiseLevelRootPsd(), 2.0);
293 final var accelNoisePsd = Math.pow(accelerometerNoiseRootPsdSource.getAccelerometerBaseNoiseLevelRootPsd(),
294 2.0);
295 final var accelRandomWalkBiasPsd = accelerometerBiasRandomWalkSource.getAccelerometerBiasPSD();
296 final var gyroRandomWalkBiasPsd = gyroscopeBiasRandomWalkSource.getGyroBiasPSD();
297 final var positionNoiseSd = positionNoiseStandardDeviationSource.getPositionNoiseStandardDeviation();
298 final var velocityNoiseSd = velocityNoiseStandardDeviationSource.getVelocityNoiseStandardDeviation();
299 return new INSLooselyCoupledKalmanConfig(gyroNoisePsd, accelNoisePsd, accelRandomWalkBiasPsd,
300 gyroRandomWalkBiasPsd, positionNoiseSd, velocityNoiseSd);
301 }
302 }