1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.estimation.measurements.modifiers;
18
19 import java.util.List;
20
21 import org.hipparchus.geometry.euclidean.threed.Vector3D;
22 import org.hipparchus.stat.descriptive.DescriptiveStatistics;
23 import org.junit.Assert;
24 import org.junit.Test;
25 import org.orekit.attitudes.LofOffset;
26 import org.orekit.estimation.Context;
27 import org.orekit.estimation.EstimationTestUtils;
28 import org.orekit.estimation.measurements.EstimatedMeasurement;
29 import org.orekit.estimation.measurements.EstimationModifier;
30 import org.orekit.estimation.measurements.ObservedMeasurement;
31 import org.orekit.estimation.measurements.gnss.OneWayGNSSRange;
32 import org.orekit.estimation.measurements.gnss.OneWayGNSSRangeCreator;
33 import org.orekit.frames.LOFType;
34 import org.orekit.orbits.CartesianOrbit;
35 import org.orekit.orbits.Orbit;
36 import org.orekit.orbits.OrbitType;
37 import org.orekit.orbits.PositionAngle;
38 import org.orekit.propagation.BoundedPropagator;
39 import org.orekit.propagation.EphemerisGenerator;
40 import org.orekit.propagation.Propagator;
41 import org.orekit.propagation.SpacecraftState;
42 import org.orekit.propagation.conversion.NumericalPropagatorBuilder;
43 import org.orekit.utils.TimeStampedPVCoordinates;
44
45 public class ShapiroOneWayGNSSRangeModifierTest {
46
47 @Test
48 public void testShapiro() {
49 doTestShapiro(0.000047764, 0.000086953, 0.000164659);
50 }
51
52 private void doTestShapiro(final double expectedMin, final double expectedMean, final double expectedMax) {
53
54 Context context = EstimationTestUtils.eccentricContext("regular-data:potential:tides");
55
56 final NumericalPropagatorBuilder propagatorBuilder =
57 context.createBuilder(OrbitType.KEPLERIAN, PositionAngle.TRUE, true,
58 1.0e-6, 60.0, 0.001);
59 propagatorBuilder.setAttitudeProvider(new LofOffset(propagatorBuilder.getFrame(), LOFType.LVLH));
60
61
62 final TimeStampedPVCoordinates original = context.initialOrbit.getPVCoordinates();
63 final Orbit closeOrbit = new CartesianOrbit(new TimeStampedPVCoordinates(context.initialOrbit.getDate(),
64 original.getPosition().add(new Vector3D(1000, 2000, 3000)),
65 original.getVelocity().add(new Vector3D(-0.03, 0.01, 0.02))),
66 context.initialOrbit.getFrame(),
67 context.initialOrbit.getMu());
68 final Propagator closePropagator = EstimationTestUtils.createPropagator(closeOrbit,
69 propagatorBuilder);
70 final EphemerisGenerator generator = closePropagator.getEphemerisGenerator();
71 closePropagator.propagate(context.initialOrbit.getDate().shiftedBy(3.5 * closeOrbit.getKeplerianPeriod()));
72 final BoundedPropagator ephemeris = generator.getGeneratedEphemeris();
73 final Propagator p1 = EstimationTestUtils.createPropagator(context.initialOrbit,
74 propagatorBuilder);
75 final double localClockOffset = 0.137e-6;
76 final double remoteClockOffset = 469.0e-6;
77 List<ObservedMeasurement<?>> measurements =
78 EstimationTestUtils.createMeasurements(p1,
79 new OneWayGNSSRangeCreator(ephemeris,
80 localClockOffset,
81 remoteClockOffset,
82 Vector3D.ZERO,
83 Vector3D.ZERO),
84 1.0, 3.0, 300.0);
85
86 final ShapiroOneWayGNSSRangeModifier modifier = new ShapiroOneWayGNSSRangeModifier(context.initialOrbit.getMu());
87 final Propagator p3 = EstimationTestUtils.createPropagator(context.initialOrbit,
88 propagatorBuilder);
89 DescriptiveStatistics stat = new DescriptiveStatistics();
90 for (int i = 0; i < measurements.size(); ++i) {
91 OneWayGNSSRange sr = (OneWayGNSSRange) measurements.get(i);
92 SpacecraftState[] states = new SpacecraftState[] {
93 p3.propagate(sr.getDate()),
94 ephemeris.propagate(sr.getDate())
95 };
96 EstimatedMeasurement<OneWayGNSSRange> evalNoMod = sr.estimate(0, 0, states);
97
98
99 sr.addModifier(modifier);
100 boolean found = false;
101 for (final EstimationModifier<OneWayGNSSRange> existing : sr.getModifiers()) {
102 found = found || existing == modifier;
103 }
104 Assert.assertTrue(found);
105 EstimatedMeasurement<OneWayGNSSRange> eval = sr.estimate(0, 0, states);
106
107 stat.addValue(eval.getEstimatedValue()[0] - evalNoMod.getEstimatedValue()[0]);
108
109 }
110
111 Assert.assertEquals(expectedMin, stat.getMin(), 1.0e-9);
112 Assert.assertEquals(expectedMean, stat.getMean(), 1.0e-9);
113 Assert.assertEquals(expectedMax, stat.getMax(), 1.0e-9);
114
115 }
116
117 }