Protocole de communication pour le RTKronos
tags: RTK, Kronos, RTKronos, communication
1. Utilisation port série et port SPI module XLBee 2
La carte renvoie toutes les secondes la position et l'orientation de déplacement données par le GPS.
Ces informations sont disponibles sur le port série et le port SPI du module XLBee 2 (SOCKET 2 sur la carte).
1.1 Protocole
- [0:1] : (uint16) packet_id
- [2:3] : (uint16) packet_length
- [4:packet_length] : payload
1.1.1 Payload format for every packet ID/type
1.1.1.1 Id 0x0001: Complete position information
Field | Format | Description | Offset | ||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
sol status | Enum (4 octets) |
|
0 | ||||||||||||||||||||||||||||||||||||
pos type | Enum (4 octets) |
|
4 | ||||||||||||||||||||||||||||||||||||
lat | Double (8 octets) | Latitude | 8 | ||||||||||||||||||||||||||||||||||||
lon | Double (8 octets) | Longitude | 16 | ||||||||||||||||||||||||||||||||||||
hgt | Double (8 octets) | Height (altitude) | 24 | ||||||||||||||||||||||||||||||||||||
undulation | Float (4 octets) | Geoid undulation (distance between the geoid and the WGS84 ellipsoid in meter) | 32 | ||||||||||||||||||||||||||||||||||||
datum id# | Enum | ID code of coordinate system, onlysupporting WGS84 at present, ID: WE | 36 | ||||||||||||||||||||||||||||||||||||
lat σ | Float (4 octets) | Latitude standard deviation | 40 | ||||||||||||||||||||||||||||||||||||
lon σ | Float (4 octets) | Longitude standard deviation | 44 | ||||||||||||||||||||||||||||||||||||
hgt σ | Float (4 octets) | Height standard deviation | 48 | ||||||||||||||||||||||||||||||||||||
stn id | Char[4] | Base station ID | 52 | ||||||||||||||||||||||||||||||||||||
diff_age | Float (4 octets) | Differential age in seconds | 56 | ||||||||||||||||||||||||||||||||||||
sol_age | Float (4 octets) | Solution age in seconds | 60 | ||||||||||||||||||||||||||||||||||||
#SVs | uint8 | Number of satellite tracked | 64 | ||||||||||||||||||||||||||||||||||||
#solnSVs | uint8 | Number of satellite used in solution | 65 | ||||||||||||||||||||||||||||||||||||
sig mask | Enum (1 octet) |
|
66 |
1.1.1.2 Id 0x0002: Heading data
Field | Format | Description | Offset |
---|---|---|---|
heading | Float (4 octets) | Heading angle in degrees from True North | 0 |
1.1.1.3 Id 0x0003: Satellite count
Field | Format | Description | Offset |
---|---|---|---|
GPS L1 | uint8 | Number of active satellites on GPS L1 band | 0 |
GPS L2 | uint8 | Number of active satellites on GPS L2 band | 1 |
GPS L5 | uint8 | Number of active satellites on GPS L5 band | 2 |
GLONASS L1 | uint8 | Number of active satellites on GLONASS L1 band | 3 |
GLONASS L2 | uint8 | Number of active satellites on GLONASS L2 band | 4 |
BD2 B1 | uint8 | Number of active satellites on BD2 B1 band | 5 |
BD2 B2 | uint8 | Number of active satellites on BD2 B2 band | 6 |
BD2 B3 | uint8 | Number of active satellites on BD2 B3 band | 7 |
Galileo E1 | uint8 | Number of active satellites on Galileo E1 band | 8 |
Galileo E5 | uint8 | Number of active satellites on Galileo E5 band | 9 |
2. Utilisation sortie directe GPS RTK
En Mars 2022, nous avons ajouté la sortie en direct sur le port dédié du GPS (port COM3 de l'UB4B0).
Cela permet d'avoir une fréquence des messages garantie par le module GPS RTK (sans délai de traitement).
Pour le moment seuls les messages de type GNGGA sont disponibles sous format ASCII.
2.1 Description du format GNGGA
ID | Champs | Description | Nombre et type des symboles | Example |
---|---|---|---|---|
1 | $GNGGA | Préambule permettant d'identifiant le type du message | 6 caractères fixes | $GNGGA |
2 | utc | Temps UTC de la position calculée (heures/minutes/secondes/dixièmes de secondes). Précision 10ms | hhmmss.ss (8 digits et un point de virgule) | 132530.60 |
3 | lat | Latitude(DDmm.mmmmmmmm) en degrés, minutes et décimales de minutes | LLLL.LL | 4834.65851118 |
4 | lat dir | Latitude direction(N = North, S = South) | a | N |
5 | lon | Longitude(DDDmm.mmmmmmmm) en degrés, minutes et décimales de minutes | LLLLL.LL | 00744.99485270 |
6 | lon dir | Longitude direction(E = East, W = West) | a | E |
7 | Qualité de la solution |
Position Solution Quality indicator | x | 1 |
8 | Nombre de satellites utilisés pour calculer la solution | Nombre de satellites utilisés, pas équivalent au nombre de satellites vus. | xx | 11 |
9 | hdop | Horizontal dilution of precision | x.x | 1.5 |
10 | alt | Altitude par rapport au niveau de la mer peut être négatif. | x.xxxx | 151.4783 |
11 | Unité pour l'altitude | M=mètres | M | M |
12 | ondulation | Ondulation du géoïde: la distance entre le géoïde et le modèle terrestre éllipsoïde WGS84 peut être négatif | x.xxxx | 48.4225 |
13 | Unité pour l'ondulation | M=mètres | M | M |
14 | Âge des données différentielles | Âge des données de correction différentielles en secondes (<99s) utilisées pour corriger la solution et provenant d'une base RTK. Vide lorsqu'aucune correction différentielle de moins de 99 secondes n'est disponible. | xx | 13 |
15 | ID de la base RTK de correction | Id de la station de base d'où proviennent les corrections différentielles utilisées. Vide lorsqu'aucune correction différentielle de moins de 99 secondes n'est disponible. | xxxx-xxxx | 0000-0002 |
16 | *CS | Checksum | *hh | *71 |
17 | [CR][LF] | Sentence terminator (carriage return, new line) | \r\n | \r\n |
2.1.1 Passage de degrés, minutes, décimales de minutes à degrés décimaux
- séparer les degrés des minutes (minutes décimales) vous avez donc:
- un entier pour les degrés
- un flottant pour les minutes
- diviser les minutes décimales par 60 (mm.mmmmmmmmm / 60)
- ajouter le résultat aux degrés précédent
- Pour la latitude, si la lettre est S, multiplier par -1.
- Pour la longitude, si la lettre est W, multiplier par -1.
2.1.2 Example de trame complète
$GNGGA,132530.60,4834.65851118,N,00744.99485270,E,1,11,1.5,151.4783,M,48.4225,M,,*71
Cela correspond en degrés décimaux à :
- latitude: (48+34.65851118/60) soit: 48.577641853 degrés
- longitude: (007+44.99485270/60) soit 7.749914211666667 degrés
À chaque fois, on est du côté positif, si on était en latitude S, ou en longitude W, il faudrait multiplier le résultat par -1.
2.1.3 Comparaison avec les trames sur XLBEE2
Notez bien que les valeurs données pour la précision de la solution sont très différentes entre les 2 types de trames.
On peut néanmoins faire une équivalence:
Trame XLBEE2 | Trame COM3 |
---|---|
0: pas de solution | 0: pas de solution |
16: Single point position | 1: point fix |
17: Pseudo-range difference decomposing | 2: pseudo-range difference |
48 ou 49 ou 50: XXXX_INT | 4: RTK fixed solution |
32 ou 33 ou 34: XXXX_FLOAT | 5: RTK floating solution |
1: Position has been fixed manually | 7: Position set by user(Fixed Position) |
Donc la meilleure solution a pour valeur 4 dans la trame GNGGA et pour valeur 50 dans la trame sur le XLBEE.
Elles ne sont pas exactement équivalentes car on ne sait pas s'il s'agit de la valeur 48, 49 ou 50 sachant qu'en terme de précision:
50 > 49 > 48.
2.2 Librairie arduino recommandée pour parser les messages GNGGA
MicroNMEA de Steve MARPLE: