Frame Conversion

Hello everyone,

I’m constructing an orbit as Keplerian with some input values and I want to get the position and velocity coordinates in EME2000 and TEME at the specific epoch described below.

The input values are:

utc = TimeScalesFactory.getUTC()
epochDate = AbsoluteDate(2023, 3, 29, 11, 12, 3.634272, utc)

a = 6806442.630251932
e = 0.0017767159957931275
i = 2.4679562062536506
omega = -24.3674662951819
raan = 132.2416001288443
lv = 24.36755660511185

With the previously initial values I will construct two different orbits, the first one in TEME and the second one in EME2000.

The first orbit construction is:

initialOrbit = KeplerianOrbit(a, e, radians(i), radians(omega), radians(raan), radians(lv), PositionAngle.TRUE,
                              FramesFactory.getTEME(), epochDate, Constants.EIGEN5C_EARTH_MU)

From here, I get the desired PV coordinates in different frames as following

print("First TEME: ", initialOrbit.getPVCoordinates(FramesFactory.getTEME()))
print("First EME2000: ", initialOrbit.getPVCoordinates(FramesFactory.getEME2000()))
print("First ITRF: ", initialOrbit.getPVCoordinates(FramesFactory.getITRF(IERSConventions.IERS_2010, True)))
print("First: ", initialOrbit.getPVCoordinates())

And the results are:

First TEME:  {2023-03-29T11:12:03.634272, P(-4568287.401654992, 5030757.993413726, 0.4612218682054066), V(-5673.0223876590735, -5143.931818859062, 330.05955050944124), A(5.802854457811161, -6.3903064500000735, -5.858658045433246E-7)}
First EME2000:  {2023-03-29T11:12:03.634272, P(-4542070.228175603, 5054431.094736552, 10006.162951999846), V(-5698.924698349422, -5114.369346106107, 342.98739037187636), A(5.769552166405908, -6.420377141088569, -0.012710279942680786)}
First ITRF:  {2023-03-29T11:12:03.634272, P(-5020030.940281255, 4580072.611971112, 10.341906761050755), V(-4831.525667112401, -5287.315958253192, 330.0499563195239), A(5.578872212663001, -5.088829246870734, -1.1685881501117132E-5)}
First:  {2023-03-29T11:12:03.634272, P(-4568287.401654992, 5030757.993413726, 0.4612218682054066), V(-5673.0223876590735, -5143.931818859062, 330.05955050944124), A(5.802854457811161, -6.3903064500000735, -5.858658045433246E-7)}

If I construct the second orbit with EME2000 as the input frame, as below

initialOrbit = KeplerianOrbit(a, e, radians(i), radians(omega), radians(raan), radians(lv), PositionAngle.TRUE,
                              FramesFactory.getEME2000(), epochDate, Constants.EIGEN5C_EARTH_MU)

I get the desired PV coordinates in different frames as following

print("Second TEME: ", initialOrbit.getPVCoordinates(FramesFactory.getTEME()))
print("Second EME2000: ", initialOrbit.getPVCoordinates(FramesFactory.getEME2000()))
print("Second ITRF: ", initialOrbit.getPVCoordinates(FramesFactory.getITRF(IERSConventions.IERS_2010, True)))
print("Second: ", initialOrbit.getPVCoordinates())

And the results are:

Second TEME:  {2023-03-29T11:12:03.634272, P(-4594358.726227621, 5006949.407492181, -10064.68905254887), V(-5646.937913493328, -5173.358711065354, 317.1887788986339), A(5.835971485124607, -6.36006365995777, 0.01278462257415556)}
Second EME2000:  {2023-03-29T11:12:03.634272, P(-4568287.401654992, 5030757.993413726, 0.4612218682054066), V(-5673.0223876590735, -5143.931818859062, 330.05955050944124), A(5.802854457811161, -6.3903064500000735, -5.858658045433246E-7)}
Second ITRF:  {2023-03-29T11:12:03.634272, P(-5043754.075765256, 4553923.527628424, -10054.856027123442), V(-4804.702781765595, -5312.4364432837465, 317.1791303468782), A(5.605216678627669, -5.059664404388718, 0.012773575320505033)}
Second:  {2023-03-29T11:12:03.634272, P(-4568287.401654992, 5030757.993413726, 0.4612218682054066), V(-5673.0223876590735, -5143.931818859062, 330.05955050944124), A(5.802854457811161, -6.3903064500000735, -5.858658045433246E-7)}

As can be seen, the results in TEME for the first orbit are different from the results in TEME for the second orbit case. Shouldn’t they be the same?

Moreover, the results in TEME of the first case are the same as the results in EME2000 in the second case. How can that be? Is it something that I’m doing wrong?

Many thanks for your time,

Verónica

No, because you define the first orbit in TEME and the second one in EME2000. When you specify omega = -24.3674662951819 you just say that the orbit node is located -24.467… radians away from the X axis of the reference frame you specify at construction. As TEME and EME2000 have different orientations, the two nodes are different. They are both -24.467… radians away from their respective reference axis, but these axes are different.

This is the same reasoning as before. As you define the orbit with respect to some frame, this means the Cartesian coordinates are fixed with respect to this reference frame. For a simpler example, consider you define a point as a Vector3D with coordinates {1.0e7, 0.0, 0.0}, i.e. exactly 10000 kilometers in the X axis direction. Then if you say the X axis is the X axis of the TEME frame, you get one location, but if you say the X axis is the X axis of the EME2000 frame, you get another location. However, the first location in TEME frame will ave coordinates {1.0e7, 0.0, 0.0} in the TEME frame, and the second location will also have coordinates {1.0e7, 0.0, 0.0} in the EME2000 frame. The coordinates of the first location in EME2000 frame and the coordinates of the second lotation in the TEME frame on the other hand will be different, because the two X axes are different.