poliastro.core.maneuver

Low level maneuver implementations

Module Contents

Functions

hohmann(k, rv, r_f)

Calculate the Hohmann maneuver velocities and the duration of the maneuver.

bielliptic(k, r_b, r_f, rv)

Calculate the increments in the velocities and the time of flight of the maneuver

correct_pericenter(k, R, J2, max_delta_r, v, a, inc, ecc)

Calculates the time before burning and the velocity vector in direction of the burn.

poliastro.core.maneuver.hohmann(k, rv, r_f)

Calculate the Hohmann maneuver velocities and the duration of the maneuver.

By defining the relationship between orbit radius:

\[a_{trans} = \frac{r_{i} + r_{f}}{2}\]

The Hohmann maneuver velocities can be expressed as:

\[\begin{split}\begin{align} \Delta v_{a} &= \sqrt{\frac{2\mu}{r_{i}} - \frac{\mu}{a_{trans}}} - v_{i}\\ \Delta v_{b} &= \sqrt{\frac{\mu}{r_{f}}} - \sqrt{\frac{2\mu}{r_{f}} - \frac{\mu}{a_{trans}}} \end{align}\end{split}\]

The time that takes to complete the maneuver can be computed as:

\[\tau_{trans} = \pi \sqrt{\frac{(a_{trans})^{3}}{\mu}}\]
Parameters
poliastro.core.maneuver.bielliptic(k, r_b, r_f, rv)

Calculate the increments in the velocities and the time of flight of the maneuver

The bielliptic maneuver employs two Hohmann transfers, therefore two intermediate orbits are established. We define the different radius relationships as follows:

\[\begin{split}\begin{align} a_{trans1} &= \frac{r_{i} + r_{b}}{2}\\ a_{trans2} &= \frac{r_{b} + r_{f}}{2}\\ \end{align}\end{split}\]

The increments in the velocity are:

\[\begin{split}\begin{align} \Delta v_{a} &= \sqrt{\frac{2\mu}{r_{i}} - \frac{\mu}{a_{trans1}}} - v_{i}\\ \Delta v_{b} &= \sqrt{\frac{2\mu}{r_{b}} - \frac{\mu}{a_{trans2}}} - \sqrt{\frac{2\mu}{r_{b}} - \frac{\mu}{a_trans{1}}}\\ \Delta v_{c} &= \sqrt{\frac{\mu}{r_{f}}} - \sqrt{\frac{2\mu}{r_{f}} - \frac{\mu}{a_{trans2}}}\\ \end{align}\end{split}\]

The time of flight for this maneuver is the addition of the time needed for both transition orbits, following the same formula as Hohmann:

\[\begin{split}\begin{align} \tau_{trans1} &= \pi \sqrt{\frac{a_{trans1}^{3}}{\mu}}\\ \tau_{trans2} &= \pi \sqrt{\frac{a_{trans2}^{3}}{\mu}}\\ \end{align}\end{split}\]
Parameters
poliastro.core.maneuver.correct_pericenter(k, R, J2, max_delta_r, v, a, inc, ecc)

Calculates the time before burning and the velocity vector in direction of the burn.

Parameters
  • k (float) – Standard Gravitational parameter

  • R (float) – Radius of the attractor

  • J2 (float) – Oblateness factor

  • max_delta_r (float) – Maximum satellite’s geocentric distance

  • v (numpy.ndarray) – Velocity vector

  • a (float) – Semi-major axis

  • inc (float) – Inclination

  • ecc (float) – Eccentricity

Notes

The algorithm was obtained from “Fundamentals of Astrodynamics and Applications, 4th ed (2013)” by David A. Vallado, page 885. Given a max_delta_r, we determine the maximum perigee drift before we do an orbit-adjustment burn to restore the perigee to its nominal value. We estimate the time until this burn using the allowable drift delta_w and the drift rate \(|dw|\). For positive delta_v, the change in the eccentricity is positive for perigee burns and negative for apogee burns. The opposite holds for a delta_v applied against the velocity vector, which decreases the satellite’s velocity. Perigee drift are mainly due to the zonal harmonics, which cause variations in the altitude by changing the argument of perigee. Please note that ecc ≈ 0.001, so the error incurred by assuming a small eccentricity is on the order of 0.1%. This is smaller than typical variations in thruster performance between burns.