Qwiic RTK2 Library Issues

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)