- Joined
- Mar 21, 2008
- Messages
- 107
- Reaction score
- 1
- Points
- 0
I've made significant progress in using the ephemerides created by JPL for making
ephemeris modules for Orbiter. What prompted this was my dissatisfaction with the
results I was getting from a module I was creating for Nereid when compared to data
retrieved from the JPL Horizons ephemeris service. My ephemeris for Nereid was based on a
2009 paper which fit a somewhat simple model to the results of a JPL integration (which was
fit to observational positions) of the orbit of Nereid. This model gave orbital elements
for the orbit with respect to the Laplacian plane of Neptune+Nereid, allowing the orbit
to precess at a constant rate. It looks like this model results in a rather poor fit for the
integration, probably because it does not model the perturbations on the orbit caused by Triton well.
A little background on the JPL ephemerides:
The group within JPL that produces the ephemerides is called the Solar System Dynamics group,
and one of their responsibilities is to produce accurate ephemerides needed for navigation,
observation, and communication for spacecraft on NASA interplanetary missions. The approach
they use is to numerically integrate the paths of the bodies in a system using the best
physical data they can create (state vectors, velocities, masses, non-spherical gravity
components, etc.) and calculating the most important interactions between bodies in detail
(mutual attraction, tidal interactions, etc.)
The results are compared to real-world observations (Earth-based and spacecraft), and the model is
adjusted to get a good fit. The results are state vectors as a function of time (positions and velocities)
for the bodies included in the system, which are reduced in size by fitting a high order
piecewise polynomial to the vectors. This data is publically available on JPL or NAIF websites,
and is presented in a form that is directly useable by a software suite called SPICE, which can
be used for mission planning (navigation, tracking, communication, etc.).
One could use the spice software library to retrieve vectors within an Orbiter module, but I have
taken a nore direct approach (and simpler for a hack programmer like myself), which is to use
a utility to dump the data in the ephemeris file to a text file, re-format it
(and reduce it in size) to make it easier to incorporate into an Orbiter module.
So, what data can I get from JPL for Nereid?
The file that contains the data I need is called nep081.bsp, which is a binary file
about 116 Meg in size.
This is the result of an integration that explicitly includes Neptune, the Sun, and the
satellites Triton, Nereid, and Proteus. It covers the time period from 1900 to 2050. A few
utilities that I found on the JPL SPICE site come in handy at this point. A utility called "brief"
gets a summary of what is in the file. A utility called "spkmerge" can extract the data for a
subset of bodies in the file to a new file. Another utility called "spy" can dump the data from that
file to a text file. In examining the data, and from various guides and documents on the JPL site,
I found that the data is presented as a number of segments (13698 in the case of Nereid) each containing
the data for computing the position and velocity vectors for a 4 day interval. The data for each segment
includes: the Julian Date of the midpoint of the segment, the time span of the interval, and 66
coefficients that allow the computation of position and velocity vectors within that segment.
The state vectors are computed as a sum of Chebyshev polynomials using these coefficients. I wrote a
little utility that reads the data, and creates a new file that is smaller by eliminating the time info
and reducing the order of the fit from 10 to 5, but still retaining the property that each segment joins
smoothly to the next segment, so there will not be discontinuity in the positions or velocities at
segment boundaries. This file is about 7.5Meg in size. I've done some simple tests that compute state
vectors for Nereid from this data, and it agrees with data retrieved from Horizons down to the meter level
(likely because they use the same ephemeris data in nep081.bsp).
I am now writing an Orbiter module that reads this file and uses it to compute the position and velocity
required by Orbiter. One problem to solve is what to do about times before and after the time interval
of the data.
I would appreciate any feedback, ideas, critiques, etc. on this subject.
ephemeris modules for Orbiter. What prompted this was my dissatisfaction with the
results I was getting from a module I was creating for Nereid when compared to data
retrieved from the JPL Horizons ephemeris service. My ephemeris for Nereid was based on a
2009 paper which fit a somewhat simple model to the results of a JPL integration (which was
fit to observational positions) of the orbit of Nereid. This model gave orbital elements
for the orbit with respect to the Laplacian plane of Neptune+Nereid, allowing the orbit
to precess at a constant rate. It looks like this model results in a rather poor fit for the
integration, probably because it does not model the perturbations on the orbit caused by Triton well.
A little background on the JPL ephemerides:
The group within JPL that produces the ephemerides is called the Solar System Dynamics group,
and one of their responsibilities is to produce accurate ephemerides needed for navigation,
observation, and communication for spacecraft on NASA interplanetary missions. The approach
they use is to numerically integrate the paths of the bodies in a system using the best
physical data they can create (state vectors, velocities, masses, non-spherical gravity
components, etc.) and calculating the most important interactions between bodies in detail
(mutual attraction, tidal interactions, etc.)
The results are compared to real-world observations (Earth-based and spacecraft), and the model is
adjusted to get a good fit. The results are state vectors as a function of time (positions and velocities)
for the bodies included in the system, which are reduced in size by fitting a high order
piecewise polynomial to the vectors. This data is publically available on JPL or NAIF websites,
and is presented in a form that is directly useable by a software suite called SPICE, which can
be used for mission planning (navigation, tracking, communication, etc.).
One could use the spice software library to retrieve vectors within an Orbiter module, but I have
taken a nore direct approach (and simpler for a hack programmer like myself), which is to use
a utility to dump the data in the ephemeris file to a text file, re-format it
(and reduce it in size) to make it easier to incorporate into an Orbiter module.
So, what data can I get from JPL for Nereid?
The file that contains the data I need is called nep081.bsp, which is a binary file
about 116 Meg in size.
This is the result of an integration that explicitly includes Neptune, the Sun, and the
satellites Triton, Nereid, and Proteus. It covers the time period from 1900 to 2050. A few
utilities that I found on the JPL SPICE site come in handy at this point. A utility called "brief"
gets a summary of what is in the file. A utility called "spkmerge" can extract the data for a
subset of bodies in the file to a new file. Another utility called "spy" can dump the data from that
file to a text file. In examining the data, and from various guides and documents on the JPL site,
I found that the data is presented as a number of segments (13698 in the case of Nereid) each containing
the data for computing the position and velocity vectors for a 4 day interval. The data for each segment
includes: the Julian Date of the midpoint of the segment, the time span of the interval, and 66
coefficients that allow the computation of position and velocity vectors within that segment.
The state vectors are computed as a sum of Chebyshev polynomials using these coefficients. I wrote a
little utility that reads the data, and creates a new file that is smaller by eliminating the time info
and reducing the order of the fit from 10 to 5, but still retaining the property that each segment joins
smoothly to the next segment, so there will not be discontinuity in the positions or velocities at
segment boundaries. This file is about 7.5Meg in size. I've done some simple tests that compute state
vectors for Nereid from this data, and it agrees with data retrieved from Horizons down to the meter level
(likely because they use the same ephemeris data in nep081.bsp).
I am now writing an Orbiter module that reads this file and uses it to compute the position and velocity
required by Orbiter. One problem to solve is what to do about times before and after the time interval
of the data.
I would appreciate any feedback, ideas, critiques, etc. on this subject.