Vertical Accuracy and VDop

Hi everyone,
I am trying to understand the accuracy of the GPS on the drone. My current understanding is VDop is a mathematical value based on the quality of the GPS signal. This is reported by the GPS. From it one can calculate VAcc, or vertical accuracy.
My question now is how is this calculation done? If I compare the two values in the log, under the point GPA, there does not seem to be a clear relation.
All I really want to know is, how accurate the vertical position from the drone is, in meters. But I do not know how to find/calculate this.
Any help is appreciated.

Hi there,

It can not be done. VDop gives you an estimate on how good or bad the GPS solution could be, based on the geometric position of the satellites.

The real achieved accuracy is a lot harder to calculate. In fact so hard that the GPS firmware itself must do it for you. You do not get access to the internal information required to calculate it.
Some of the ardupilot GPS device drivers get this info from the GPS, some do not.
Some supported GPSs provide the info some do not.

What GPS are you using ?

Hi,
thank you for your reply.
I’m using a u-blocks 8 based GPS module, which is correctly detected

GPS 0: detected as u-blox at 115200 baud

I communicate with the drone via dronekit-python. What I have already found out is that what the drone logs as VDop, can be accessed as vehicle.gps_0.epv (it’s actually VDop*100). I would have expected this to be the actual error in meters, but I was wrong.

The most likely candidate for the error in the drone is Vacc, but I can already see that it can’t be correct. I had a flight where the drone kept the same altitude the entire time, yet the altitude reported by the GPS varied by 10 meters. Vacc was at max 2 though.

Yes, Vacc is the vertical accuracy, it is reported by the u-blox, and it is correctly read by the ardupilot FW.
The entire chain is there, you get the correct value in dronekit-python.

The problem is that the way that accuracy value works. According to u-blox it means that the drone had an error that was 68% (RMS) of the time smaller than 2 meters. They ignore the other 32% of the time where that error was above 2 meters.

Please contact u-blox for more information on how and why they calculate it like this.

OK, I’m still a little confused but getting there. Thank you. Will take a look at the u-blox datasheet later.

One thing though, dronekit gives me Vdop (*100), not VAcc. Haven’t found out how to pull this yet, but now I don’t think I will, as it seems to be worthless in any case. Oh well.

I started a GPA table in the wiki. https://github.com/ArduPilot/ardupilot_wiki/pull/1055
Do you know what SAcc, VV or SMS is?

Thank you for your help. :slight_smile:

SAcc - speed accuracy in RMS meters/second
Both the other two accuracies are in RMS meters
Vacc is only available if you use my mavlink version together with my ardupilot code. both are available on github.com but You need very specific branch names, that I do not remember right now, sorry.

I will try to help you out, but I can not promise when I will have time to.