We have been seeing that orbit.valid is always false, even though time.valid is sometimes true. I traced the issue this morning and found that it was related to the GPS issues regarding the GPS week number.
In FSW, we set orbit.valid in line 114 of OrbitEstimator.cpp:
orbit_valid_f.set(_estimate.valid());
We define _estimate.valid() in Orbit_Estimate.hpp:
bool valid() const {return _orbit.valid();}
_orbit.valid() is defined in Orbit.h:
bool valid() const{return _valid;}
We set _valid in _check_validity() which is defined on line 135 of Orbit.h. Looking at this function, there is:
//time checkif (!(_ns_gps_time <= MAXGPSTIME_NS)) goto INVALID;if (!(_ns_gps_time >= MINGPSTIME_NS)) goto INVALID;
We have been seeing that orbit.valid is always false, even though time.valid is sometimes true. I traced the issue this morning and found that it was related to the GPS issues regarding the GPS week number.
In FSW, we set
orbit.valid
in line 114 ofOrbitEstimator.cpp
:orbit_valid_f.set(_estimate.valid());
We define
_estimate.valid()
inOrbit_Estimate.hpp
:bool valid() const {
return _orbit.valid();
}
_orbit.valid()
is defined inOrbit.h
:bool valid() const{
return _valid;
}
We set
_valid
in_check_validity()
which is defined on line 135 ofOrbit.h
. Looking at this function, there is://time check
if (!(_ns_gps_time <= MAXGPSTIME_NS)) goto INVALID;
if (!(_ns_gps_time >= MINGPSTIME_NS)) goto INVALID;
We defined:
GNC_TRACKED_CONSTANT(const int64_t, MAXGPSTIME_NS, (20LL*52LL+(int64_t)gnc::constant::init_gps_week_number)*(int64_t)gnc::constant::NANOSECONDS_IN_WEEK);
GNC_TRACKED_CONSTANT(const int64_t, MINGPSTIME_NS, (-20LL*52LL+(int64_t)gnc::constant::init_gps_week_number)*(int64_t)gnc::constant::NANOSECONDS_IN_WEEK);
GNC_TRACKED_CONSTANT(unsigned short, init_gps_week_number, 2045);
Given the previous GPS week number issues we had, this could maybe explain why
orbit.valid
is always false.