1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package com.irurueta.navigation.inertial;
17
18 import com.irurueta.algebra.Matrix;
19 import com.irurueta.algebra.WrongSizeException;
20
21
22
23
24
25
26
27
28
29
30 public class INSTightlyCoupledKalmanInitializer {
31
32
33
34
35 public static final int NUM_PARAMS = 17;
36
37
38
39
40
41 private INSTightlyCoupledKalmanInitializer() {
42 }
43
44
45
46
47
48
49
50
51 @SuppressWarnings("DuplicatedCode")
52 public static void initialize(final INSTightlyCoupledKalmanInitializerConfig config, final Matrix result) {
53 if (result.getRows() != NUM_PARAMS || result.getColumns() != NUM_PARAMS) {
54 try {
55 result.resize(NUM_PARAMS, NUM_PARAMS);
56 } catch (final WrongSizeException ignore) {
57
58 }
59 }
60
61 final var initAttUnc = config.getInitialAttitudeUncertainty();
62 final var initVelUnc = config.getInitialVelocityUncertainty();
63 final var initPosUnc = config.getInitialPositionUncertainty();
64 final var initBaUnc = config.getInitialAccelerationBiasUncertainty();
65 final var initBgUnc = config.getInitialGyroscopeBiasUncertainty();
66 final var initClockOffset = config.getInitialClockOffsetUncertainty();
67 final var initClockDrift = config.getInitialClockDriftUncertainty();
68
69 final var initAttUnc2 = initAttUnc * initAttUnc;
70 final var initVelUnc2 = initVelUnc * initVelUnc;
71 final var initPosUnc2 = initPosUnc * initPosUnc;
72 final var initBaUnc2 = initBaUnc * initBaUnc;
73 final var initBgUnc2 = initBgUnc * initBgUnc;
74 final var initClockOffset2 = initClockOffset * initClockOffset;
75 final var initClockDrift2 = initClockDrift * initClockDrift;
76
77 result.initialize(0.0);
78
79 for (var i = 0; i < 3; i++) {
80 result.setElementAt(i, i, initAttUnc2);
81 }
82 for (var i = 3; i < 6; i++) {
83 result.setElementAt(i, i, initVelUnc2);
84 }
85 for (var i = 6; i < 9; i++) {
86 result.setElementAt(i, i, initPosUnc2);
87 }
88 for (var i = 9; i < 12; i++) {
89 result.setElementAt(i, i, initBaUnc2);
90 }
91 for (var i = 12; i < 15; i++) {
92 result.setElementAt(i, i, initBgUnc2);
93 }
94 result.setElementAt(15, 15, initClockOffset2);
95 result.setElementAt(16, 16, initClockDrift2);
96 }
97
98
99
100
101
102
103
104 public static Matrix initialize(final INSTightlyCoupledKalmanInitializerConfig config) {
105 Matrix result = null;
106 try {
107 result = new Matrix(NUM_PARAMS, NUM_PARAMS);
108 initialize(config, result);
109 } catch (final WrongSizeException ignore) {
110
111 }
112
113 return result;
114 }
115 }