PointPerfect MQTT Localized Distribution
Overview
Introduction
PointPerfect Localized correction service via MQTT (Internet) offers quick delivery of high precision accuracy by providing your device only the SPARTN corrections applicable to your location. This feature offers several advantages over the traditional continental streams, including significantly reduced bandwidth requirements, unencrypted streams, and seamless transition between regions.
This page describes our PointPerfect correction service with localized corrections delivered via our MQTT service. If you wish to receive all continental corrections, see our Continental corrections page. If you wish to use our continental corrections service with an L-Band satellite delivery, please see our L-Band Configuration page.
Benefits of Localized Corrections Distribution
PointPerfect Localized offers many benefits to users, including:
Reduced bandwidth requirements: PointPerfect Localized can reduce bandwidth requirements by up to 80%. This is a significant advantage for applications sensitive to bandwidth constraints, such as those that operate in remote areas or use low-power devices.
Unencrypted Corrections: The device does not need to subscribe to the dynamic keys topic.
Retained Privacy: PointPerfect Localized over MQTT retains user privacy by not sending the device's precise location to the service to receive correction data. This is done by using a general node-based location system.
Centimeter-level accuracy: PointPerfect Localized uses the same PPP-RTK technology as the continental PointPerfect service, delivering centimeter-level accuracy in seconds.
Global coverage: PointPerfect Localized still covers all the same regions as continental.
High reliability and availability: PointPerfect Localized is backed by u-blox's global network of reference stations, ensuring high reliability and availability even in challenging environments.
-------------------------------------------------------------------------------------------
Do's & Don'ts: Best Practices and Common Pitfalls
Do's:
Check out our "Python sample script PointPerfect MQTT Client": Our sample script located within your portal location services -> downloads -> PointPerfect can give you a great example on how to implement this into your setup
Keep your F9 or X20 receiver firmware up to date: Regularly update your receiver firmware to ensure compatibility with SPARTN corrections and to benefit from performance enhancements, bug fixes, and new features.
Don'ts:
Don’t skip the download of credentials: Forgetting to download the u-center config or Client Key and Client Certificate will prevent your host device from authenticating with the MQTT broker. Always make sure to complete this step before moving forward with the setup.
Don’t Use the same login credentials on multiple devices at once. Doing so will lead to frequent disconnect and reconnect issues.
-------------------------------------------------------------------------------------------
Still need help?
If you need more help or have any questions, please send an email to services-support@u-blox.com.
PointPerfect Localized System Architecture
The correction data format used by the Localized distribution method is the same as in our high-precision Continental streams. For the localized PointPerfect architecture, the correction data is spread across multiple nodes and delivered through individual node MQTT Topics.
How it works
Localized MQTT Topic Structure:
Localized SPARTN correction streams are delivered over MQTT using the following topic structure:
Correction stream topics: pp/ip/{tile}/{node}
Dictionary topics: pp/ip/{tile}/dict
Tiles and nodes are explained below.
Tiles
Each region where localized corrections are offered is divided into Tiles using a predefined algorithm similar to a "GeoHash." Lower-numbered tiles cover larger areas, and the selected tile is based on device location and tile level.
There are two node densities: L0-L2 use a lower-density format for legacy support and are no longer recommended.
L3-L5 use a higher-density format and should be used for optimal performance. Their node density is identical, with only the tile size differing. L3 and L4 are for high-speed applications like airborne use, but L5 is recommended as it provides the best balance of tile size and data efficiency.
Since tile data is served over the same TCP/MQTT connection as corrections, requesting new tiles while moving has minimal overhead. Clients should fetch tile data dynamically at startup rather than relying on a hardcoded list.
The following image illustrates an L5 tile, with red triangles representing nodes and a green-bordered rectangle marking the tile boundary. The yellow-highlighted nodes, both inside and outside the tile boundary, indicate the active nodes available to support users in dynamic environments. These external nodes ensure seamless transitions when moving between tiles.
Important Note: The original Tile (Low Densified) Levels 0-2 are now legacy levels; these are currently provided for backwards compatibility but will be retired soon. To get the best performance and avoid interruption we advise customers to migrate from these old levels to the new more densified levels – our recommendation being L5.
The table below shows the approximate coverage area size and maximum number of nodes within each Tile Level.
Nodes
SPARTN correction streams are generated for each of these virtual Nodes to provide a high-precision positioning solution for that location. Each node name is based on its location and provides localized SPARTN data through its corresponding localized node topic. The data transmitted through each node is optimized based on its location to only provide corrections relevant to the user greatly reducing the amount of bandwidth required. Dynamic users moving throughout the region must transition to different nodes based on proximity, to continuously and seamlessly access the SPARTN correction streams.
Important Note: The names, coordinates AND OR number of the nodes may change. We therefore recommend that customer implementations should be made dynamic so they support possible changes that may be made in the future.
Delivery
To ensure you receive relevant localized data, the device will select the localized node topic to subscribe to by using its location. The image below is an example architecture for a service to device distribution of localized data.
After provisioning the device, i.e. obtaining the client credentials from the Thingstream portal as explained in the Point Perfect Getting Started guide, the device will calculate the tile location.
Once the tile has been calculated, the device subscribes to the node dictionary topic (‘pp/ip/{tile}/dict’) for the calculated tile and receives a list of available nodes within that Tile. The device then calculates and subscribes to the nearest node topic to receive localized corrections for its location. The size data in this tile/dictionary topic relates to the number of nodes provided in that Tile.
The topic format will be ‘pp/ip/{tile}/{node}’ with the tile and node identified as most optimal for your current location. Note, this topic does not have any leading ‘/’ characters, unlike our other distribution methods such as Continental or L-band.
The message is encapsulated in a JSON structure using the following format:
{
"tile": "L5N6125E02375",
"nodeprefix": "pp/ip/L5N6125E02375/",
"nodes": [
"N5957E02219",
"N5957E02272",
"N5957E02325",
...
"N6280E02520"
],
"endpoint": "pp.services.u-blox.com"
}
Once the device has received a list of the nodes, connect to the Correction MQTT endpoint and subscribe to the nearest Node topic using the device position.
This node topic provides the localized correction data. The structure for the Node topic is as follows:
pp/ip/{tile}/{node}
For instance, if the nearest node from the provided JSON example is N5957E02272, subscribe to the following topic
pp/ip/L5N6125E02375/N5957E02272
Once the device has subscribed to the nearest node topic, it will start receiving the localized corrections.
Service to Service
For service to service (S2S), the user is responsible for distributing the localized corrections data, this requires additional configuration at the user backend to redistribute the service data to the devices.
To access the service via service-to-service approach, please contact us at support@thingstream.io
Configuration
To complete the configuration, follow the steps in the PointPerfect u-center guide.
Python sample script: PointPerfect MQTT Client
To evaluate the PointPerfect localized version with an MQTT Client built-in your host application, please refer to the PointPerfect MQTT Client sample python script available in the Thingstream Downloads PointPerfect section to help you get started.
Pseudo code for Tile calculation
The psedo code for Tile calculation is shared below for reference:
function GetTileTopic(lat, lon, level):
delta = LevelToDelta(level)
dh = "N"
bh = "E"
if lat < 0:
dh = "S"
if lon < 0:
bh = "W"
llat = floor(lat / delta) * delta
llon = floor(lon / delta) * delta
clat = llat + (delta / 2)
clon = llon + (delta / 2)
clat = round(clat * 100)
clon = round(clon * 100)
slat = abs(clat)
slon = abs(clon)
topic = "L" + level + dh + format(slat, "0000") + bh + format(slon, "00000")
return topic
function LevelToDelta(level):
if level is in Level2Delta:
return Level2Delta[level]
return 10.0
Level2Delta = {
3: 10.0,
4: 5.0,
5: 2.5
}
Note: The pseudocode provided above represents a high-level representation of the code and may need further modification to fit the specific programming language or environment you are working with.
Reference Documentation
[1] ZED-F9P Integration manual, UBX-18010802
[2] u-center User guide, UBX-13005250
[3] u-blox F9 HPG 1.32 Interface description, UBX-22008968
[4] C099-F9P application board User guide, UBX- 18063024
[5] EVK-F9P-01 evaluation kit User guide, UBX-22038408
[6] Thingstream Knowledge Base – Services Support