Support for Advanced Navigation ANPP format#861
Conversation
020b239 to
b4f5fd4
Compare
|
Hi @rtklibexplorer. This is my first PR to RTKLIB. I'm curious if there is any procedure you have for reviewing/merging, and what standard of testing you expect for incoming PRs. |
83d180b to
e6fb96d
Compare
|
@ourairquality I've addressed as much of your feedback as I could for the moment. Waiting for feedback from Advanced Navigation. In the meantime, I've continued testing this with the |
258b23f to
2575619
Compare
|
Imported the patch into my branch and updated as to personal preference, the raw buffer access with bounds checking, avoiding the pointer arithmetic, the signals mapping guess, also noted a few other integration issues, and reworked a little. Are there anpp files that can be shared for testing? |
I am sure I can find some non-proprietary stuff that I can share next week. |
cbaaa2c to
5473b43
Compare
|
Here are some more issues to consider, a few integration matters, and some suggestions for adnav.c, there were some switch-break statements missing at least, and a few casts to help quieten compiler warnings. Untested, but will if some data can be shared. |
|
@ourairquality I've absorbed 90% of your suggestions and fixed a couple of additional spots in the same spirit. Couple of exceptions:
I'm not going to be super insistent on any of these, just noting them for easier review. Definitely a big fan of everything else, still pending feedback from the manufacturer regarding the frequency bands. |
|
CMakeLists.txt - might be best to avoid white space changes to files otherwise not changed. |
4854533 to
49787af
Compare
|
On a related note, a small CONTRIBUTING file or even section at the end of the README might be useful. There's a good amount of generally actionable stuff in our discussion of this PR. |
|
I have offloaded the task of finding a non-proprietary snippet to Advanced Navigation, since they are more likely to have something I can publish freely than I am. |
|
@ourairquality I've gotten a response back from Advanced Navigation regarding the frequency mapping. The mapping is not strictly 1-to-1, so I've attempted to choose the middle band for each available option. Please let me know if you prefer different options for any of these choices. The table that was given to me is this:
|
|
Could you ask them to clarify the bands for the common but missing GPS rinex 1W 2W 1X 2X and 5X. At a guess L1 C should also include 1X, 1P should also include 1W, 2P should also include 2W, L2 C should also include 2X, L5 should also include 5X. For Galileo: E1OS also 1X. For QZSS: L6 LEX also 6S. For L5 do they expect us to distinguish between the satellite block and have a separate mapping for 5IQX vs 5DPZ, it looks like satellites send either L5 of L5S but not both so that might work? Receiver options will need to be added for the mappings for each of these. It does not seem credible to pick just one signal. The defaults should be based on the common usage, e.g. for BDS even Trimble report 2I 7I 6I so use that etc, I gave you the common usage, just use those for the defaults. It appears they have a converter for rinex 'Tools > Log Converter', but I see no configuration options for the signal mapping, and could you ask them to document the signal selection configuration for their own tool to make that clear for us too: |
Format defined here: https://docs.advancednavigation.com/boreas-d/ANPP/Advanced%20Navigation%20Packet.htm
This implementation only handles the raw satellite measurements, not the entire protocol.
Receiver selection is done in the same way as for SBF format: the
optfield is searched for-RCVR{n}, wherenmust be an integer in the range [0-255] since ANPP theoretically supports that many antennae per unit.Testing
Compared raw output from Boreas D-90 parsed with https://github.com/saronic-technologies/liban-rs/ (see saronic-technologies/liban-rs#18) to result of parsing with rust bindings to this library in https://github.com/kpwebb/rtklib-ffi/ (see joe-saronic/rtklib-ffi#1). Verified that obs fragments are handled correctly.
Inspected output of convbin from two receivers in a well-known dataset to ensure correct numbers of observations, constellations, etc. Main dataset can not be provided, but a small edited sample is available in the integration tests of the rust wrapper.