This document describes the LARUS serial port protocol, as realized in sw_sensor_algorithm 2023-08-18.
The Larus sensor system can provide more information than the sensors that have been used in former navigation computers for gliders. Therefore the protocols need to be extended to be able to transfer new messages.
NMEA specification in short form see also NMEA Revealed by Eric S. Raymond:
Data is transmitted in serial async, 1 start-bit, 8 data-bits, 1 stop-bit, no parity. Data-bits are in least-significant-bit order. An NMEA sentence consists of a start delimiter, followed by a comma-separated sequence of fields, followed by the character '*', the checksum and an end-of-line marker . The checksum is the representation of two hexadecimal characters of an XOR of all characters in the sentence between – but not including – the $ and the * character.
The start delimiter is normally '$'. The first field of a sentence is called the "tag" and normally consists of a two-letter talker ID followed by a three-letter type code. Sentences are terminated by a sequence. Maximum sentence length, including the $ and is 82 bytes.
The Larus Flight Information Sensor System for Gliders provides essential information for glider navigation like
- Position and Time (Just the standard GPS stuff)
- Attitude and Heading (AHRS)
- GNSS/INS-based ultra-fast variometer and DSP-filtered average variometer
- Real-time wind measurement
- Air-density measurement
- Exchange of setting values
For the GNSS position, regular NMEA 0183 sentences are used
- $GPRMC Recommended Minimum Navigation Informatioin
- $GPGGA Global Positioning System Fix Data
For the aircraft attitude, wind, and air density information, some supplementary data points were included.
The additions can be found in the protocol around the $PLARx
NMEA sentences.
The x
is
W
when wind information is being sentA
when attitude information is sentD
for the instant air densityB
for battery voltageV
for climb rate (vario), pressure altitude and true air speed (TAS)S
For settings such as MacCready, water ballast, bugs and QNH
1 2 3 4 5 6 7 8 9 12 13
| | | | | | | | | | |
$GPRMC,hhmmss.ss,a,xxxx.xxxxx,a,xxxx.xxxxx,a,xxx.x,xxx.x,ddmmyy,,,a*hh<CR><LF>
Example:
$GPRMC,134943.69,A,4829.57602,N,1026.79034,E,057.0,081.9,170623,,,A*67
Minimum navigation informatioin
- Universal Time Coordinated (UTC) hhmmss.ss
- Status, V = Navigation receiver warning
- Latitude
- N or S
- Longitude
- E or W
- Speed over ground, knots
- Track made good, degrees true
- Date, ddmmyy
- Magnetic Variation, degrees (empty)
- E or W (empty)
- Signal integrity (A -> autonomous mode)
- Checksum
1 2 3 4 5 6 7 8 9 10 11 12 15
| | | | | | | | | | | | |
$GPGGA,hhmmss.ss,xxxx.xxxxx,a,xxxx.xxxxx,a,x,xx,x.x,xxxx.x,a,xx.x,a,,*hh<CR><LF>
Example:
$GPGGA,134943.69,4829.57602,N,1026.79034,E,1,24,1.0,2702.7,M,47.3,M,,*61
Global Positioning System Fix Data, Time, Position and fix related data for a GPS receiver
- Universal Time Coordinated (UTC) hhmmss.ss
- Latitude
- N or S (North or South)
- Longitude
- E or W (East or West)
- GPS Quality Indicator, 0 - fix not available, 1 - GPS fix, 2 - Differential GPS fix
- Number of satellites in view, 00 - 12
- Horizontal Dilution of precision
- Antenna Altitude above/below mean-sea-level (geoid)
- Units of antenna altitude, meters
- Geoidal separation, the difference between the WGS-84 earth ellipsoid and mean-sea-level (geoid), "-" means mean-sea-level below ellipsoid
- Units of geoidal separation, meters
- Age of differential GPS data, time in seconds since last SC104 type 1 or 9 update, null field when DGPS is not used (empty)
- Differential reference station ID, 0000-1023 (empty)
- Checksum
1 2 3 4 5
| | | | |
$PLARW,xxx,xx,a,a*hh<CR><LF>
Examples:
$PLARW,288,29,I,A*69
$PLARW,288,29,A,A*61
This sentence gives information about the both the average and instantaneous wind. The different fields have the following meaning:
- Wind Angle, 0 to 360 degrees
- Wind Speed, kph
- (A)verage or (I)nstantaneous wind
- Status, A = Data Valid
- Checksum
1 2 3 4
| | | |
$PLARA,xx.x,x.x,xx.x*hh<CR><LF>
Example:
$PLARA,27.5,4.0,69.2*45
This sentence gives information about the current attitude. The different fields have the following meaning:
- Roll angle (degrees, positive while turning right)
- Pitch angle (degrees, positive when nose up)
- Yaw angle (degrees, true heading)
- Checksum
1 2 3
| | |
$PLARD,xxxx.x,a*hh<CR><LF>
Example:
$PLARD,922.54,M*10
This sentence gives information about the instant air density at the current altitude. The different fields have the following meaning:
- Instant air density in g/m^3.
- a = (M)easured or (E)stimated
- Checksum
1 2
| |
$PLARB,xx.xx*hh<CR><LF>
Example:
$PLARB,12.33*4C
This block gives the measured voltage:
- Volatage in volts
- Checksum
1 2 3 4 5
| | | | |
$PLARV,x.xx,x.xx,xxxx,xx*hh<CR><LF>
Example:
$PLARV,1.46,2.98,2608,90*5C
This sentence fives climb rate (vario), pressure altitude and true air speed (TAS):
- Climb rate (vario) in m/s
- Averaged climb rate (avg vario) in m/s
- Pressure altitude in m
- TAS in kph
- Checksum
1 2 3 4
| | | |
$PLARS,a,a,xxx*hh<CR><LF>
Examples:
$PLARS,L,MC,1.3*1E
$PLARS,L,BAL,0.752*6B
$PLARS,L,BUGS,15*3B
$PLARS,L,QNH,1013.2*74
$PLARS,H,MC,2.1*1B
$PLARS,H,BAL,1.000*68
$PLARS,H,BUGS,0*0B
$PLARS,H,QNH,1031.4*76
The $PLARS record is intended for exchanging setting values between Larus and a host system such as XCSoar. The record can be used in both directions: from host to Larus or from Larus to host.
These records should not be sent cyclically, but only when needed during initialization and when changes are made.
- Data source (L: Larus, H: Host)
- Settings parameter
- MC MacCready m/s (0.0 - 9.9)
- BAL Ballast (fraction of water ballast 0.000 - 1.000)
- BUGS Bugs in % (0 - 50)
- QNH QNH in hPa
- Value (format depends on settings parameter, see examples)
- Checksum