1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package com.irurueta.navigation.gnss;
17
18 import com.irurueta.algebra.Matrix;
19 import com.irurueta.algebra.WrongSizeException;
20
21
22
23
24
25
26
27
28
29 public class GNSSKalmanInitializer {
30
31
32
33
34
35 private GNSSKalmanInitializer() {
36 }
37
38
39
40
41
42
43
44
45
46
47 public static void initialize(final GNSSEstimation estimation,
48 final GNSSKalmanConfig config,
49 final GNSSKalmanState result) {
50 result.setEstimation(estimation);
51
52 final var initPosUnc = config.getInitialPositionUncertainty();
53 final var initVelUnc = config.getInitialVelocityUncertainty();
54 final var initClockOffsetUnc = config.getInitialClockOffsetUncertainty();
55 final var initClockDriftUnc = config.getInitialClockDriftUncertainty();
56
57 final var initPosUnc2 = initPosUnc * initPosUnc;
58 final var initVelUnc2 = initVelUnc * initVelUnc;
59 final var initClockOffsetUnc2 = initClockOffsetUnc * initClockOffsetUnc;
60 final var initClockDriftUnc2 = initClockDriftUnc * initClockDriftUnc;
61
62 Matrix covariance;
63 try {
64 covariance = new Matrix(GNSSEstimation.NUM_PARAMETERS, GNSSEstimation.NUM_PARAMETERS);
65
66 covariance.setElementAt(0, 0, initPosUnc2);
67 covariance.setElementAt(1, 1, initPosUnc2);
68 covariance.setElementAt(2, 2, initPosUnc2);
69
70 covariance.setElementAt(3, 3, initVelUnc2);
71 covariance.setElementAt(4, 4, initVelUnc2);
72 covariance.setElementAt(5, 5, initVelUnc2);
73
74 covariance.setElementAt(6, 6, initClockOffsetUnc2);
75 covariance.setElementAt(7, 7, initClockDriftUnc2);
76
77 result.setCovariance(covariance);
78
79 } catch (final WrongSizeException ignore) {
80
81 }
82 }
83
84
85
86
87
88
89
90
91
92 public static GNSSKalmanState initialize(final GNSSEstimation estimation, final GNSSKalmanConfig config) {
93 final var result = new GNSSKalmanState();
94 initialize(estimation, config, result);
95 return result;
96 }
97 }