Hello everyone!
In my project, there is a sun-synchronous low-earth orbit satellite with a mass of approximately 50–150 kg. The initial orbit parameters of the satellite are known (Keplerian elements; the average altitude ranges from 350 km to 550 km). A Hall electric thruster is used for propulsion, providing a constant thrust of around 9–15 millinewtons. Fuel consumption can be neglected. The goal is to determine the required ignition duration to reach a target altitude (for example, 1500 meters above the current orbit). The maximum ignition time is 3 hours; if this limit is exceeded, multiple ignition sessions will be necessary.
I have developed a calculation algorithm, but the results differ by 10–200 seconds compared to the actual orbital changes.
public static double calculateDuration(
double initialHeight,
double targetHeight,
double mass,
double thrust) {
double a1 = OrekitUtil.EARTH_RADIUS + initialHeight;
double a2 = OrekitUtil.EARTH_RADIUS + targetHeight;
// F = [m * √μ * (1/√a1 - 1/√a2)] / t
double term1 = 1.0 / Math.sqrt(a1);
double term2 = 1.0 / Math.sqrt(a2);
double duration = mass * Math.sqrt(OrekitUtil.MU) * (term1 - term2) / thrust;
return Math.abs(duration);
}
I’ve also considered extrapolation methods, but the semi-major axis varies significantly, making it impossible to accurately determine whether the target altitude is reached.
Is there any more accurate calculation method? Thank you all!