use of org.orekit.data.DirectoryCrawler in project Orekit by CS-SI.
the class Frames3 method main.
public static void main(String[] args) {
try {
// configure Orekit
File home = new File(System.getProperty("user.home"));
File orekitData = new File(home, "orekit-data");
if (!orekitData.exists()) {
System.err.format(Locale.US, "Failed to find %s folder%n", orekitData.getAbsolutePath());
System.err.format(Locale.US, "You need to download %s from the %s page and unzip it in %s for this tutorial to work%n", "orekit-data.zip", "https://www.orekit.org/forge/projects/orekit/files", home.getAbsolutePath());
System.exit(1);
}
DataProvidersManager manager = DataProvidersManager.getInstance();
manager.addProvider(new DirectoryCrawler(orekitData));
// Initial state definition :
// ==========================
// Date
// ****
AbsoluteDate initialDate = new AbsoluteDate(2003, 4, 7, 10, 55, 21.575, TimeScalesFactory.getUTC());
// Orbit
// *****
// The Sun is in the orbital plane for raan ~ 202
// gravitation coefficient
double mu = 3.986004415e+14;
// inertial frame
Frame eme2000 = FramesFactory.getEME2000();
Orbit orbit = new CircularOrbit(7178000.0, 0.5e-4, -0.5e-4, FastMath.toRadians(50.), FastMath.toRadians(220.), FastMath.toRadians(5.300), PositionAngle.MEAN, eme2000, initialDate, mu);
// Attitude laws
// *************
// Earth
Frame earthFrame = FramesFactory.getITRF(IERSConventions.IERS_2010, true);
BodyShape earth = new OneAxisEllipsoid(Constants.WGS84_EARTH_EQUATORIAL_RADIUS, Constants.WGS84_EARTH_FLATTENING, earthFrame);
// Target pointing attitude provider over satellite nadir at date, without yaw compensation
NadirPointing nadirLaw = new NadirPointing(eme2000, earth);
// Target pointing attitude provider with yaw compensation
final PVCoordinatesProvider sun = CelestialBodyFactory.getSun();
YawSteering yawSteeringLaw = new YawSteering(eme2000, nadirLaw, sun, Vector3D.MINUS_I);
// Propagator : Eckstein-Hechler analytic propagator
Propagator propagator = new EcksteinHechlerPropagator(orbit, yawSteeringLaw, Constants.EIGEN5C_EARTH_EQUATORIAL_RADIUS, Constants.EIGEN5C_EARTH_MU, Constants.EIGEN5C_EARTH_C20, Constants.EIGEN5C_EARTH_C30, Constants.EIGEN5C_EARTH_C40, Constants.EIGEN5C_EARTH_C50, Constants.EIGEN5C_EARTH_C60);
// Let's write the results in a file in order to draw some plots.
propagator.setMasterMode(10, new OrekitFixedStepHandler() {
PrintStream out = null;
public void init(SpacecraftState s0, AbsoluteDate t, double step) throws OrekitException {
try {
File file = new File(System.getProperty("user.home"), "XYZ.dat");
System.out.println("Results written to file: " + file.getAbsolutePath());
out = new PrintStream(file, "UTF-8");
out.println("#time X Y Z Wx Wy Wz");
} catch (IOException ioe) {
throw new OrekitException(ioe, LocalizedCoreFormats.SIMPLE_MESSAGE, ioe.getLocalizedMessage());
}
}
public void handleStep(SpacecraftState currentState, boolean isLast) throws OrekitException {
// get the transform from orbit/attitude reference frame to spacecraft frame
Transform inertToSpacecraft = currentState.toTransform();
// get the position of the Sun in orbit/attitude reference frame
Vector3D sunInert = sun.getPVCoordinates(currentState.getDate(), currentState.getFrame()).getPosition();
// convert Sun position to spacecraft frame
Vector3D sunSat = inertToSpacecraft.transformPosition(sunInert);
// and the spacecraft rotational rate also
Vector3D spin = inertToSpacecraft.getRotationRate();
// Lets calculate the reduced coordinates
double sunX = sunSat.getX() / sunSat.getNorm();
double sunY = sunSat.getY() / sunSat.getNorm();
double sunZ = sunSat.getZ() / sunSat.getNorm();
out.format(Locale.US, "%s %12.3f %12.3f %12.3f %12.7f %12.7f %12.7f%n", currentState.getDate(), sunX, sunY, sunZ, spin.getX(), spin.getY(), spin.getZ());
if (isLast) {
out.close();
}
}
});
System.out.println("Running...");
propagator.propagate(initialDate.shiftedBy(6000));
} catch (OrekitException oe) {
System.err.println(oe.getMessage());
}
}
use of org.orekit.data.DirectoryCrawler in project Orekit by CS-SI.
the class SlaveMode method main.
/**
* Program entry point.
* @param args program arguments (unused here)
*/
public static void main(String[] args) {
try {
// configure Orekit
File home = new File(System.getProperty("user.home"));
File orekitData = new File(home, "orekit-data");
if (!orekitData.exists()) {
System.err.format(Locale.US, "Failed to find %s folder%n", orekitData.getAbsolutePath());
System.err.format(Locale.US, "You need to download %s from the %s page and unzip it in %s for this tutorial to work%n", "orekit-data.zip", "https://www.orekit.org/forge/projects/orekit/files", home.getAbsolutePath());
System.exit(1);
}
DataProvidersManager manager = DataProvidersManager.getInstance();
manager.addProvider(new DirectoryCrawler(orekitData));
// Initial orbit parameters
// semi major axis in meters
double a = 24396159;
// eccentricity
double e = 0.72831215;
// inclination
double i = FastMath.toRadians(7);
// perigee argument
double omega = FastMath.toRadians(180);
// right ascension of ascending node
double raan = FastMath.toRadians(261);
// mean anomaly
double lM = 0;
// Inertial frame
Frame inertialFrame = FramesFactory.getEME2000();
// Initial date in UTC time scale
TimeScale utc = TimeScalesFactory.getUTC();
AbsoluteDate initialDate = new AbsoluteDate(2004, 01, 01, 23, 30, 00.000, utc);
// gravitation coefficient
double mu = 3.986004415e+14;
// Orbit construction as Keplerian
Orbit initialOrbit = new KeplerianOrbit(a, e, i, omega, raan, lM, PositionAngle.MEAN, inertialFrame, initialDate, mu);
// Simple extrapolation with Keplerian motion
KeplerianPropagator kepler = new KeplerianPropagator(initialOrbit);
// Set the propagator to slave mode (could be omitted as it is the default mode)
kepler.setSlaveMode();
// Overall duration in seconds for extrapolation
double duration = 600.;
// Stop date
final AbsoluteDate finalDate = initialDate.shiftedBy(duration);
// Step duration in seconds
double stepT = 60.;
// Extrapolation loop
int cpt = 1;
for (AbsoluteDate extrapDate = initialDate; extrapDate.compareTo(finalDate) <= 0; extrapDate = extrapDate.shiftedBy(stepT)) {
SpacecraftState currentState = kepler.propagate(extrapDate);
System.out.println("step " + cpt++);
System.out.println(" time : " + currentState.getDate());
System.out.println(" " + currentState.getOrbit());
}
} catch (OrekitException oe) {
System.err.println(oe.getMessage());
}
}
use of org.orekit.data.DirectoryCrawler in project Orekit by CS-SI.
the class VisibilityCheck method main.
/**
* Program entry point.
* @param args program arguments (unused here)
*/
public static void main(String[] args) {
try {
// configure Orekit
File home = new File(System.getProperty("user.home"));
File orekitData = new File(home, "orekit-data");
if (!orekitData.exists()) {
System.err.format(Locale.US, "Failed to find %s folder%n", orekitData.getAbsolutePath());
System.err.format(Locale.US, "You need to download %s from the %s page and unzip it in %s for this tutorial to work%n", "orekit-data.zip", "https://www.orekit.org/forge/projects/orekit/files", home.getAbsolutePath());
System.exit(1);
}
DataProvidersManager manager = DataProvidersManager.getInstance();
manager.addProvider(new DirectoryCrawler(orekitData));
// Initial state definition : date, orbit
AbsoluteDate initialDate = new AbsoluteDate(2004, 01, 01, 23, 30, 00.000, TimeScalesFactory.getUTC());
// gravitation coefficient
double mu = 3.986004415e+14;
// inertial frame for orbit definition
Frame inertialFrame = FramesFactory.getEME2000();
Vector3D position = new Vector3D(-6142438.668, 3492467.560, -25767.25680);
Vector3D velocity = new Vector3D(505.8479685, 942.7809215, 7435.922231);
PVCoordinates pvCoordinates = new PVCoordinates(position, velocity);
Orbit initialOrbit = new KeplerianOrbit(pvCoordinates, inertialFrame, initialDate, mu);
// Propagator : consider a simple Keplerian motion (could be more elaborate)
Propagator kepler = new KeplerianPropagator(initialOrbit);
// Earth and frame
Frame earthFrame = FramesFactory.getITRF(IERSConventions.IERS_2010, true);
BodyShape earth = new OneAxisEllipsoid(Constants.WGS84_EARTH_EQUATORIAL_RADIUS, Constants.WGS84_EARTH_FLATTENING, earthFrame);
// Station
final double longitude = FastMath.toRadians(45.);
final double latitude = FastMath.toRadians(25.);
final double altitude = 0.;
final GeodeticPoint station1 = new GeodeticPoint(latitude, longitude, altitude);
final TopocentricFrame sta1Frame = new TopocentricFrame(earth, station1, "station1");
// Event definition
final double maxcheck = 60.0;
final double threshold = 0.001;
final double elevation = FastMath.toRadians(5.0);
final EventDetector sta1Visi = new ElevationDetector(maxcheck, threshold, sta1Frame).withConstantElevation(elevation).withHandler(new VisibilityHandler());
// Add event to be detected
kepler.addEventDetector(sta1Visi);
// Propagate from the initial date to the first raising or for the fixed duration
SpacecraftState finalState = kepler.propagate(initialDate.shiftedBy(1500.));
System.out.println(" Final state : " + finalState.getDate().durationFrom(initialDate));
} catch (OrekitException oe) {
System.err.println(oe.getMessage());
}
}
use of org.orekit.data.DirectoryCrawler in project Orekit by CS-SI.
the class Frames2 method main.
public static void main(String[] args) {
try {
// configure Orekit
File home = new File(System.getProperty("user.home"));
File orekitData = new File(home, "orekit-data");
if (!orekitData.exists()) {
System.err.format(Locale.US, "Failed to find %s folder%n", orekitData.getAbsolutePath());
System.err.format(Locale.US, "You need to download %s from the %s page and unzip it in %s for this tutorial to work%n", "orekit-data.zip", "https://www.orekit.org/forge/projects/orekit/files", home.getAbsolutePath());
System.exit(1);
}
DataProvidersManager manager = DataProvidersManager.getInstance();
manager.addProvider(new DirectoryCrawler(orekitData));
// Considering the following Computing/Measurement date in UTC time scale
TimeScale utc = TimeScalesFactory.getUTC();
AbsoluteDate date = new AbsoluteDate(2008, 10, 01, 12, 00, 00.000, utc);
// The Center of Gravity frame has its origin at the satellite center of gravity (CoG)
// and its axes parallel to EME2000. It is derived from EME2000 frame at any moment
// by an unknown transform which depends on the current position and the velocity.
// Let's initialize this transform by the identity transform.
UpdatableFrame cogFrame = new UpdatableFrame(FramesFactory.getEME2000(), Transform.IDENTITY, "LOF", false);
// The satellite frame, with origin also at the CoG, depends on attitude.
// For the sake of this tutorial, we consider a simple inertial attitude here
Transform cogToSat = new Transform(date, new Rotation(0.6, 0.48, 0, 0.64, false));
Frame satFrame = new Frame(cogFrame, cogToSat, "sat", false);
// Finally, the GPS antenna frame can be defined from the satellite frame by 2 transforms:
// a translation and a rotation
Transform translateGPS = new Transform(date, new Vector3D(0, 0, 1));
Transform rotateGPS = new Transform(date, new Rotation(new Vector3D(0, 1, 3), FastMath.toRadians(10), RotationConvention.VECTOR_OPERATOR));
Frame gpsFrame = new Frame(satFrame, new Transform(date, translateGPS, rotateGPS), "GPS", false);
// Let's get the satellite position and velocity in ITRF as measured by GPS antenna at this moment:
final Vector3D position = new Vector3D(-6142438.668, 3492467.560, -25767.25680);
final Vector3D velocity = new Vector3D(505.8479685, 942.7809215, 7435.922231);
System.out.format(Locale.US, "GPS antenna position in ITRF: %12.3f %12.3f %12.3f%n", position.getX(), position.getY(), position.getZ());
System.out.format(Locale.US, "GPS antenna velocity in ITRF: %12.7f %12.7f %12.7f%n", velocity.getX(), velocity.getY(), velocity.getZ());
// The transform from GPS frame to ITRF frame at this moment is defined by
// a translation and a rotation. The translation is directly provided by the
// GPS measurement above. The rotation is extracted from the existing tree, where
// we know all rotations are already up to date, even if one translation is still
// unknown. We combine the extracted rotation and the measured translation by
// applying the rotation first because the position/velocity vector are given in
// ITRF frame not in GPS antenna frame:
Transform measuredTranslation = new Transform(date, position, velocity);
Transform formerTransform = gpsFrame.getTransformTo(FramesFactory.getITRF(IERSConventions.IERS_2010, true), date);
Transform preservedRotation = new Transform(date, formerTransform.getRotation(), formerTransform.getRotationRate());
Transform gpsToItrf = new Transform(date, preservedRotation, measuredTranslation);
// So we can update the transform from EME2000 to CoG frame
cogFrame.updateTransform(gpsFrame, FramesFactory.getITRF(IERSConventions.IERS_2010, true), gpsToItrf, date);
// And we can get the position and velocity of satellite CoG in EME2000 frame
PVCoordinates origin = PVCoordinates.ZERO;
Transform cogToItrf = cogFrame.getTransformTo(FramesFactory.getITRF(IERSConventions.IERS_2010, true), date);
PVCoordinates satItrf = cogToItrf.transformPVCoordinates(origin);
System.out.format(Locale.US, "Satellite position in ITRF: %12.3f %12.3f %12.3f%n", satItrf.getPosition().getX(), satItrf.getPosition().getY(), satItrf.getPosition().getZ());
System.out.format(Locale.US, "Satellite velocity in ITRF: %12.7f %12.7f %12.7f%n", satItrf.getVelocity().getX(), satItrf.getVelocity().getY(), satItrf.getVelocity().getZ());
Transform cogToEme2000 = cogFrame.getTransformTo(FramesFactory.getEME2000(), date);
PVCoordinates satEME2000 = cogToEme2000.transformPVCoordinates(origin);
System.out.format(Locale.US, "Satellite position in EME2000: %12.3f %12.3f %12.3f%n", satEME2000.getPosition().getX(), satEME2000.getPosition().getY(), satEME2000.getPosition().getZ());
System.out.format(Locale.US, "Satellite velocity in EME2000: %12.7f %12.7f %12.7f%n", satEME2000.getVelocity().getX(), satEME2000.getVelocity().getY(), satEME2000.getVelocity().getZ());
} catch (OrekitException oe) {
System.err.println(oe.getMessage());
}
}
use of org.orekit.data.DirectoryCrawler in project Orekit by CS-SI.
the class DOPComputation method main.
/**
* Program entry point.
* @param args program arguments (unused here)
*/
public static void main(String[] args) {
try {
// configure Orekit
File home = new File(System.getProperty("user.home"));
File orekitData = new File(home, "orekit-data");
if (!orekitData.exists()) {
System.err.format(Locale.US, "Failed to find %s folder%n", orekitData.getAbsolutePath());
System.err.format(Locale.US, "You need to download %s from the %s page and unzip it in %s for this tutorial to work%n", "orekit-data.zip", "https://www.orekit.org/forge/projects/orekit/files", home.getAbsolutePath());
System.exit(1);
}
DataProvidersManager manager = DataProvidersManager.getInstance();
manager.addProvider(new DirectoryCrawler(orekitData));
// add gnss data to the global configuration
final File gnssData = new File(DOPComputation.class.getResource("/tutorial-gnss").toURI().getPath());
manager.addProvider(new DirectoryCrawler(gnssData));
// The Earth body shape
final OneAxisEllipsoid shape = new OneAxisEllipsoid(Constants.WGS84_EARTH_EQUATORIAL_RADIUS, Constants.WGS84_EARTH_FLATTENING, FramesFactory.getITRF(IERSConventions.IERS_2010, true));
// The geographic zone to consider (clockwise defined for tessellation)
final double[][] area = new double[][] { { 43.643820, 1.470092 }, { 43.566007, 1.488974 }, { 43.568246, 1.417906 }, { 43.613503, 1.387351 }, { 43.652515, 1.425460 } };
final List<GeodeticPoint> zone = new ArrayList<GeodeticPoint>(area.length);
for (double[] point : area) {
zone.add(new GeodeticPoint(FastMath.toRadians(point[0]), FastMath.toRadians(point[1]), 0.));
}
// The min elevation over the zone: 10°
final double minElevation = FastMath.toRadians(10.0);
// Computation period and time step: 1 day, 10'
final AbsoluteDate tStart = new AbsoluteDate(2016, 3, 2, 20, 0, 0., TimeScalesFactory.getUTC());
final AbsoluteDate tStop = tStart.shiftedBy(Constants.JULIAN_DAY);
final double tStep = 600.;
// Computes the DOP over the zone for the period
new DOPComputation().run(shape, zone, 1000., minElevation, tStart, tStop, tStep);
} catch (OrekitException oe) {
System.err.println(oe.getLocalizedMessage());
System.exit(1);
} catch (IOException ioe) {
System.err.println(ioe.getLocalizedMessage());
System.exit(1);
} catch (ParseException pe) {
System.err.println(pe.getLocalizedMessage());
System.exit(1);
} catch (URISyntaxException use) {
System.err.println(use.getLocalizedMessage());
System.exit(1);
}
}
Aggregations