Dear all,
I need some hints about the integrator, propagator and perturbers to use in Orekit for asteroid ephemeris calculation (see Generating a JPL SPICE kernel using orekit ephemeris )
I also don’t know if it is possible to add to the list of perturbers a JPL kernel as the small pertuber “sb441-n16s.bsp”
Thanks in advance.
#-----------------------------------------------------------
private def getPropagator(orb: Orbit) = {
val tolerances = NumericalPropagator.tolerances(1, orb, OrbitType.CARTESIAN)
val integrator = new DormandPrince853Integrator(0.0001, 36000, tolerances(0), tolerances(1))
val propagator = new NumericalPropagator(integrator)
propagator.setOrbitType(OrbitType.CARTESIAN)
propagator.addForceModel(new NewtonianAttraction(orb.getMu))
propagator.addForceModel(new ThirdBodyAttraction(CelestialBodyFactory.getMercury))
propagator.addForceModel(new ThirdBodyAttraction(CelestialBodyFactory.getVenus))
propagator.addForceModel(new ThirdBodyAttraction(CelestialBodyFactory.getEarth))
propagator.addForceModel(new ThirdBodyAttraction(CelestialBodyFactory.getMoon))
propagator.addForceModel(new ThirdBodyAttraction(CelestialBodyFactory.getMars))
propagator.addForceModel(new ThirdBodyAttraction(CelestialBodyFactory.getJupiter))
propagator.addForceModel(new ThirdBodyAttraction(CelestialBodyFactory.getSaturn))
propagator.addForceModel(new ThirdBodyAttraction(CelestialBodyFactory.getUranus))
propagator.addForceModel(new ThirdBodyAttraction(CelestialBodyFactory.getNeptune))
propagator.addForceModel(new ThirdBodyAttraction(CelestialBodyFactory.getPluto))
propagator.setInitialState(new SpacecraftState(orb))
propagator
}
#-----------------------------------------------------------
Hi @rmorales
Maybe you can look at these two projects made by Hank Grabowski. I think they can be very useful for your application:
[1] HeliocentricDemos
[2] Top300Asteroids
You can also have a look on the following post
[3] Asteroid propagation not matching MPC results
In order to add a new Celestial body, you will need to create you own class by implementing the CelestialBody
interface. You can find an example on Hank’s project with the JplHorizonsAsteroidCelestialBody.java class. You can also find valuable tips on the following post
[4] Own planetary bodies?
Best regards,
Bryan
Thank you Bryan,
I’ll take a look and I’ll publish the code when I find a solution based on your inputs.
Best regards.
Rafa.
Dear all,
After some research, in the case of centaurs and TNOs (my particular case), it is only necessary to include some planets as perturbators to obtain an average accuracy. For a general solution for any type of asteroid, it is necessary to include additional perturbators: Ceres, Pallas, Vesta…
In my particular case, the perturbators used are:
//---------------------------------------------------------------------------
private def addPerturberSeq(orb: Orbit, propagator: NumericalPropagator): Unit = {
propagator.addForceModel(new NewtonianAttraction(orb.getMu))
propagator.addForceModel(new ThirdBodyAttraction(CelestialBodyFactory.getEarthMoonBarycenter))
propagator.addForceModel(new ThirdBodyAttraction(CelestialBodyFactory.getMars))
propagator.addForceModel(new ThirdBodyAttraction(CelestialBodyFactory.getJupiter))
propagator.addForceModel(new ThirdBodyAttraction(CelestialBodyFactory.getSaturn))
propagator.addForceModel(new ThirdBodyAttraction(CelestialBodyFactory.getUranus))
propagator.addForceModel(new ThirdBodyAttraction(CelestialBodyFactory.getNeptune))
propagator.addForceModel(new ThirdBodyAttraction(CelestialBodyFactory.getPluto))
}
//---------------------------------------------------------------------------
You can find the complete code in:
src/main/scala/com/henosis/ephemeris/Orekit.scala · main · Rafael Morales / henosis · GitLab
The code is in Scala, but it can be easyl moved to Java.
I am still not happy with the final accuracy, so I will continue to investigate.
Best regards.
1 Like
MaximeJ
February 21, 2022, 11:59am
5
Thanks a lot @samuele for sharing your code with us !