Class IodLambert


  • public class IodLambert
    extends Object
    Lambert position-based Initial Orbit Determination (IOD) algorithm, assuming Keplerian motion.

    An orbit is determined from two position vectors. References: Battin, R.H., An Introduction to the Mathematics and Methods of Astrodynamics, AIAA Education, 1999. Lancaster, E.R. and Blanchard, R.C., A Unified Form of Lambert’s Theorem, Goddard Space Flight Center, 1968.

    Since:
    8.0
    Author:
    Joris Olympio
    • Constructor Detail

      • IodLambert

        public IodLambert​(double mu)
        Creator.
        Parameters:
        mu - gravitational constant
    • Method Detail

      • estimate

        public Orbit estimate​(Frame frame,
                              boolean posigrade,
                              int nRev,
                              Position p1,
                              Position p2)
        Estimate an initial orbit from two position measurements.

        The logic for setting posigrade and nRev is that the sweep angle Δυ travelled by the object between t1 and t2 is 2π nRev +1 - α if posigrade is false and 2π nRev + α if posigrade is true, where α is the separation angle between p1 and p2, which is always computed between 0 and π (because in 3D without a normal reference, vector angles cannot go past π).

        This implies that posigrade should be set to true if p2 is located in the half orbit starting at p1 and it should be set to false if p2 is located in the half orbit ending at p1, regardless of the number of periods between t1 and t2, and nRev should be set accordingly.

        As an example, if t2 is less than half a period after t1, then posigrade should be true and nRev should be 0. If t2 is more than half a period after t1 but less than one period after t1, posigrade should be false and nRev should be 0.

        Parameters:
        frame - measurements frame
        posigrade - flag indicating the direction of motion
        nRev - number of revolutions
        p1 - first position measurement
        p2 - second position measurement
        Returns:
        an initial Keplerian orbit estimation at the first observation date t1
        Since:
        11.0
      • estimate

        public Orbit estimate​(Frame frame,
                              boolean posigrade,
                              int nRev,
                              PV pv1,
                              PV pv2)
        Estimate an initial orbit from two PV measurements.

        The logic for setting posigrade and nRev is that the sweep angle Δυ travelled by the object between t1 and t2 is 2π nRev +1 - α if posigrade is false and 2π nRev + α if posigrade is true, where α is the separation angle between p1 and p2, which is always computed between 0 and π (because in 3D without a normal reference, vector angles cannot go past π).

        This implies that posigrade should be set to true if p2 is located in the half orbit starting at p1 and it should be set to false if p2 is located in the half orbit ending at p1, regardless of the number of periods between t1 and t2, and nRev should be set accordingly.

        As an example, if t2 is less than half a period after t1, then posigrade should be true and nRev should be 0. If t2 is more than half a period after t1 but less than one period after t1, posigrade should be false and nRev should be 0.

        Parameters:
        frame - measurements frame
        posigrade - flag indicating the direction of motion
        nRev - number of revolutions
        pv1 - first PV measurement
        pv2 - second PV measurement
        Returns:
        an initial Keplerian orbit estimation at the first observation date t1
        Since:
        12.0
      • estimate

        public Orbit estimate​(Frame frame,
                              boolean posigrade,
                              int nRev,
                              Vector3D p1,
                              AbsoluteDate t1,
                              Vector3D p2,
                              AbsoluteDate t2)
        Estimate a Keplerian orbit given two position vectors and a duration.

        The logic for setting posigrade and nRev is that the sweep angle Δυ travelled by the object between t1 and t2 is 2π nRev +1 - α if posigrade is false and 2π nRev + α if posigrade is true, where α is the separation angle between p1 and p2, which is always computed between 0 and π (because in 3D without a normal reference, vector angles cannot go past π).

        This implies that posigrade should be set to true if p2 is located in the half orbit starting at p1 and it should be set to false if p2 is located in the half orbit ending at p1, regardless of the number of periods between t1 and t2, and nRev should be set accordingly.

        As an example, if t2 is less than half a period after t1, then posigrade should be true and nRev should be 0. If t2 is more than half a period after t1 but less than one period after t1, posigrade should be false and nRev should be 0.

        Parameters:
        frame - frame
        posigrade - flag indicating the direction of motion
        nRev - number of revolutions
        p1 - position vector 1
        t1 - date of observation 1
        p2 - position vector 2
        t2 - date of observation 2
        Returns:
        an initial Keplerian orbit estimate at the first observation date t1