The HPPOSLLA (high precision) functions in the RTK2 library (Sparkfun Ublox Library) seem messed up. First, the high precision Lat and Lon values are reported reversed, and second, the accuracy of Lat and Lon seems to be the same as the PVT reporting. Anyone else noticed this?
More info: Here’s a sample of what I’m referring to…
Lat: 296101684 Long: -951096067 (degrees * 10^-7) Alt: -19562 (mm) 3D Positional Accuracy: 17mm
HP Lat: -951096067, HP Lon: 296101684, Accuracy: 141
Notice the HP (high precision) accuracy seems to be the same as the regular accuracy, plus the Lat and Lon values are reversed (wrong!) in the HP output.
To print this to Serial, I just combined the two examples provided by the library (see below). I also enabled both the PVT and HPPOSLLH ubx messages to I2C.
/*
Get the high position accuracy of the RTK enhanced position
By: Nathan Seidle
SparkFun Electronics
Date: January 3rd, 2019
License: MIT. See license file for more information but you can
basically do whatever you want with this code.
This example shows how to inspect the accuracy of the high-precision
positional solution.
Feel like supporting open source hardware?
Buy a board from SparkFun!
ZED-F9P RTK2: https://www.sparkfun.com/products/15136
NEO-M8P RTK: https://www.sparkfun.com/products/15005
SAM-M8Q: https://www.sparkfun.com/products/15106
Hardware Connections:
Plug a Qwiic cable into the GPS and a BlackBoard
If you don’t have a platform with a Qwiic connection use the SparkFun Qwiic Breadboard Jumper (https://www.sparkfun.com/products/14425)
Open the serial monitor at 115200 baud to see the output
*/
#include <Wire.h> //Needed for I2C to GPS
#include “SparkFun_Ublox_Arduino_Library.h” //http://librarymanager/All#SparkFun_Ublox_GPS
SFE_UBLOX_GPS myGPS;
long lastTime = 0; //Simple local timer. Limits amount if I2C traffic to Ublox module.
void setup()
{
Serial.begin(115200);
while (!Serial); //Wait for user to open terminal
Serial.println(“SparkFun Ublox Example”);
Wire.begin();
if (myGPS.begin() == false) //Connect to the Ublox module using Wire port
{
Serial.println(F(“Ublox GPS not detected at default I2C address. Please check wiring. Freezing.”));
while (1);
}
myGPS.setI2COutput(COM_TYPE_UBX); //Set the I2C port to output UBX only (turn off NMEA noise)
myGPS.saveConfiguration(); //Save the current settings to flash and BBR
}
void loop()
{
//Query module only every second. Doing it more often will just cause I2C traffic.
//The module only responds when a new position is available
if (millis() - lastTime > 1000)
{
lastTime = millis(); //Update the timer
long latitude = myGPS.getLatitude();
Serial.print(F("Lat: "));
Serial.print(latitude);
long longitude = myGPS.getLongitude();
Serial.print(F(" Long: "));
Serial.print(longitude);
Serial.print(F(" (degrees * 10^-7)"));
long altitude = myGPS.getAltitude();
Serial.print(F(" Alt: "));
Serial.print(altitude);
Serial.print(F(" (mm)"));
long accuracy = myGPS.getPositionAccuracy();
Serial.print(F(" 3D Positional Accuracy: "));
Serial.print(accuracy);
Serial.println(F(“mm”));
Serial.print("HP Lat: ");
int32_t latitude2 = myGPS.getHighResLatitude();
Serial.print(latitude2);
Serial.print(", HP Lon: ");
int32_t longitude2 = myGPS.getHighResLongitude();
Serial.print(longitude2);
Serial.print(", Accuracy: ");
uint32_t accuracy2 = myGPS.getHorizontalAccuracy();
Serial.println(accuracy2);
Serial.println();
}
}
Hi dkelly79,
Good catch. Something definitely is off with how that function is handling the HPPOSLLH UBX data. [This commit to the Ublox library is where that functionality was added if you want to take a look there. I am going to test and talk to the engineer assigned to that library to see if we can identify the problem and fix it. I have an idea that it is looking at the wrong byte and is actually not returning high precision data. The UBX-NAV-HPPOSLLH function is outlined on page 144 of the [UBX and NEMA Protocol Doc if you want to investigate a bit while we look into it some more.
Thanks for bringing this to our attention and I hope this helps explain what might be the root of the issue here.](https://cdn.sparkfun.com/assets/learn_tutorials/8/5/6/ZED-F9P_UBX_NMEA_and_RTCM_protocols.pdf)](Added functionality for reading from the High Precision Geodetic Posi… · sparkfun/SparkFun_Ublox_Arduino_Library@63fb62e · GitHub)