Class LambertSolver
- java.lang.Object
-
- org.orekit.control.heuristics.lambert.LambertSolver
-
public class LambertSolver extends Object
Lambert solver, 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:
- 13.1
- Author:
- Joris Olympio, Romain Serra
- See Also:
LambertBoundaryConditions,LambertBoundaryVelocities
-
-
Constructor Summary
Constructors Constructor Description LambertSolver(double mu)Creator.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description RealMatrixcomputeJacobian(boolean posigrade, int nRev, LambertBoundaryConditions boundaryConditions)Computes the Jacobian matrix of the Lambert solution.LambertBoundaryVelocitiessolve(boolean posigrade, int nRev, LambertBoundaryConditions boundaryConditions)Solve for the corresponding velocity vectors given two position vectors and a duration.static Vector2DsolveNormalized2D(double r1, double r2, double dth, double tau, int mRev)Lambert's solver for the historical, planar problem.
-
-
-
Method Detail
-
solve
public LambertBoundaryVelocities solve(boolean posigrade, int nRev, LambertBoundaryConditions boundaryConditions)
Solve for the corresponding velocity vectors given two position vectors and a duration.The logic for setting
posigradeandnRevis that the sweep angle Δυ travelled by the object betweent1andt2is 2πnRev +1- α ifposigradeis false and 2πnRev+ α ifposigradeis true, where α is the separation angle betweenp1andp2, which is always computed between 0 and π (because in 3D without a normal reference, vector angles cannot go past π).This implies that
posigradeshould be set to true ifp2is located in the half orbit starting atp1and it should be set to false ifp2is located in the half orbit ending atp1, regardless of the number of periods betweent1andt2, andnRevshould be set accordingly.As an example, if
t2is less than half a period aftert1, thenposigradeshould betrueandnRevshould be 0. Ift2is more than half a period aftert1but less than one period aftert1,posigradeshould befalseandnRevshould be 0.If solving fails completely, null is returned. If only the computation of terminal velocity fails, a partial pair of velocities is returned (with some NaNs).
- Parameters:
posigrade- flag indicating the direction of motionnRev- number of revolutionsboundaryConditions- Lambert problem boundary conditions- Returns:
- boundary velocity vectors
-
solveNormalized2D
public static Vector2D solveNormalized2D(double r1, double r2, double dth, double tau, int mRev)
Lambert's solver for the historical, planar problem. Assume mu=1.- Parameters:
r1- radius 1r2- radius 2dth- sweep angletau- time of flightmRev- number of revs- Returns:
- velocity at departure in (T, N) basis. Is Vector2D.NaN if solving fails
-
computeJacobian
public RealMatrix computeJacobian(boolean posigrade, int nRev, LambertBoundaryConditions boundaryConditions)
Computes the Jacobian matrix of the Lambert solution. The rows represent the initial and terminal velocity vectors. The columns represent the parameters: initial time, initial position, terminal time, terminal velocity.Reference: Di Lizia, P., Armellin, R., Zazzera, F. B., and Berz, M. High Order Expansion of the Solution of Two-Point Boundary Value Problems using Differential Algebra: Applications to Spacecraft Dynamics.
- Parameters:
posigrade- direction flagnRev- number of revolutionsboundaryConditions- Lambert boundary conditions- Returns:
- Jacobian matrix
-
-