avanzini Module¶
Summary¶
Functions
Solves Lambert problem using Gooding’s devised algorithm. |
Description¶
Lambert’s problem solver using the method proposed by Giulio Avanzini in 2008.
This module holds the implementation of the algorithm devised by Avanzini, which appeared for the first time in his article [1]. The solver takes advantage of the conservation of the eccentricity projection along the chord direction, so it iterates over this orbital element till the time of transfer from Kepler’s equation matches the desired transfer one.
However, the original routines was not developed to work under multi-revolutions conditions. In addition, Avanzini did not provide the derivative of Kepler’s equation with respect to the transverse eccentricity component, forcing a bounded numerical method (bisection or regulafalsi). This was solved by Quan He, which proposed new changes to Avanzini’s original algorithm in an article [2] proposed in 2010.
Finally, a new method [3] was proposed by Changxuan Wen in 2014, simplifying all previous routines.
- [1] Avanzini, G. (2008). A simple Lambert algorithm. Journal of guidance,
control, and dynamics, 31(6), 1587-1594.
- [2] He, Q., Li, J., & Han, C. (2010). Multiple-revolution solutions of the
transverse-eccentricity-based lambert problem. Journal of guidance, control, and dynamics, 33(1), 265-269.
- [3] Wen, C., Zhao, Y., & Shi, P. (2014). Derivative analysis and algorithm
modification of transverse-eccentricity-based Lambert problem. Journal of Guidance, Control, and Dynamics, 37(4), 1195-1201.
Module Details¶
- lamberthub.ecc_solvers.avanzini.avanzini2008(mu, r1, r2, tof, M=0, is_prograde=True, is_low_path=True, maxiter=35, atol=1e-05, rtol=1e-07, full_output=False)[source]¶
Solves Lambert problem using Gooding’s devised algorithm.
- Parameters:
- mu: float
Gravitational parameter, equivalent to \(GM\) of attractor body.
- r1: numpy.array
Initial position vector.
- r2: numpy.array
Final position vector.
- M: int
Number of revolutions. Must be equal or greater than 0 value.
- is_prograde: bool
If True, specifies prograde motion. Otherwise, retrograde motion is imposed.
- is_low_path: bool
If two solutions are available, it selects between high or low path.
- maxiter: int
Maximum number of iterations.
- atol: float
Absolute tolerance.
- rtol: float
Relative tolerance.
- full_output: bool
If True, the number of iterations and time per iteration are also returned.
- Returns:
- v1: numpy.array
Initial velocity vector.
- v2: numpy.array
Final velocity vector.
- numiter: int
Number of iterations.
- tpi: float
Time per iteration in seconds.
Notes
The following routine might be simplified making use of private functions. However, we decided to expose all the auxiliary routines to properly reproduce original report figures.