1 /*
2 * Copyright (C) 2019 Alberto Irurueta Carro (alberto@irurueta.com)
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16 package com.irurueta.navigation.inertial;
17
18 import com.irurueta.units.*;
19
20 import java.io.Serial;
21 import java.io.Serializable;
22 import java.util.Objects;
23
24 /**
25 * Contains INS/GNS Tightly Coupled Kalman filter configuration parameters (usually
26 * obtained through calibration) to determine the system noise covariance matrix.
27 */
28 public class INSTightlyCoupledKalmanInitializerConfig implements Serializable, Cloneable {
29
30 /**
31 * Serialization version. This is used to ensure compatibility of deserialization of permanently stored serialized
32 * instances.
33 */
34 @Serial
35 private static final long serialVersionUID = 0L;
36
37 /**
38 * Initial attitude uncertainty per axis expressed in radians (rad).
39 */
40 private double initialAttitudeUncertainty;
41
42 /**
43 * Initial velocity uncertainty per axis expressed in meters per second (m/s).
44 */
45 private double initialVelocityUncertainty;
46
47 /**
48 * Initial position uncertainty per axis expressed in meters (m).
49 */
50 private double initialPositionUncertainty;
51
52 /**
53 * Initial acceleration bias uncertainty expressed in meters per squared second (m/s^2).
54 */
55 private double initialAccelerationBiasUncertainty;
56
57 /**
58 * Initial gyroscope bias uncertainty expressed in radians per second (rad/s).
59 */
60 private double initialGyroscopeBiasUncertainty;
61
62 /**
63 * Initial clock offset uncertainty per axis expressed in meters (m).
64 */
65 private double initialClockOffsetUncertainty;
66
67 /**
68 * Initial clock drift uncertainty per axis expressed in meters per second (m/s).
69 */
70 private double initialClockDriftUncertainty;
71
72 /**
73 * Constructor.
74 */
75 public INSTightlyCoupledKalmanInitializerConfig() {
76 }
77
78 /**
79 * Constructor.
80 *
81 * @param initialAttitudeUncertainty initial attitude uncertainty per axis
82 * expressed in radians (rad).
83 * @param initialVelocityUncertainty initial velocity uncertainty per axis
84 * expressed in meters per second (m/s).
85 * @param initialPositionUncertainty initial position uncertainty per axis
86 * expressed in meters (m).
87 * @param initialAccelerationBiasUncertainty initial acceleration bias uncertainty
88 * expressed in meters per squared second (m/s^2).
89 * @param initialGyroscopeBiasUncertainty initial gyroscope bias uncertainty
90 * expressed in radians per second (rad/s).
91 * @param initialClockOffsetUncertainty initial clock offset uncertainty per axis
92 * expressed in meters (m).
93 * @param initialClockDriftUncertainty initial clock drift uncertainty per axis
94 * expressed in meters per second (m/s).
95 */
96 public INSTightlyCoupledKalmanInitializerConfig(
97 final double initialAttitudeUncertainty, final double initialVelocityUncertainty,
98 final double initialPositionUncertainty, final double initialAccelerationBiasUncertainty,
99 final double initialGyroscopeBiasUncertainty, final double initialClockOffsetUncertainty,
100 final double initialClockDriftUncertainty) {
101 setValues(initialAttitudeUncertainty, initialVelocityUncertainty, initialPositionUncertainty,
102 initialAccelerationBiasUncertainty, initialGyroscopeBiasUncertainty, initialClockOffsetUncertainty,
103 initialClockDriftUncertainty);
104 }
105
106 /**
107 * Constructor.
108 *
109 * @param initialAttitudeUncertainty initial attitude uncertainty per axis.
110 * @param initialVelocityUncertainty initial velocity uncertainty per axis.
111 * @param initialPositionUncertainty initial position uncertainty per axis.
112 * @param initialAccelerationBiasUncertainty initial acceleration bias uncertainty.
113 * @param initialGyroscopeBiasUncertainty initial gyroscope bias uncertainty.
114 * @param initialClockOffsetUncertainty initial clock offset uncertainty per axis.
115 * @param initialClockDriftUncertainty initial clock drift uncertainty per axis.
116 */
117 public INSTightlyCoupledKalmanInitializerConfig(
118 final Angle initialAttitudeUncertainty, final Speed initialVelocityUncertainty,
119 final Distance initialPositionUncertainty, final Acceleration initialAccelerationBiasUncertainty,
120 final AngularSpeed initialGyroscopeBiasUncertainty, final Distance initialClockOffsetUncertainty,
121 final Speed initialClockDriftUncertainty) {
122 setValues(initialAttitudeUncertainty, initialVelocityUncertainty, initialPositionUncertainty,
123 initialAccelerationBiasUncertainty, initialGyroscopeBiasUncertainty, initialClockOffsetUncertainty,
124 initialClockDriftUncertainty);
125 }
126
127 /**
128 * Copy constructor.
129 *
130 * @param input input instance to copy data from.
131 */
132 public INSTightlyCoupledKalmanInitializerConfig(final INSTightlyCoupledKalmanInitializerConfig input) {
133 copyFrom(input);
134 }
135
136 /**
137 * Gets initial attitude uncertainty per axis expressed in radians (rad).
138 *
139 * @return initial attitude uncertainty per axis expressed in radians (rad).
140 */
141 public double getInitialAttitudeUncertainty() {
142 return initialAttitudeUncertainty;
143 }
144
145 /**
146 * Sets initial attitude uncertainty per axis expressed in radians (rad).
147 *
148 * @param initialAttitudeUncertainty initial attitude uncertainty per axis expressed
149 * in radians (rad).
150 */
151 public void setInitialAttitudeUncertainty(final double initialAttitudeUncertainty) {
152 this.initialAttitudeUncertainty = initialAttitudeUncertainty;
153 }
154
155 /**
156 * Gets initial attitude uncertainty per axis.
157 *
158 * @param result instance where initial attitude uncertainty per axis will be stored.
159 */
160 public void getInitialAttitudeUncertaintyAngle(final Angle result) {
161 result.setValue(initialAttitudeUncertainty);
162 result.setUnit(AngleUnit.RADIANS);
163 }
164
165 /**
166 * Gets initial attitude uncertainty per axis.
167 *
168 * @return initial attitude uncertainty per axis.
169 */
170 public Angle getInitialAttitudeUncertaintyAngle() {
171 return new Angle(initialAttitudeUncertainty, AngleUnit.RADIANS);
172 }
173
174 /**
175 * Sets initial attitude uncertainty per axis.
176 *
177 * @param initialAttitudeUncertainty initial attitude uncertainty per axis.
178 */
179 public void setInitialAttitudeUncertainty(final Angle initialAttitudeUncertainty) {
180 this.initialAttitudeUncertainty = AngleConverter.convert(initialAttitudeUncertainty.getValue().doubleValue(),
181 initialAttitudeUncertainty.getUnit(), AngleUnit.RADIANS);
182 }
183
184 /**
185 * Gets initial velocity uncertainty per axis expressed in meters per second (m/s).
186 *
187 * @return initial velocity uncertainty per axis expressed in meters per second (m/s).
188 */
189 public double getInitialVelocityUncertainty() {
190 return initialVelocityUncertainty;
191 }
192
193 /**
194 * Sets initial velocity uncertainty per axis expressed in meters per second (m/s).
195 *
196 * @param initialVelocityUncertainty initial velocity uncertainty per axis expressed
197 * in meters per second (m/s).
198 */
199 public void setInitialVelocityUncertainty(final double initialVelocityUncertainty) {
200 this.initialVelocityUncertainty = initialVelocityUncertainty;
201 }
202
203 /**
204 * Gets initial velocity uncertainty per axis.
205 *
206 * @param result instance where initial attitude uncertainty per axis will be stored.
207 */
208 public void getInitialVelocityUncertaintySpeed(final Speed result) {
209 result.setValue(initialVelocityUncertainty);
210 result.setUnit(SpeedUnit.METERS_PER_SECOND);
211 }
212
213 /**
214 * Gets initial velocity uncertainty per axis.
215 *
216 * @return initial velocity uncertainty per axis.
217 */
218 public Speed getInitialVelocityUncertaintySpeed() {
219 return new Speed(initialVelocityUncertainty, SpeedUnit.METERS_PER_SECOND);
220 }
221
222 /**
223 * Sets initial velocity uncertainty per axis.
224 *
225 * @param initialVelocityUncertainty initial velocity uncertainty per axis.
226 */
227 public void setInitialVelocityUncertainty(final Speed initialVelocityUncertainty) {
228 this.initialVelocityUncertainty = SpeedConverter.convert(
229 initialVelocityUncertainty.getValue().doubleValue(), initialVelocityUncertainty.getUnit(),
230 SpeedUnit.METERS_PER_SECOND);
231 }
232
233 /**
234 * Gets initial position uncertainty per axis expressed in meters (m)
235 *
236 * @return initial position uncertainty per axis expressed in meters (m).
237 */
238 public double getInitialPositionUncertainty() {
239 return initialPositionUncertainty;
240 }
241
242 /**
243 * Sets initial position uncertainty per axis expressed in meters (m)
244 *
245 * @param initialPositionUncertainty initial position uncertainty per axis expressed
246 * in meters (m).
247 */
248 public void setInitialPositionUncertainty(final double initialPositionUncertainty) {
249 this.initialPositionUncertainty = initialPositionUncertainty;
250 }
251
252 /**
253 * Gets initial position uncertainty per axis.
254 *
255 * @param result instance where initial position uncertainty per axis will be stored.
256 */
257 public void getInitialPositionUncertaintyDistance(final Distance result) {
258 result.setValue(initialPositionUncertainty);
259 result.setUnit(DistanceUnit.METER);
260 }
261
262 /**
263 * Gets initial position uncertainty per axis.
264 *
265 * @return initial position uncertainty per axis.
266 */
267 public Distance getInitialPositionUncertaintyDistance() {
268 return new Distance(initialPositionUncertainty, DistanceUnit.METER);
269 }
270
271 /**
272 * Sets initial position uncertainty per axis.
273 *
274 * @param initialPositionUncertainty initial position uncertainty per axis.
275 */
276 public void setInitialPositionUncertainty(final Distance initialPositionUncertainty) {
277 this.initialPositionUncertainty = DistanceConverter.convert(initialPositionUncertainty.getValue().doubleValue(),
278 initialPositionUncertainty.getUnit(), DistanceUnit.METER);
279 }
280
281 /**
282 * Gets initial acceleration bias uncertainty expressed in meters per squared second (m/s^2).
283 *
284 * @return initial acceleration bias uncertainty expressed in meters per squared second (m/s^2).
285 */
286 public double getInitialAccelerationBiasUncertainty() {
287 return initialAccelerationBiasUncertainty;
288 }
289
290 /**
291 * Sets initial acceleration bias uncertainty expressed in meters per squared second (m/s^2).
292 *
293 * @param initialAccelerationBiasUncertainty initial acceleration bias uncertainty expressed in
294 * meters per squared second (m/s^2).
295 */
296 public void setInitialAccelerationBiasUncertainty(final double initialAccelerationBiasUncertainty) {
297 this.initialAccelerationBiasUncertainty = initialAccelerationBiasUncertainty;
298 }
299
300 /**
301 * Gets initial acceleration bias uncertainty.
302 *
303 * @param result instance where initial acceleration bias uncertainty will be stored.
304 */
305 public void getInitialAccelerationBiasUncertaintyAcceleration(final Acceleration result) {
306 result.setValue(initialAccelerationBiasUncertainty);
307 result.setUnit(AccelerationUnit.METERS_PER_SQUARED_SECOND);
308 }
309
310 /**
311 * Gets initial acceleration bias uncertainty.
312 *
313 * @return initial acceleration bias uncertainty.
314 */
315 public Acceleration getInitialAccelerationBiasUncertaintyAcceleration() {
316 return new Acceleration(initialAccelerationBiasUncertainty, AccelerationUnit.METERS_PER_SQUARED_SECOND);
317 }
318
319 /**
320 * Sets initial acceleration bias uncertainty.
321 *
322 * @param initialAccelerationUncertainty initial acceleration bias uncertainty.
323 */
324 public void setInitialAccelerationBiasUncertainty(final Acceleration initialAccelerationUncertainty) {
325 initialAccelerationBiasUncertainty = AccelerationConverter.convert(
326 initialAccelerationUncertainty.getValue().doubleValue(), initialAccelerationUncertainty.getUnit(),
327 AccelerationUnit.METERS_PER_SQUARED_SECOND);
328 }
329
330 /**
331 * Gets initial gyroscope bias uncertainty expressed in radians per second (rad/s).
332 *
333 * @return initial gyroscope bias uncertainty expressed in radians per second (rad/s).
334 */
335 public double getInitialGyroscopeBiasUncertainty() {
336 return initialGyroscopeBiasUncertainty;
337 }
338
339 /**
340 * Sets initial gyroscope bias uncertainty expressed in radians per second (rad/s).
341 *
342 * @param initialGyroscopeBiasUncertainty initial gyroscope bias uncertainty expressed
343 * in radians per second (rad/s).
344 */
345 public void setInitialGyroscopeBiasUncertainty(final double initialGyroscopeBiasUncertainty) {
346 this.initialGyroscopeBiasUncertainty = initialGyroscopeBiasUncertainty;
347 }
348
349 /**
350 * Gets initial gyroscope bias uncertainty.
351 *
352 * @param result instance where initial gyroscope bias uncertainty will be stored.
353 */
354 public void getInitialGyroscopeBiasUncertaintyAngularSpeed(final AngularSpeed result) {
355 result.setValue(initialGyroscopeBiasUncertainty);
356 result.setUnit(AngularSpeedUnit.RADIANS_PER_SECOND);
357 }
358
359 /**
360 * Gets initial gyroscope bias uncertainty.
361 *
362 * @return initial gyroscope bias uncertainty.
363 */
364 public AngularSpeed getInitialGyroscopeBiasUncertaintyAngularSpeed() {
365 return new AngularSpeed(initialGyroscopeBiasUncertainty, AngularSpeedUnit.RADIANS_PER_SECOND);
366 }
367
368 /**
369 * Sets initial gyroscope bias uncertainty.
370 *
371 * @param initialGyroscopeBiasUncertainty initial gyroscope bias uncertainty.
372 */
373 public void setInitialGyroscopeBiasUncertainty(final AngularSpeed initialGyroscopeBiasUncertainty) {
374 this.initialGyroscopeBiasUncertainty = AngularSpeedConverter.convert(
375 initialGyroscopeBiasUncertainty.getValue().doubleValue(), initialGyroscopeBiasUncertainty.getUnit(),
376 AngularSpeedUnit.RADIANS_PER_SECOND);
377 }
378
379 /**
380 * Gets initial clock offset uncertainty per axis expressed in meters (m).
381 *
382 * @return initial clock offset uncertainty per axis expressed in meters (m).
383 */
384 public double getInitialClockOffsetUncertainty() {
385 return initialClockOffsetUncertainty;
386 }
387
388 /**
389 * Sets initial clock offset uncertainty per axis expressed in meters (m).
390 *
391 * @param initialClockOffsetUncertainty initial clock offset uncertainty per
392 * axis expressed in meters (m).
393 */
394 public void setInitialClockOffsetUncertainty(final double initialClockOffsetUncertainty) {
395 this.initialClockOffsetUncertainty = initialClockOffsetUncertainty;
396 }
397
398 /**
399 * Gets initial clock offset uncertainty per axis.
400 *
401 * @param result instance where initial clock offset uncertainty per axis will be stored.
402 */
403 public void getInitialClockOffsetUncertaintyDistance(final Distance result) {
404 result.setValue(initialClockOffsetUncertainty);
405 result.setUnit(DistanceUnit.METER);
406 }
407
408 /**
409 * Gets initial clock offset uncertainty per axis.
410 *
411 * @return initial clock offset uncertainty per axis.
412 */
413 public Distance getInitialClockOffsetUncertaintyDistance() {
414 return new Distance(initialClockOffsetUncertainty, DistanceUnit.METER);
415 }
416
417 /**
418 * Sets initial clock offset uncertainty per axis.
419 *
420 * @param initialClockOffsetUncertainty initial clock offset uncertainty per axis.
421 */
422 public void setInitialClockOffsetUncertainty(final Distance initialClockOffsetUncertainty) {
423 this.initialClockOffsetUncertainty = DistanceConverter.convert(
424 initialClockOffsetUncertainty.getValue().doubleValue(), initialClockOffsetUncertainty.getUnit(),
425 DistanceUnit.METER);
426 }
427
428 /**
429 * Gets initial clock drift uncertainty per axis expressed in meters per second (m/s).
430 *
431 * @return initial clock drift uncertainty per axis expressed in meters per second (m/s).
432 */
433 public double getInitialClockDriftUncertainty() {
434 return initialClockDriftUncertainty;
435 }
436
437 /**
438 * Sets initial clock drift uncertainty per axis expressed in meters per second (m/s).
439 *
440 * @param initialClockDriftUncertainty initial clock drift uncertainty per axis expressed
441 * in meters per second (m/s).
442 */
443 public void setInitialClockDriftUncertainty(final double initialClockDriftUncertainty) {
444 this.initialClockDriftUncertainty = initialClockDriftUncertainty;
445 }
446
447 /**
448 * Gets initial clock drift uncertainty per axis.
449 *
450 * @param result instance where initial clock drift uncertainty per axis will be stored.
451 */
452 public void getInitialClockDriftUncertaintySpeed(final Speed result) {
453 result.setValue(initialClockDriftUncertainty);
454 result.setUnit(SpeedUnit.METERS_PER_SECOND);
455 }
456
457 /**
458 * Gets initial clock drift uncertainty per axis.
459 *
460 * @return initial clock drift uncertainty per axis.
461 */
462 public Speed getInitialClockDriftUncertaintySpeed() {
463 return new Speed(initialClockDriftUncertainty, SpeedUnit.METERS_PER_SECOND);
464 }
465
466 /**
467 * Sets initial clock drift uncertainty per axis.
468 *
469 * @param initialClockDriftUncertainty initial clock drift uncertainty per axis.
470 */
471 public void setInitialClockDriftUncertainty(final Speed initialClockDriftUncertainty) {
472 this.initialClockDriftUncertainty = SpeedConverter.convert(
473 initialClockDriftUncertainty.getValue().doubleValue(),
474 initialClockDriftUncertainty.getUnit(),
475 SpeedUnit.METERS_PER_SECOND);
476 }
477
478 /**
479 * Sets configuration parameters.
480 *
481 * @param initialAttitudeUncertainty initial attitude uncertainty per axis
482 * expressed in radians (rad).
483 * @param initialVelocityUncertainty initial velocity uncertainty per axis
484 * expressed in meters per second (m/s).
485 * @param initialPositionUncertainty initial position uncertainty per axis
486 * expressed in meters (m).
487 * @param initialAccelerationBiasUncertainty initial acceleration bias uncertainty
488 * expressed in meters per squared second (m/s^2).
489 * @param initialGyroscopeBiasUncertainty initial gyroscope bias uncertainty
490 * expressed in radians per second (rad/s).
491 * @param initialClockOffsetUncertainty initial clock offset uncertainty per axis
492 * expressed in meters (m).
493 * @param initialClockDriftUncertainty initial clock drift uncertainty per axis
494 * expressed in meters per second (m/s).
495 */
496 public void setValues(
497 final double initialAttitudeUncertainty, final double initialVelocityUncertainty,
498 final double initialPositionUncertainty, final double initialAccelerationBiasUncertainty,
499 final double initialGyroscopeBiasUncertainty, final double initialClockOffsetUncertainty,
500 final double initialClockDriftUncertainty) {
501 this.initialAttitudeUncertainty = initialAttitudeUncertainty;
502 this.initialVelocityUncertainty = initialVelocityUncertainty;
503 this.initialPositionUncertainty = initialPositionUncertainty;
504 this.initialAccelerationBiasUncertainty = initialAccelerationBiasUncertainty;
505 this.initialGyroscopeBiasUncertainty = initialGyroscopeBiasUncertainty;
506 this.initialClockOffsetUncertainty = initialClockOffsetUncertainty;
507 this.initialClockDriftUncertainty = initialClockDriftUncertainty;
508 }
509
510 /**
511 * Sets configuration parameters.
512 *
513 * @param initialAttitudeUncertainty initial attitude uncertainty per axis.
514 * @param initialVelocityUncertainty initial velocity uncertainty per axis.
515 * @param initialPositionUncertainty initial position uncertainty per axis.
516 * @param initialAccelerationBiasUncertainty initial acceleration bias uncertainty.
517 * @param initialGyroscopeBiasUncertainty initial gyroscope bias uncertainty.
518 * @param initialClockOffsetUncertainty initial clock offset uncertainty per axis.
519 * @param initialClockDriftUncertainty initial clock drift uncertainty per axis.
520 */
521 public void setValues(
522 final Angle initialAttitudeUncertainty, final Speed initialVelocityUncertainty,
523 final Distance initialPositionUncertainty, final Acceleration initialAccelerationBiasUncertainty,
524 final AngularSpeed initialGyroscopeBiasUncertainty, final Distance initialClockOffsetUncertainty,
525 final Speed initialClockDriftUncertainty) {
526 setInitialAttitudeUncertainty(initialAttitudeUncertainty);
527 setInitialVelocityUncertainty(initialVelocityUncertainty);
528 setInitialPositionUncertainty(initialPositionUncertainty);
529 setInitialAccelerationBiasUncertainty(initialAccelerationBiasUncertainty);
530 setInitialGyroscopeBiasUncertainty(initialGyroscopeBiasUncertainty);
531 setInitialClockOffsetUncertainty(initialClockOffsetUncertainty);
532 setInitialClockDriftUncertainty(initialClockDriftUncertainty);
533 }
534
535 /**
536 * Copies this instance data into provided instance.
537 *
538 * @param output destination instance where data will be copied to.
539 */
540 public void copyTo(final INSTightlyCoupledKalmanInitializerConfig output) {
541 output.initialAttitudeUncertainty = initialAttitudeUncertainty;
542 output.initialVelocityUncertainty = initialVelocityUncertainty;
543 output.initialPositionUncertainty = initialPositionUncertainty;
544 output.initialAccelerationBiasUncertainty = initialAccelerationBiasUncertainty;
545 output.initialGyroscopeBiasUncertainty = initialGyroscopeBiasUncertainty;
546 output.initialClockOffsetUncertainty = initialClockOffsetUncertainty;
547 output.initialClockDriftUncertainty = initialClockDriftUncertainty;
548 }
549
550 /**
551 * Copies data of provided instance into this instance.
552 *
553 * @param input instance to copy data from.
554 */
555 public void copyFrom(final INSTightlyCoupledKalmanInitializerConfig input) {
556 initialAttitudeUncertainty = input.initialAttitudeUncertainty;
557 initialVelocityUncertainty = input.initialVelocityUncertainty;
558 initialPositionUncertainty = input.initialPositionUncertainty;
559 initialAccelerationBiasUncertainty = input.initialAccelerationBiasUncertainty;
560 initialGyroscopeBiasUncertainty = input.initialGyroscopeBiasUncertainty;
561 initialClockOffsetUncertainty = input.initialClockOffsetUncertainty;
562 initialClockDriftUncertainty = input.initialClockDriftUncertainty;
563 }
564
565 /**
566 * Computes and returns hash code for this instance. Hash codes are almost unique
567 * values that are useful for fast classification and storage of objects in collections.
568 *
569 * @return Hash code.
570 */
571 @Override
572 public int hashCode() {
573 return Objects.hash(initialAttitudeUncertainty, initialVelocityUncertainty,
574 initialPositionUncertainty, initialAccelerationBiasUncertainty,
575 initialGyroscopeBiasUncertainty, initialClockOffsetUncertainty,
576 initialClockDriftUncertainty);
577 }
578
579 /**
580 * Checks if provided instance has exactly the same contents as this instance.
581 *
582 * @param obj instance to be compared.
583 * @return true if both instances are considered to be equal, false otherwise.
584 */
585 @Override
586 public boolean equals(final Object obj) {
587 if (this == obj) {
588 return true;
589 }
590 if (obj == null || getClass() != obj.getClass()) {
591 return false;
592 }
593 final var other = (INSTightlyCoupledKalmanInitializerConfig) obj;
594 return equals(other);
595 }
596
597 /**
598 * Checks if provided instance has exactly the same contents as this instance.
599 *
600 * @param other instance to be compared.
601 * @return true if both instances are considered to be equal, false otherwise.
602 */
603 public boolean equals(final INSTightlyCoupledKalmanInitializerConfig other) {
604 return equals(other, 0.0);
605 }
606
607 /**
608 * Checks if provided instance has contents similar to this instance up to provided
609 * threshold value.
610 *
611 * @param other instance to be compared.
612 * @param threshold maximum difference allowed for values.
613 * @return true if both instances are considered to be equal (up to provided threshold),
614 * false otherwise.
615 */
616 public boolean equals(final INSTightlyCoupledKalmanInitializerConfig other, final double threshold) {
617 if (other == null) {
618 return false;
619 }
620
621 return Math.abs(initialAttitudeUncertainty - other.initialAttitudeUncertainty) <= threshold
622 && Math.abs(initialVelocityUncertainty - other.initialVelocityUncertainty) <= threshold
623 && Math.abs(initialPositionUncertainty - other.initialPositionUncertainty) <= threshold
624 && Math.abs(initialAccelerationBiasUncertainty - other.initialAccelerationBiasUncertainty) <= threshold
625 && Math.abs(initialGyroscopeBiasUncertainty - other.initialGyroscopeBiasUncertainty) <= threshold
626 && Math.abs(initialClockOffsetUncertainty - other.initialClockOffsetUncertainty) <= threshold
627 && Math.abs(initialClockDriftUncertainty - other.initialClockDriftUncertainty) <= threshold;
628 }
629
630 /**
631 * Makes a copy of this instance.
632 *
633 * @return a copy of this instance.
634 * @throws CloneNotSupportedException if clone fails for some reason.
635 */
636 @Override
637 protected Object clone() throws CloneNotSupportedException {
638 final var result = (INSTightlyCoupledKalmanInitializerConfig) super.clone();
639 copyTo(result);
640 return result;
641 }
642 }