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.junit.Assert;
23 import org.junit.Test;
24 import org.orekit.attitudes.LofOffset;
25 import org.orekit.estimation.Context;
26 import org.orekit.estimation.EstimationTestUtils;
27 import org.orekit.estimation.measurements.EstimatedMeasurement;
28 import org.orekit.estimation.measurements.ObservedMeasurement;
29 import org.orekit.estimation.measurements.gnss.InterSatellitesPhase;
30 import org.orekit.estimation.measurements.gnss.InterSatellitesPhaseMeasurementCreator;
31 import org.orekit.frames.LOFType;
32 import org.orekit.gnss.Frequency;
33 import org.orekit.orbits.CartesianOrbit;
34 import org.orekit.orbits.Orbit;
35 import org.orekit.orbits.OrbitType;
36 import org.orekit.orbits.PositionAngle;
37 import org.orekit.propagation.BoundedPropagator;
38 import org.orekit.propagation.EphemerisGenerator;
39 import org.orekit.propagation.Propagator;
40 import org.orekit.propagation.SpacecraftState;
41 import org.orekit.propagation.conversion.NumericalPropagatorBuilder;
42 import org.orekit.utils.TimeStampedPVCoordinates;
43
44 public class OnBoardAntennaInterSatellitesPhaseModifierTest {
45
46 private static final Frequency FREQUENCY = Frequency.G01;
47
48 @Test
49 public void testPreliminary() {
50
51
52
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 int ambiguity = 0;
76 final double localClockOffset = 0.137e-6;
77 final double remoteClockOffset = 469.0e-6;
78 final List<ObservedMeasurement<?>> spacecraftCenteredMeasurements =
79 EstimationTestUtils.createMeasurements(p1,
80 new InterSatellitesPhaseMeasurementCreator(ephemeris,
81 FREQUENCY,
82 ambiguity,
83 localClockOffset,
84 remoteClockOffset,
85 Vector3D.ZERO,
86 Vector3D.ZERO),
87 1.0, 3.0, 300.0);
88
89
90 final double xOffset1 = -2.5;
91 final double yOffset2 = 0.8;
92 final Propagator p2 = EstimationTestUtils.createPropagator(context.initialOrbit,
93 propagatorBuilder);
94 final List<ObservedMeasurement<?>> antennaCenteredMeasurements =
95 EstimationTestUtils.createMeasurements(p2,
96 new InterSatellitesPhaseMeasurementCreator(ephemeris,
97 FREQUENCY,
98 ambiguity,
99 localClockOffset,
100 remoteClockOffset,
101 new Vector3D(xOffset1, 0, 0),
102 new Vector3D(0, yOffset2, 0)),
103 1.0, 3.0, 300.0);
104
105 for (int i = 0; i < spacecraftCenteredMeasurements.size(); ++i) {
106 InterSatellitesPhase sr = (InterSatellitesPhase) spacecraftCenteredMeasurements.get(i);
107 InterSatellitesPhase ar = (InterSatellitesPhase) antennaCenteredMeasurements.get(i);
108 Assert.assertEquals(0.0, sr.getDate().durationFrom(ar.getDate()), 2.0e-8);
109 Assert.assertTrue((ar.getObservedValue()[0] - sr.getObservedValue()[0]) * FREQUENCY.getWavelength() >= -1.0);
110 Assert.assertTrue((ar.getObservedValue()[0] - sr.getObservedValue()[0]) * FREQUENCY.getWavelength() <= -0.36);
111 }
112 }
113
114 @Test
115 public void testEffect() {
116
117 Context context = EstimationTestUtils.eccentricContext("regular-data:potential:tides");
118
119 final NumericalPropagatorBuilder propagatorBuilder =
120 context.createBuilder(OrbitType.KEPLERIAN, PositionAngle.TRUE, true,
121 1.0e-6, 60.0, 0.001);
122 propagatorBuilder.setAttitudeProvider(new LofOffset(propagatorBuilder.getFrame(), LOFType.LVLH));
123
124
125 final TimeStampedPVCoordinates original = context.initialOrbit.getPVCoordinates();
126 final Orbit closeOrbit = new CartesianOrbit(new TimeStampedPVCoordinates(context.initialOrbit.getDate(),
127 original.getPosition().add(new Vector3D(1000, 2000, 3000)),
128 original.getVelocity().add(new Vector3D(-0.03, 0.01, 0.02))),
129 context.initialOrbit.getFrame(),
130 context.initialOrbit.getMu());
131 final Propagator closePropagator = EstimationTestUtils.createPropagator(closeOrbit,
132 propagatorBuilder);
133 final EphemerisGenerator generator = closePropagator.getEphemerisGenerator();
134 closePropagator.propagate(context.initialOrbit.getDate().shiftedBy(3.5 * closeOrbit.getKeplerianPeriod()));
135 final BoundedPropagator ephemeris = generator.getGeneratedEphemeris();
136 final Propagator p1 = EstimationTestUtils.createPropagator(context.initialOrbit,
137 propagatorBuilder);
138 final int ambiguity = 0;
139 final double localClockOffset = 0.137e-6;
140 final double remoteClockOffset = 469.0e-6;
141 final List<ObservedMeasurement<?>> spacecraftCenteredMeasurements =
142 EstimationTestUtils.createMeasurements(p1,
143 new InterSatellitesPhaseMeasurementCreator(ephemeris,
144 FREQUENCY,
145 ambiguity,
146 localClockOffset,
147 remoteClockOffset,
148 Vector3D.ZERO,
149 Vector3D.ZERO),
150 1.0, 3.0, 300.0);
151
152
153 final Vector3D apc1 = new Vector3D(-2.5, 0.0, 0);
154 final Vector3D apc2 = new Vector3D( 0.0, 0.8, 0);
155 final Propagator p2 = EstimationTestUtils.createPropagator(context.initialOrbit,
156 propagatorBuilder);
157 final List<ObservedMeasurement<?>> antennaCenteredMeasurements =
158 EstimationTestUtils.createMeasurements(p2,
159 new InterSatellitesPhaseMeasurementCreator(ephemeris,
160 FREQUENCY,
161 ambiguity,
162 localClockOffset,
163 remoteClockOffset,
164 apc1, apc2),
165 1.0, 3.0, 300.0);
166
167 final Propagator p3 = EstimationTestUtils.createPropagator(context.initialOrbit,
168 propagatorBuilder);
169
170 OnBoardAntennaInterSatellitesPhaseModifier modifier = new OnBoardAntennaInterSatellitesPhaseModifier(apc1, apc2);
171 for (int i = 0; i < spacecraftCenteredMeasurements.size(); ++i) {
172 InterSatellitesPhase sr = (InterSatellitesPhase) spacecraftCenteredMeasurements.get(i);
173 sr.addModifier(modifier);
174 EstimatedMeasurement<InterSatellitesPhase> estimated = sr.estimate(0, 0, new SpacecraftState[] {
175 p3.propagate(sr.getDate()),
176 ephemeris.propagate(sr.getDate())
177 });
178 InterSatellitesPhase ar = (InterSatellitesPhase) antennaCenteredMeasurements.get(i);
179 Assert.assertEquals(0.0, sr.getDate().durationFrom(ar.getDate()), 2.0e-8);
180 Assert.assertEquals(ar.getObservedValue()[0] * FREQUENCY.getWavelength(), estimated.getEstimatedValue()[0] * FREQUENCY.getWavelength(), 2.0e-5);
181 }
182
183 }
184
185 }
186
187