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)	Value Status Description 0 SOL_COMPUTED Solution computed 1 INSUFFICIENT_OBS Insufficient observation 2 NO_CONVERGENCE No convergence 4 COV_TRACE Trace of covariance matrix exceeds maximum (trace>1000m)
pos type	Enum (4 octets)	Value Type Description NONE No solution 1 FIXEDPOS Position has been fixed manually 8 DOPPLER_VELOCITY Velocity is derived from real-time Doppler message 16 SINGLE Single point position 17 PSRDIFF Pseudo-range difference decomposing 32 L1_FLOAT L1 floating solution 33 IONOFREE_FLOAT Ionospheric-free floating solution 34 NARROW_FLOAT Narrow-lane floating solution 48 L1_INT L1 integer solution 49 WIDE_INT Wide-lane integer solution 50 NARROW_INT Narrow-lane integer solution	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)	Bit Mask Description 0x01 GPS L1 used in calculation 1 0x02 GPS L2 used in calculation 2 0x04 GPS L5 used in calculation 3 0x08 BDS B3 used in calculation 4 0x10 GLONASS L1 used in calculation 5 0x20 GLONASS L2 used in calculation 6 0x40 BD2 B1 used in calculation 7 0x80 BD2 B2 used in calculation	66

1.1.1.2 Id 0x0002: Heading data

Field	Format	Description	Offset
heading	Float (4 octets)	Heading angle in degrees from True North

1.1.1.3 Id 0x0003: Satellite count

Field	Format	Description	Offset
GPS L1	uint8	Number of active satellites on GPS L1 band
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 0 = fix not available or invalid 1 = point fix 2 = pseudo-range difference 4 = RTK fixed solution 5 = RTK floating solution 7 = Position set by user(Fixed Position)	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

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:

https://www.arduino.cc/reference/en/libraries/micronmea/

https://github.com/stevemarple/MicroNMEA