I am also a fan of using the orekit libraries for scripting. As a proof-of-concept, I have developed some wrapper classes (in Java) based on the orekit classes which help to simplify and streamline scripting. As sample jython script is below. I use the package name "orescript", and have left out some initialization: # # Create a spacecraft. # from org.orekit.time import AbsoluteDate from orescript import Spacecraft, TimeScale, ReferenceFrame iss = Spacecraft( AbsoluteDate(2010, 5, 28, 12, 0, 00.000, TimeScale.UTC), [ 3198022.67, 2901879.73, 5142928.95], [-6129.640631, 4489.647187, 1284.511245], ReferenceFrame.J2000 ) iss.cd = 2.0 iss.mass = 370220.0 iss.area = 1299.99967 # # Select a propagator. # from orescript.propagators import CowellPropagator iss.propagator = CowellPropagator() # # Add nonspherical Earth gravity. # from orescript.forces.gravity import EGMGravity iss.propagator.addForceModel(EGMGravity(40,40)) # # Add drag force modeling. # from orescript.bodies import Earth from orescript.forces.drag import ExponentialAtmosphere from orescript.forces.drag import DragForce earth = Earth() earth.atmosphere = ExponentialAtmosphere() iss.propagator.addForceModel(DragForce(earth.atmosphere)) # # Add third-body gravity. # from orescript.bodies import Moon, Sun from org.orekit.forces.gravity import ThirdBodyAttraction moon = Moon() sun = Sun() iss.propagator.addForceModel(ThirdBodyAttraction(moon)) iss.propagator.addForceModel(ThirdBodyAttraction(sun)) # # Add solar radiation pressure. # from orescript.forces.radiation import RadiationPressure iss.propagator.addForceModel(RadiationPressure(sun)) # # Let's see the initial state # print "Initial state" print "CB = ", iss.cb.name print "Epoch = ", iss.epoch print "Position = ", iss.pv.position print "Velocity = ", iss.pv.velocity print "Frame = ", iss.orbit.frame print "Radius = ", iss.pv.position.norm # # Let's see the propagator information # print "\nPropagation settings" print "Integrator : ", iss.propagator.integrator.name print "Forces : " for force in iss.propagator.forceModels: print " %s" % force # # Propagate. # iss.propagate(86400) # # Let's see the final state. # print "\n" print "Final state" print "Epoch = ", iss.epoch print "Position = ", iss.pv.position, "meters" print "Velocity = ", iss.pv.velocity, "meters/sec" print "Frame = ", iss.orbit.frame print "Radius = ", iss.pv.position.norm, "meters" This yields the output: Initial state CB = Earth Epoch = 2010-05-28T12:00:00.000 Position = {3,198,022.67; 2,901,879.73; 5,142,928.95} Velocity = {-6,129.64; 4,489.65; 1,284.51} Frame = EME2000 Radius = 6715502.44955 Propagation settings Integrator : classical Runge-Kutta Forces : EGMGravity (40x40) org.orekit.forces.drag.DragForce@29d65b org.orekit.forces.gravity.ThirdBodyAttraction@b8176d org.orekit.forces.gravity.ThirdBodyAttraction@a1d7b org.orekit.forces.radiation.SolarRadiationPressure@127461b Final state Epoch = 2010-05-29T12:00:00.000 Position = {5,149,764.12; -4,232,662.2; -841,421.8} meters Velocity = {3,638.83; 3,252.03; 5,966.86} meters/sec Frame = EME2000 Radius = 6718890.56326 meters To me, encapsulating the complexity of the low-level API makes the scripting easier and perhaps more accessible to casual users. Java can be ugly and tedious, but python is so clean. I'm looking forward to future orekit releases! Steven --- On Mon, 5/16/11, Petrus Hyvönen <petrus.hyvonen@gmail.com> wrote:
|