New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Glonass : avoid passing corrupt ephemeris and TOW measurements to observables #655
base: next
Are you sure you want to change the base?
Glonass : avoid passing corrupt ephemeris and TOW measurements to observables #655
Conversation
7206004
to
c4efb9d
Compare
15c6d74
to
10877bd
Compare
Have you seen the updated test:
I'm checking, that every flipped data bit is being corrected by Glonass_Gnav_Navigation_Message::CRC_test. If not so, the test would fail and the CI would not pass. It does not give much improvement because single bit errors do not happen frequently (in my tests). The string is either completely broken with many flipped bits and is uncorrectable (ephemeris corruption is handled by the validator in this case) or the string does not have any flipped bits. |
10877bd
to
30579d2
Compare
No problem. Test data added. |
30579d2
to
cf90b85
Compare
I have all tests passing on my local machine. Let's wait for the CI to complete. |
cf90b85
to
0abf816
Compare
0abf816
to
605751d
Compare
I’m not sure if this is the way to go. Ephemeris data have their own validation mechanism, and I feel this external validation is somewhat heuristic. In this sense, I prefer the implementation at #667, which seems to stick to the ICD. However, this is a good idea that worth exploring it further, maybe as an anti-spoofing mechanism. Thanks for your work. |
@ValZapod @carlesfernandez |
Yes, please, make another PR only with the ECC error correction. |
Implement generic ephemeris validator: Keep previous and last valid ephemeris. Compare received ephemeris to previous and last valid. Count successful comparisions. Update last valid ephemeris if count reaches threshold. Add telemetry decoder configuration parameters: int32_t TelemetryDecoder_B1.ecc_reject - reject ephemeris if the ECC error counter reaches this value int32_t TelemetryDecoder_B1.ecc_resync - resync telemetry decoder if the ECC error counter reaches this value int32_t TelemetryDecoder_B1.validator_thr - number of equal ephemeris received, after that the ephemeris would be passed to observable. Set to 1 to disable validation bool TelemetryDecoder_B1.validator_accept_first - an option to always pass the first received ephemeris, bypassing the validator for one time. This may speed up first PVT solution at cost of higher probability of getting incorrect PVT in case, the first epehemeris would be corrupt. Signed-off-by: Vladislav P <vladisslav2011@gmail.com>
New configuration parameters int32_t TelemetryDecoder_1G.ecc_resync - resync telemetry decoder if the ECC error counter reaches this value int32_t TelemetryDecoder_1G.validator_thr - number of equal ephemeris received, after that the ephemeris would be passed to observable. Set to 1 to disable validation bool TelemetryDecoder_1G.validator_accept_first - an option to always pass the first received ephemeris, bypassing the validator for one time. This may speed up first PVT solution at cost of higher probability of getting incorrect PVT in case, the first epehemeris would be corrupt. Signed-off-by: Vladislav P <vladisslav2011@gmail.com>
605751d
to
e800ca2
Compare
@carlesfernandez |
Implemented Glonass ephemeris validation (much the same as with BeiDou).
Demonstration: https://www.youtube.com/watch?v=QvpAruQmgy8
GPS+Galileo for comparison: https://www.youtube.com/watch?v=WA-wMrXQyWg