The main goal is to split up the task of propagating Orbits for a long time between multiple control cycles. If an Orbit gets send from ground and needs to be updated to the current time this will ensure the Orbit gets updated over many control cycles, so the flight computer won't stall.
Summary of changes
Added a multi cycle propagator to the Orbit class with an interface of:
/** The maximum size of a 7 grav call higher order step (ns). */
GNC_TRACKED_CONSTANT(static const int64_t,maxlongtimestep,100'000'000'000LL);
/** The maximum size of a 1 grav call step (ns). */
GNC_TRACKED_CONSTANT(static const int64_t,maxshorttimestep,200'000'000LL);
These constants are internal to the Orbit class propagator implementation, which is tested in test_orbit.cpp.
C++ Orbit class Multi Cycle Propagation
The main goal is to split up the task of propagating Orbits for a long time between multiple control cycles. If an Orbit gets send from ground and needs to be updated to the current time this will ensure the Orbit gets updated over many control cycles, so the flight computer won't stall.
Summary of changes
void startpropagating(const uint64_t& end_gps_time_ns, const lin::Vector3d& earth_rate_ecef)
int numgravcallsleft() const
void onegravcall()
void finishpropagating()
Ptest Effects
None
Testing
Unit testing in
test_orbit.cpp
.Constants
These constants are internal to the Orbit class propagator implementation, which is tested in
test_orbit.cpp
.Documentation Evidence
Inline documentation is sufficient.