GRSS Orbit Determination Module (grss.fit)#
The orbit determination code within GRSS is completely on the Python side of things, but it heavily relies on the C++ propagator binding. Given a small body orbit that needs to be fitted to a set of observations, the module uses the batch least squares algorithm to solve for an updated nominal orbit.
The optical measurements are acquired using the Minor Planet Center API, and the radar measurements are acquired using the JPL Small-body Radar API. The optical astrometry is preprocessed to account for the following :
Once the optical astrometry has been processed, the radar astrometry has been acquired, and the initial orbit is provided by the user, the least squares filter can be run. As of now, the filter can fit the nominal state, the nongravitational acceleration parameters, and any impulsive maneuver events. Currently the partial derivatives in the normal matrix are calculated using 1st-order central differences by default, but analytical partial derivatives are also a choice offered to the user. The filter also implements an outlier rejection scheme [4] to make sure any spurious measurements do not contaminate the fit.
References