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.util.FastMath;
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.GroundStation;
30 import org.orekit.estimation.measurements.ObservedMeasurement;
31 import org.orekit.estimation.measurements.Range;
32 import org.orekit.estimation.measurements.RangeMeasurementCreator;
33 import org.orekit.frames.LOFType;
34 import org.orekit.orbits.OrbitType;
35 import org.orekit.orbits.PositionAngle;
36 import org.orekit.propagation.Propagator;
37 import org.orekit.propagation.SpacecraftState;
38 import org.orekit.propagation.conversion.NumericalPropagatorBuilder;
39 import org.orekit.utils.Constants;
40
41 public class OnBoardAntennaRangeModifierTest {
42
43 @Test
44 public void testPreliminary() {
45
46
47
48
49 Context context = EstimationTestUtils.eccentricContext("regular-data:potential:tides");
50
51 final NumericalPropagatorBuilder propagatorBuilder =
52 context.createBuilder(OrbitType.KEPLERIAN, PositionAngle.TRUE, true,
53 1.0e-6, 60.0, 0.001);
54 propagatorBuilder.setAttitudeProvider(new LofOffset(propagatorBuilder.getFrame(), LOFType.LVLH));
55
56
57 final Propagator p1 = EstimationTestUtils.createPropagator(context.initialOrbit,
58 propagatorBuilder);
59 final List<ObservedMeasurement<?>> spacecraftCenteredMeasurements =
60 EstimationTestUtils.createMeasurements(p1,
61 new RangeMeasurementCreator(context, Vector3D.ZERO),
62 1.0, 3.0, 300.0);
63
64
65 final double xOffset = -2.5;
66 final Propagator p2 = EstimationTestUtils.createPropagator(context.initialOrbit,
67 propagatorBuilder);
68 final List<ObservedMeasurement<?>> antennaCenteredMeasurements =
69 EstimationTestUtils.createMeasurements(p2,
70 new RangeMeasurementCreator(context, new Vector3D(xOffset, 0, 0)),
71 1.0, 3.0, 300.0);
72
73 for (int i = 0; i < spacecraftCenteredMeasurements.size(); ++i) {
74 Range sr = (Range) spacecraftCenteredMeasurements.get(i);
75 Range ar = (Range) antennaCenteredMeasurements.get(i);
76 double alphaMax = FastMath.asin(Constants.WGS84_EARTH_EQUATORIAL_RADIUS / sr.getObservedValue()[0]);
77 Assert.assertEquals(0.0, sr.getDate().durationFrom(ar.getDate()), 1.0e-8);
78 Assert.assertTrue(ar.getObservedValue()[0] - sr.getObservedValue()[0] >= xOffset);
79 Assert.assertTrue(ar.getObservedValue()[0] - sr.getObservedValue()[0] <= xOffset * FastMath.cos(alphaMax));
80 }
81 }
82
83 @Test
84 public void testEffect() {
85
86 Context context = EstimationTestUtils.eccentricContext("regular-data:potential:tides");
87
88 final NumericalPropagatorBuilder propagatorBuilder =
89 context.createBuilder(OrbitType.KEPLERIAN, PositionAngle.TRUE, true,
90 1.0e-6, 60.0, 0.001);
91 propagatorBuilder.setAttitudeProvider(new LofOffset(propagatorBuilder.getFrame(), LOFType.LVLH));
92 final double groundClockOffset = 1.234e-3;
93 for (final GroundStation station : context.stations) {
94 station.getClockOffsetDriver().setValue(groundClockOffset);
95 }
96
97
98 final Propagator p1 = EstimationTestUtils.createPropagator(context.initialOrbit,
99 propagatorBuilder);
100 final List<ObservedMeasurement<?>> spacecraftCenteredMeasurements =
101 EstimationTestUtils.createMeasurements(p1,
102 new RangeMeasurementCreator(context, Vector3D.ZERO),
103 1.0, 3.0, 300.0);
104
105
106 final Vector3D apc = new Vector3D(-2.5, 0, 0);
107 final Propagator p2 = EstimationTestUtils.createPropagator(context.initialOrbit,
108 propagatorBuilder);
109 final List<ObservedMeasurement<?>> antennaCenteredMeasurements =
110 EstimationTestUtils.createMeasurements(p2,
111 new RangeMeasurementCreator(context, apc),
112 1.0, 3.0, 300.0);
113
114 final Propagator p3 = EstimationTestUtils.createPropagator(context.initialOrbit,
115 propagatorBuilder);
116
117 OnBoardAntennaRangeModifier modifier = new OnBoardAntennaRangeModifier(apc);
118 for (int i = 0; i < spacecraftCenteredMeasurements.size(); ++i) {
119 Range sr = (Range) spacecraftCenteredMeasurements.get(i);
120 sr.addModifier(modifier);
121 EstimatedMeasurement<Range> estimated = sr.estimate(0, 0, new SpacecraftState[] { p3.propagate(sr.getDate()) });
122 Range ar = (Range) antennaCenteredMeasurements.get(i);
123 Assert.assertEquals(0.0, sr.getDate().durationFrom(ar.getDate()), 1.0e-8);
124 Assert.assertEquals(ar.getObservedValue()[0], estimated.getEstimatedValue()[0], 2.6e-7);
125 }
126
127 }
128
129 }
130
131