RFC - Improve GNSS integrity information reporting - #30
Conversation
…fing and jamming status entries + add NovAtel output evaluation
|
@peterbarker @auturgy @tridge @julianoes Your feedback needed please. Thanks @bgptiste |
|
Thanks @bgptiste - we didn't get to this in the MAV Call, but will add to next week's agenda. |
|
Thanks a lot @hamishwillee. I have just updated the RFC to address the intended message rates and overhead, and I also mentioned the perspective of DroneCAN standardization. Another point that will be very interesting to discuss is the decision to use a single multi-band |
|
|
||
| The proposed structure stores the information for all reported bands in a single `GNSS_BANDS` message. The `band_count` field indicates the number of frequency bands contained in the arrays below. Each field is therefore defined as a static array of size `GNSS_MAX_BANDS` (not yet defined), with the same index referring to the same reported band across all arrays. This avoids the overhead of multiple small messages while keeping the message structure simple for flight controller implementations. The choice of this structure is further discussed and justified in the [Intended message overhead](#intended-message-overhead) section. | ||
|
|
||
| Minimal `GNSS_BANDS` message: |
There was a problem hiding this comment.
Move to top of section
hamishwillee
left a comment
There was a problem hiding this comment.
@bgptiste I have only scanned this, but it looks like a really good basis for the discussion. Thank you.
Co-authored-by: Hamish Willee <hamishwillee@gmail.com>
…th terminology descriptions) + document structure (after reviews)
|
Thank you for the feedback @hamishwillee. The suggestions are really helpful. I have added the proposed message at the top of each section, as recommended. However, I decided not to include the changes made in a Regarding RAIM, a second look at the receiver documentation revealed that |
|
This pull request has been mentioned on Dronecode Forum | Open Source Drone Development. There might be relevant details there: https://discuss.px4.io/t/px4-dev-call-jul-22-2026-team-sync-and-community-q-a/49236/4 |
|
I captured my thoughts for the full picture of GNSS rework across mavlink/dronecan here |
|
@peterbarker @tridge Can you please review this? Would appreciate you also commenting on Jake's broader proposal linked in ^^^. That is complementary to this RFC - it puts the RFC in the context of a message set like this: Messages are linked by common id. Suggestion is GNSS is what is always needed and is streamed by default. The others are on-demand from GCS, and streamed at notionally 1Hz or less. It all seems very well thought out by someone who manufactures, uses and integrates these things in both MAVLink and CAN. Given how flawed our current messages are, it seems timely to discuss - right? |
|
@bgptiste I'm a skeptic on this, it presupposes a GCS operator can react to a hostile GNSS environment to avoid the issue. By the time a GCS operator can react to this sort of information the EKF state is already corrupted. It also assumes there is a mechanism for the operator to reconfigure the receiver to avoid the issue - the only way we have to do that now is GNSS protocol tunneling (eg. tunnel UBX to the GCS). That is quite doable (I've done it in flight) but if you have that then you wouldn't be using a generic MAVLink GNSS integrity message, you would be using that tunneled data to display the vendors own information which is likely to be a lot more useful (eg. the ubx spectrogram display) |
They can land, switch to a manual mode, or reschedule the mission.
I'd argue that reconfiguration / mitigation is a separate issue. And you're right that it's more complex and likely cannot be done generically. We've had a lot of users ask for this. Making GNSS receiver health a first class feature at the GCS can prevent confusion and improve mission reliability. It is better to know about GNSS health issues while on the ground than finding out through EKF divergence after takeoff. It will especially help new users doing airframe bringup, since they often make the mistake of positioning USB or other RF emitting devices too close to their receivers. |
|
Checked the u-blox side of this against the F9 HPG 1.51 and X20 HPG 2.10 interface descriptions while wiring
|
|
My general feedback is that I like the direction it takes, but I'm unsure how much in-depth debugging info we need to send via mavlink. The average user (at least the average user of our drones) won't know the difference between "L1 is jammed" and "L1 is jammed by a 200 kHz carrier at -70 dBm", to quote from Jake's broader proposal (our users probably won't know what L1 is). But knowing that when a receiver is jammed is important information to them: they need to start thinking about fallbacks and alternatives. In any case, @dakejahl has made it clear that they have an actual use case for sending this much debugging info, so it definitely makes sense to enable that with a dedicated message. And then for each individual case you can choose if you want to send only the "high-level" info, or also all the in-depth details per band. Might also depend on available bandwidth etc of your setup. In that sense, I think the proposed split into GNSS_INTEGRITY and GNSS_BANDS works very well. (Add in @dakejahl 's proposition of GNSS_SATS and possibly even forwarding of the spectrum if bandwidth allows for full-in-depth live debugging.)
|
|
@tridge Jake's response to your concern seems reasonable. The design makes the data of concern optional, so it doesn't have to clog the network if unwanted - just like any other debugging or domain/specific messages. @bgptiste Can you update the PR in line with Jakes comments in #30 (comment) The normal next-step in the MAVLink process is to create PRs for development.xml and start prototyping. The prototyping should test the assumptions we're making here - such as usefulness of specific fields. I'd also like to see progression on the other messages you talk about above @dakejahl - is there any that you would like me to try push forward? |
|
@hamishwillee Yes, I will update the RFC accordingly. Next, as requested in the broader proposal, I will provide an evaluation of the receiver field mapping for the future |
|
Thanks for the feedback @dakejahl. I have updated the RFC accordingly to address these points. Before moving forward with the prototyping PR in
|
The current
GNSS_INTEGRITYmessage provides GNSS resilience information at the receiver level, such as jamming, spoofing, and signal authentication status. However, it does not expose information at the individual RF-band level.This RFC proposes introducing a new
GNSS_BANDSmessage to complementGNSS_INTEGRITYby reporting jamming information for each RF front-end / frequency band. Providing per-band visibility would enable operators to better understand interference events, support post-flight analysis, and facilitate decision-making.The proposal also aims to keep these two messages as vendor-agnostic as possible, allowing different GNSS receiver manufacturers to populate the same fields using equivalent information while avoiding vendor-specific abstractions. The primary GNSS receiver outputs considered in this work are those from Septentrio (Mosaic-G5 and X5) and u-blox (X20 and F9) receivers, whose formats are supported by PX4 and ArduPilot. NovAtel OEM7 receiver outputs were also studied as secondary references to support and validate this vendor-agnostic approach.
Full details are provided in the dedicated RFC.
Thanks to @dakejahl for the valuable discussions that helped shape this proposal.
I look forward to your feedback and any suggestions for improvement.