package org.orekit.estimation.iod; import java.util.List; import org.hipparchus.geometry.euclidean.threed.Vector3D; import org.junit.Assert; import org.junit.Test; import org.orekit.errors.OrekitException; import org.orekit.estimation.Context; import org.orekit.estimation.EstimationTestUtils; import org.orekit.estimation.measurements.ObservedMeasurement; import org.orekit.estimation.measurements.PVMeasurementCreator; import org.orekit.frames.Frame; import org.orekit.orbits.KeplerianOrbit; import org.orekit.orbits.OrbitType; import org.orekit.orbits.PositionAngle; import org.orekit.propagation.Propagator; import org.orekit.propagation.conversion.NumericalPropagatorBuilder; import org.orekit.time.AbsoluteDate; /** * * Source: http://ccar.colorado.edu/asen5050/projects/projects_2012/kemble/gibbs_derivation.htm * * @author Joris Olympio * @since 7.1 * */ public class IodLambertTest { @Test public void testLambert() throws OrekitException { final Context context = EstimationTestUtils.eccentricContext(); final double mu = context.initialOrbit.getMu(); final Frame frame = context.initialOrbit.getFrame(); final NumericalPropagatorBuilder propagatorBuilder = context.createBuilder(OrbitType.KEPLERIAN, PositionAngle.TRUE, true, 1.0e-6, 60.0, 0.001); // create perfect range measurements final Propagator propagator = EstimationTestUtils.createPropagator(context.initialOrbit, propagatorBuilder); final List<ObservedMeasurement<?>> measurements = EstimationTestUtils.createMeasurements(propagator, new PVMeasurementCreator(), 0.0, 1.0, 60.0); // measurement data 1 final int idMeasure1 = 0; final AbsoluteDate date1 = measurements.get(idMeasure1).getDate(); /*final Vector3D stapos1 = context.stations.get(0) // FIXME we need to access the station of the measurement .getBaseFrame() .getPVCoordinates(date1, frame) .getPosition();*/ final Vector3D position1 = new Vector3D( measurements.get(idMeasure1).getObservedValue()[0], measurements.get(idMeasure1).getObservedValue()[1], measurements.get(idMeasure1).getObservedValue()[2]); // measurement data 2 final int idMeasure2 = 10; final AbsoluteDate date2 = measurements.get(idMeasure2).getDate(); /*final Vector3D stapos2 = context.stations.get(0) // FIXME we need to access the station of the measurement .getBaseFrame() .getPVCoordinates(date2, frame) .getPosition();*/ final Vector3D position2 = new Vector3D( measurements.get(idMeasure2).getObservedValue()[0], measurements.get(idMeasure2).getObservedValue()[1], measurements.get(idMeasure2).getObservedValue()[2]); final int nRev = 0; // instantiate the IOD method final IodLambert iod = new IodLambert(mu); final KeplerianOrbit orbit = iod.estimate(frame, true, nRev, /*stapos1.add*/(position1), date1, /*stapos2.add*/(position2), date2); Assert.assertEquals(orbit.getA(), context.initialOrbit.getA(), 1.0e-9 * context.initialOrbit.getA()); Assert.assertEquals(orbit.getE(), context.initialOrbit.getE(), 1.0e-9 * context.initialOrbit.getE()); Assert.assertEquals(orbit.getI(), context.initialOrbit.getI(), 1.0e-9 * context.initialOrbit.getI()); } }