I have three observations, instantiated as AngularRaDec objects in the topocentric J2000 frame (all from the same site for initial testing, but eventually I will need to support different ground-stations across observations). I am trying to use IODGooding for an initial IOD of a track in GEO, but I’m getting clearly wrong values back (e.g. negative semi-major axes with eccentricities > 100). I think it might be an issue with my frame or using the zenith vectors for the observer locations, but I’m hoping you can help. I tried a simpler example with the observers at the center of Earth like the testing code, and that worked for me.
I’m using the python wrapper, but I think this is just an issue with how I’m using the method rather than anything python specific. Code below. I’ve omitted the imports/constants for brevity, but can include if you think that might be the source of the issue.
mu = Constants.IERS2010_EARTH_MU
IOD = IodGooding(eme, mu)
Transform observer positions from J2000 topocentric to EME
t1 = obs1.getStation().getBaseFrame().getTransformTo(eme, obs1.getDate())
obs_pos1 = t1.transformVector(obs1.getStation().getBaseFrame().zenith)
t2 = obs2.getStation().getBaseFrame().getTransformTo(eme, obs2.getDate())
obs_pos2 = t2.transformVector(obs2.getStation().getBaseFrame().zenith)
t3 = obs3.getStation().getBaseFrame().getTransformTo(eme, obs3.getDate())
obs_pos3 = t3.transformVector(obs3.getStation().getBaseFrame().zenith)
Transform observation RaDecs to unit vectors
x1 = math.cos(obs1.getObservedValue()[0])*math.cos(obs1.getObservedValue()[1])
y1 = math.sin(obs1.getObservedValue()[0])*math.cos(obs1.getObservedValue()[1])
z1 = math.sin(obs1.getObservedValue()[1])
los_1 = Vector3D(x1, y1, z1)
x2 = math.cos(obs2.getObservedValue()[0])*math.cos(obs2.getObservedValue()[1])
y2 = math.sin(obs2.getObservedValue()[0])*math.cos(obs2.getObservedValue()[1])
z2 = math.sin(obs2.getObservedValue()[1])
los_2 = Vector3D(x2, y2, z2)
x3 = math.cos(obs3.getObservedValue()[0])*math.cos(obs3.getObservedValue()[1])
y3 = math.sin(obs3.getObservedValue()[0])*math.cos(obs3.getObservedValue()[1])
z3 = math.sin(obs3.getObservedValue()[1])
los_3 = Vector3D(x3, y3, z3)
date_1 = obs1.getDate()
date_2 = obs2.getDate()
date_3 = obs3.getDate()
geo_dist = 37000000.0 #meters
range_1 = geo_dist
range_3 = geo_dist
estimate = IOD.estimate(obs_pos1, obs_pos2, obs_pos3, los_1, date_1, los_2, date_2, los_3, date_3, range_1, range_3)
Could someone help point me to what I’m doing wrong?