In the IRIS forums at DIYDronres, Ardupilot, and the IRIS Facebook group I have seen reports from various users who have complained about low HDOP (Horizontal Dilution of precision) reported by their IRIS when trying to arm in Loiter or Auto mode (Both are GPS assisted modes). In these cases the HDOP value determined and reported by Arducopter is higher than 2.0 after powering up IRIS. This value is higher than the default value of 2.0 for the GPS_HDOP_GOOD paramter value. As a result the pre-arm checks fail and IRIS is not able to arm in a GPS-assisted flight mode.
I’m facing this situation in probably 8-9 out of 10 flights. Yet, when arming IRIS and taking off manually in Stabilize mode I’m able to switch into Loiter mode right after takeoff. While the HDOP value reported by IRIS via DroidPlanner2 would still be above 2.0, the vehicle does not show any negative performance with regards to GPS. In fact IRIS would remain in position quite well within a 1m x 1m x 1m or even smaller “box” in the sky. There is no twitching or leaving this very precise location.
So what could be the reason between the GPS module on IRIS actually working pretty well and the reported “quality” number being so low?
Finding the underlying bug
I did a lot of digging – and I mean a lot of digging – and even thought about replacing my 3DR GPS module that only supports GPS with a module that also supports GLONASS, BeiDou and Galileo. The added number of satellites – especially from GLONASS – should result in lower HDOP values.
And then I stumbled over the Ardupilot bug #644. It states that the value reported back from the GPS module for HDOP isn’t actually HDOP but PDOP (Position (3D) Dilution of precision). So what? Isn’t that close enough. Turns out, it’s not!
How does HDOP and PDOP differ?
Let’s use the tool http://satpredictor.navcomtech.com/ and determine the expected xDOP values for the location of the 3DR Berkeley office based on a 10 degree elevation mask. This means that satellites below a 10 degree angle are not visible due to trees, building or mountains (See Figure 1). It is the default value for the above tool and a reasonable assumption.
Let’s have a look and the predicted xDOP values for the above location on Friday, September 12th 2014 (See Figure 2). Any other date or location will yield similar results.
We can see a very interesting result:
You can see the values for HDOP – shown in grey at the bottom. That’s the values that our autopilot in IRIS believes it is receiving from the GPS module and what is being displayed in Droidplanner2 or Mission Planner. Notice that I highlighted the 2.0 xDOP line in red, which corresponds to the cut-off value based on which IRIS makes the decision to arm or not. Thus we can see that HDOP for this location and date is always below 2.0. That’s great! With that we should be able to always arm IRIS in Loiter or Auto at that location and on that day.
But you can also see the PDOP – shown in green. That’s what the autopilot of IRIS is really receiving from the GPS module, instead of HDOP. Notice that quite frequently this PDOP value is higher than 2.0, often much higher. During these periods – when the PDOP is higher than 2.0 – IRIS will not arm, even though the corresponding HDOP would be low enough. These are the moments when I’m attempting my 8-9 out of the 10 flights that I mentioned before.
How to fix this?
Ideally the above mentioned Ardupilot bug #644 should be fixed as soon as possible. That way the Autopilot of IRIS would actually make decisions on the correct value. Also we would see the correct HDOP value in DroidPlanner2 or Mission Planner.
In the meantime, I’ll increase the parameter value of GPS_HDOP_GOOD to 2.5 or 3.0. Looking at above graph, a PDOP of 3.0 would correspond to a HDOP of 2.0 for that location and time. From what I can tell, increasing this value should not have a negative effect, but rather allow me to arm IRIS in Loiter or AUto mode much more frequently.
Other that that I would also like to see a module from 3DR that supports GPS, GLONASS, BeiDou and Galileo. If Virtual Robotix in Italy can offer one, 3DR should be able to offer a plug&play replacement of their current module.