Communication & Messaging
1 Interfacing
The communication interfaces currently supported for the ANELLO products are listed below:
ANELLO EVK: Serial (USB C), UDP (Ethernet)
ANELLO Ground INS: Serial (RS-232), UDP (Automotive Ethernet)
ANELLO Ground IMU: Serial (RS-232)
ANELLO X3: Serial (RS-422), UART (3.3V)
1.1 Serial Communication Parameters
- Default Baud Rate:
EVK: 921600
Ground INS and Ground IMU: 230400
X3: 460800
- RS-232 Voltage Levels:
+/- 7V
- Data Format:
Data Bits: 8
Stop Bits: 1
Parity: None
1.2 Port Definitions
For all interfaces, there are two main port types.
The data port is where the main ANELLO output messages are transmitted, and also serves as the input port for the RTCM correction stream.
The configuration port is used for inputting configuration messaging, inputting odometer messages, and outputting NMEA messages (firmware v1.2 and later).
For UDP interface, there is a third “odometer” port, which is strictly used to send odometer messages. This option can be used to feed in odometer data if using ANELLO Python Program to record data over serial, in order to keep the serial configuration port free.
Logical Port
Physical Port
Functions
Data Port
Lowest serial port #, e.g. COM7
Output: Data Messages
Input: RTCM Data
UDP: EVK port 1, computer port selectable
Configuration Port
Highest serial port #, e.g. COM10
Output: NMEA Messages (if configured)
Input: Odometer Data, Configuration
UDP: EVK port 2, computer port selectable
Odometer Port
UDP: EVK port 3, computer port selectable
Odometer Channel (UDP Only)
UDP communication uses fixed port numbers on the EVK but selectable ports on the external device. These ports, along with IP addresses and other UDP settings should be configured (see Unit Configurations).
Note
The “lowest” and “highest” serial ports mentioned above refer to the EVK, which uses an FTDI chip to create 4 virtual COM ports. The Ground INS and Ground IMU have two RS-232 connections, where RS232-1 is the configuration port and RS232-2 is the data port. The port numbers that appear once connected to the computer are determined by how the OS assigns the ports, and therefore the Data port is not necessarily the lowest port # like in the EVK.
1.3 Time Synchronization
1.3.1 External Sync Pulse
All ANELLO products include the option for time synchronization via an external sync pulse, e.g. from external PPS signal. To enable external synchronization, the “Sync Pulse Enable” Unit Configuration must be enabled. Enabling the sync configuration requires the unit to be reset or repowered as the interrupt is set up during MCU initialization. When “Sync Pulse Enable” is on, the rising edge of the sync pulse is detected by an interrupt and time-tagged in the IMU message “T_Sync” field.
The sync pulse input can be sent up to 100 Hz with a pulse width of at least 5 ms. A voltage level of 3.3 V is standard, but voltages from 1.5 to 5 V are also supported. See Mechanicals to find the sync input pin for each product.
1.3.2 PPS Synchronization
For the ANELLO Ground INS and EVK products which contain an internal GNSS receiver, a PPS output pulse is also supplied for time synchronization. PPS is output directly from the GNSS receiver, which will continue outputting a PPS pulse even if a GPS time fix is lost. Note that the PPS accuracy will degrade with time, with drifts around 1 us per second without GPS. See Mechanicals to find the PPS output pin for each product.
The PPS rising edge is also detected by an interrupt in the firmware. At the time of the interrupt, the MCU time is recorded by the firmware. The MCU time of the PPS interrupt is placed into the APINS message.
2 ASCII Data Output Messages
ANELLO has two message formats, ASCII and RTCM. The structures of all ASCII messages use the following conventions:
The lead code identifier for each record is ‘#’
All data fields are delimited by a comma
Each log ends with a hexadecimal checksum preceded by an asterisk and followed by a line termination using the carriage return and line feed characters
The checksum is an XOR of all the bytes between # and *, written in hexadecimal (letters must be uppercase)
APIMU messages are transmitted at the output data rate (ODR) setting
APINS messages are transmitted at 100 Hz
APGPS messages are transmitted at 4 Hz
2.1.1 APIMU Message (EVK & Ground INS)
The APIMU message is the IMU output message for EVK and Ground INS units only.
Field
Units
Description
0
APIMU
Sentence identifier
1
Time
ms
Time since power on
2
T_Sync
ms
Time at last sync rising edge (zero when sync config disabled)
3
AX
g
X-Axis Acceleration
4
AY
g
Y-Axis Acceleration
5
AZ
g
Z-Axis Acceleration
6
WX
deg/s
X-Axis Angular Rate (MEMS)
7
WY
deg/s
Y-Axis Angular Rate (MEMS)
8
WZ
deg/s
Z-Axis Angular Rate (MEMS)
9
OG_WZ
deg/s
High Precicision Z-Axis Angular Rate (ANELLO Optical Gyro)
10
ODO
m/s
Scaled Composite Odometer Value
11
ODO Time
ms
Timestamp of Odometer Reading
12
Temp
°C
Temperature
Note
Firmware before v1.0.39 does not have T_Sync field.
2.1.2 APIMU Message (X3)
- This is the same as APIMU but with additional Optical Gyro Rates for 3 axes, magnetic field measurements, and without odometer values. This is the output message for X3 units only.
Field
Units
Description
0
APIMU
Sentence identifier
1
Time
ms
Time since power on
2
T_Sync
ms
Time at last sync rising edge (zero when sync config disabled)
3
AX
g
X-Axis Acceleration
4
AY
g
Y-Axis Acceleration
5
AZ
g
Z-Axis Acceleration
6
WX
deg/s
X-Axis Angular Rate (MEMS)
7
WY
deg/s
Y-Axis Angular Rate (MEMS)
8
WZ
deg/s
Z-Axis Angular Rate (MEMS)
9
OG_WX
deg/s
High Precicision X-Axis Angular Rate (ANELLO Optical Gyro)
10
OG_WY
deg/s
High Precicision Y-Axis Angular Rate (ANELLO Optical Gyro)
11
OG_WZ
deg/s
High Precicision Z-Axis Angular Rate (ANELLO Optical Gyro)
12
MAG_X
g
X-Axis Magnetic Field Measurement
13
MAG_Y
g
X-Axis Magnetic Field Measurement
14
MAG_Z
g
X-Axis Magnetic Field Measurement
15
Temp C
°C
Temperature
16
Status_X
Bitfield
Status based on bits: - Bit 0: Gyro discrepency - Bit 1: Temperature uncontrolled - Bit 2: Over current error - Bit 3: SiPhOG supply voltage bad
17
Status_Y
Bitfield
Status based on bits: - Bit 0: Gyro discrepency - Bit 1: Temperature uncontrolled - Bit 2: Over current error - Bit 3: SiPhOG supply voltage bad
18
Status_Z
Bitfield
Status based on bits: - Bit 0: Gyro discrepency - Bit 1: Temperature uncontrolled - Bit 2: Over current error - Bit 3: SiPhOG supply voltage bad
2.1.3 APIM1 Message (Ground IMU)
The APIM1 message is the same as APIMU but without odometer values. This is the output message for Ground IMU units only.
Field
Units
Description
0
APIMU
Sentence identifier
1
Time
ms
Time since power on
2
T_Sync
ms
Time at last sync rising edge (zero when sync config disabled)
3
AX
g
X-Axis Acceleration
4
AY
g
Y-Axis Acceleration
5
AZ
g
Z-Axis Acceleration
6
WX
deg/s
X-Axis Angular Rate (MEMS)
7
WY
deg/s
Y-Axis Angular Rate (MEMS)
8
WZ
deg/s
Z-Axis Angular Rate (MEMS)
9
OG_WZ
deg/s
High Precicision Z-Axis Angular Rate (ANELLO Optical Gyro)
12
Temp C
°C
Temperature
Note
Firmware before v1.0.39 does not have T_Sync field.
2.2 APGPS Message
The APGPS message is the PVT output from the EVK and Ground INS units only.
Field
Units
Description
0
APGPS
Sentence identifier
1
Time
ms
Time since power on
2
GPS Time
ns
GPS Time in integer ns
3
Lat
deg
Latitude, ‘+’: north, ‘-’: south
4
Long
deg
Longitude, ‘+’: east, ‘-’: west
5
Alt ellipsoid
m
Height above ellipsoid
6
Alt msl
m
Height above mean sea level
7
Speed
m/s
GNSS Speed
8
Heading
deg
GNSS Heading (ground track)
9
Hacc
m
Horizontal Accuracy
10
Vacc
m
Vertical Accuracy
11
PDOP
Position dilution of precision
12
FixType
0: No Fix, 2: 2D Fix, 3: 3D Fix, 5: Time Only
13
SatNum
Number of satellites used in solution
14
Speed Acc
Accuracy of GNSS Speed measurement
15
Hdg Acc
Accuracy of GNSS Heading measurement
16
RTK Status
0: Single Point Positioning, 1: RTK Float, 2: RTK Fixed
Note
This packet should be used to correlate GPS time and system time. The packet is time stamped at the time the PPS signal is generated by the GNSS receiver.
2.3 APHDG Message
The APHDG message contains dual heading information from the dual GNSS receivers if both ANT1 and ANT2 are connected. This message is output from the EVK and Ground INS units only.
Field
Units
Description
0
APHDG
Sentence identifier
1
Time
ms
Time since power on
2
GPS Time
ns
GPS Time in integer ns (not UTC time)
3
relPosN
m
North component of relative position vector
4
relPosE
m
East component of relative position vector
5
relPosD
m
Down component of relative position vector
6
relPosLength
m
Length of relative position vector between antennae
7
relPosHeading
deg
Heading from primary antenna to secondary antenna
8
RelPosLength Accuracy
m
Accuracy of dual antennae baseline length
9
relPosHeading Accuracy
deg
Accuracy of dual antennae heading
10
flags
Status based on bits: - Bit 0: gnssFixOK - Bit 1: diffSoln - Bit 2: relPosValid - Bits 4..3: carrSoln - Bit 5: isMoving - Bit 6: refPosMiss - Bit 7: refObsMiss - Bit 8: relPosHeading Valid - Bit 9: relPos Normalized
2.4 APINS Message
The APINS message is the Kalman filter position, velocity, and attitude solution output from the EVK and Ground INS units.
Field
Units
Description
0
APINS
Sentence identifier
1
Time
ms
Time since power on
2
PPS Time
ns
Time of last PPS pulse converted to GPS time (time since midnight on Jan 6, 1980)
3
Status
0: Attitude Only
1: Position and Attitude
2: Position, Attitude, and Heading
3: RTK Float
4: RTK Fix
If GPS button is turned OFF in Python tool:
8: Attitude Only
9: Position and Attitude
10: Position, Attitude, and Heading
4
Lat
deg
Latitude, ‘+’: North, ‘-’: South
5
Long
deg
Longitude, ‘+’: East, ‘-’: West
6
Height
m
Height above ellipsoid
7
VN
m/s
North Velocity in NED Frame
8
VE
m/s
East Velocity in NED Frame
9
VD
m/s
Down Velocity in NED Frame
10
Roll
deg
Roll Angle, rotation about body frame X
11
Pitch
deg
Pitch Angle, rotation about body frame Y
12
Heading
deg
Heading Angle, rotation about body frame Z
13
ZUPT
0: Moving, 1: Stationary
Note
Roll, pitch and heading angles are calculated as standard aerospace Euler angles in a 3-2-1 (yaw, pitch, roll) body frame rotation.
2.5 APAHRS Message
The APAHRS message is only available with the ANELLO AHRS upgrade on the Ground IMU. It provides the roll, pitch and yaw angles calculated as standard aerospace Euler angles in a 3-2-1 (yaw, pitch, roll) body frame rotation.
Field
Units
Description
0
APINS
Sentence identifier
1
Time
ms
Time since power on
2
Sync Time
ns
Time of the last sync pulse.
3
Roll
deg
Roll in degrees
4
Pitch
deg
Pitch in degrees
5
Yaw
deg
Yaw in degrees
6
ZUPT Status
1 if ZUPT is enabled, 0 if ZUPT is disabled
Note
The yaw is not an absolute heading but an integrated relative heading - unless an absolute heading is provided by the user, after which the optical gyro integrates relative to that absolute heading.
3 RTCM Binary Data Output Messages
The binary packets use an RTCM standard 10403 envelope for each message.
Field
Value/Description
0
Preamble
0xD3
1
Reserved
000000 (6 bit)
2
Length
10 bit, # bytes in data message
3
Data
Data message as defined below
4
CRC
3 byte
The ANELLO Python Tool handles logging and decoding of the RTCM binary format. However, an RTCM decoder is provided if needed, with the checksum definition found here.
3.1.1 IMU Message (EVK & Ground INS)
The IMU output message for EVK and Ground INS units has a subtype ID of 1.
Field
Type
Units
Description
0
Message #
uint12
4058
ANELLO Photonics custom message number
1
Sub Type ID
uint4
1
2
MCU Time
uint64
ns
Time since power on
3
Sync Time
uint64
ns
Timestamp of input sync pulse (if enabled and provided)
4
ODO Time
uint64
ns
Timestamp of odometer reading
5
AX
int32
1/143165577 g
X-Axis Acceleration (intended 15g/2^31)
6
AY
int32
1/143165577 g
Y-Axis Acceleration
7
AZ
int32
1/143165577 g
Z-Axis Acceleration
8
WX
int32
1/4772186 deg/s
X-Axis Angular Rate (MEMS) (intended 450/2^31)
9
WY
int32
1/4772186 deg/s
Y-Axis Angular Rate (MEMS)
10
WZ
int32
1/4772186 deg/s
Z-Axis Angular Rate (MEMS)
11
OG_WZ
int32
1/4772186 deg/s
High precision optical gyro z-axis angular rate
12
ODO
int16
0.01 m/s
Scaled composite odometer value
13
Temp C
int16
0.01 °C
Temperature
3.1.2 IMU Message (X3)
The ANELLO binary packets use a 2-byte preamble followed by a 1-byte message type and a 1-byte length. There is also a 2-byte checksum after the payload.
Preamble
Message Type
Length information
Payload
Checksum
0xC5 0x50
IMU = 253
1-byte
Message structure defined below
2-byte
The payload for the binary output message is described below
Field
Type
Units
Description
0
MCU Time
uint64
ns
Time since power on
1
Sync Time
uint64
ns
Timestamp of input sync pulse (if enabled and provided)
2
AX1
int16
g=value*(range*0.0000305)
Scaled sensor accel
3
AY1
int16
g=value*(range*0.0000305)
Scaled sensor accel
4
AZ1
int16
g=value*(range*0.0000305)
Scaled sensor accel
5
WX1
int16
dps=value*(range*0.000035)
Scaled sensor rate
6
WY1
int16
dps=value*(range*0.000035)
Scaled sensor rate
7
WZ1
int16
dps=value*(range*0.000035)
Scaled sensor rate
8
OG_WX
int32
dps * 2147483648 / MEMS Gyro Range
Scaled sensor rate for FOG. MEMS gyro range is last 11 in MEMS Range field
9
OG_WY
int32
dps * 2147483648 / MEMS Gyro Range
Scaled sensor rate for FOG. MEMS gyro range is last 11 in MEMS Range field
10
OG_WZ
int32
dps * 2147483648 / MEMS Gyro Range
Scaled sensor rate for FOG. MEMS gyro range is last 11 in MEMS Range field
11
MAG_X
int16
g * 4096
Scaled magnetometer data
12
MAG_Y
int16
g * 4096
Scaled magnetometer data
13
MAG_Z
int16
g * 4096
Scaled magnetometer data
14
Temperature
int16
°C * 100
Scaled temperature data
15
MEMS Range
uint16
g and dps
First 5 bits accel range, next 11 bits rate range
16
FOG Range
uint16
dps
FOG range in DPS
17
Status_X
Bitfield
Status based on bits: - Bit 0: Gyro discrepency - Bit 1: Temperature uncontrolled - Bit 2: Over current error - Bit 3: SiPhOG supply voltage bad - Bits 4-7: Reserved.
18
Status_Y
Bitfield
Status based on bits: - Bit 0: Gyro discrepency - Bit 1: Temperature uncontrolled - Bit 2: Over current error - Bit 3: SiPhOG supply voltage bad - Bits 4-7: Reserved.
19
Status_Z
Bitfield
Status based on bits: - Bit 0: Gyro discrepency - Bit 1: Temperature uncontrolled - Bit 2: Over current error - Bit 3: SiPhOG supply voltage bad - Bits 4-7: Reserved.
3.1.3 IM1 Message (Ground IMU)
The IMU output message for Ground IMU units has a subtype ID of 6. It is the same as IMU message for the EVK and Ground INS but without odometer values.
Field
Type
Units
Description
0
Message #
uint12
4058
ANELLO Photonics custom message number
1
Sub Type ID
uint4
6
2
MCU Time
uint64
ns
Time since power on
3
Sync Time
uint64
ns
Timestamp of input sync pulse (if enabled and provided)
4
AX
int32
1/143165577 g
X-Axis Acceleration (intended 15g/2^31)
5
AY
int32
1/143165577 g
Y-Axis Acceleration
6
AZ
int32
1/143165577 g
Z-Axis Acceleration
7
WX
int32
1/4772186 deg/s
X-Axis Angular Rate (MEMS) (intended 450/2^31)
8
WY
int32
1/4772186 deg/s
Y-Axis Angular Rate (MEMS)
9
WZ
int32
1/4772186 deg/s
Z-Axis Angular Rate (MEMS)
10
OG_WZ
int32
1/4772186 deg/s
High precision optical gyro z-axis angular rate
11
Temp C
int16
0.01 °C
Temperature
3.3 GPS PVT Message (EVK/Ground INS)
The GPS message is the PVT output from the EVK and Ground INS units only. The Antenna ID field indicates which receiver (that connected to ANT1 or ANT2) produced the position information.
Field
Type
Units
Description
0
Message #
uint12
4058
1
Sub Type ID
uint4
2
2
Time
uint64
ns
Time since power on
3
GPS Time
uint64
ns
GPS time (GTOW) – Time since Jan 6, 1980
4
Latitude
int32
1e-7 deg
Latitude, ‘+’: north, ‘-’: south
5
Longitude
int32
1e-7 deg
Longitude, ‘+’: east, ‘-’: west
6
Alt ellipsoid
int32
0.001 m
Height above ellipsoid
7
Alt msl
int32
0.001 m
Height above mean sea level
8
Speed
int32
0.001 m/s
Speed
9
Heading
int32
0.001 deg
GNSS Heading (ground track)
10
Hacc
uint32
0.001 m
Horizontal accuracy
11
Vacc
uint32
0.001 m
Vertical accuracy
12
Hdg acc
uint32
1e-5 deg
Heading accuracy
13
Speed acc
uint32
0.001 m/s
Speed accuracy
14
PDOP
uint16
0.01
Position dilution of precision
15
FixType
uint8
0: No Fix, 2: 2D Fix, 3: 3D Fix, 5: Time Only
16
SatNum
uint8
Number of Satellites used in solution
17
RTK Status
uint8
0: Single Point Positioning, 1: RTK Float, 2: RTK Fixed
18
Antenna ID
uint8
Primary or secondary antenna
3.4 HDG Message (EVK/Ground INS)
The HDG message contains dual heading information from the dual GNSS receivers if both ANT1 and ANT2 are connected. This message is output from the EVK and Ground INS units only.
Field
Type
Units
Description
0
Message #
uint12
4058
ANELLO Photonics custom message number
1
Sub Type ID
uint4
3
2
MCU Time
uint64
ns
Time since power on
3
GPS Time
uint64
ns
GPS time (GTOW) – Time since Jan 6, 1980
4
relPosN
int32
0.01 m
North component of relative position vector
5
relPosE
int32
0.01 m
East component of relative position vector
6
relPosD
int32
0.01 m
Down component of relative position vector
7
relPosLength
int32
0.01 m
Length of relative position vector between antennae
8
relPosHeading
int32
1e-5 deg
Heading from primary antenna to secondary antenna
9
relPosLength Accuracy
uint32
0.1 mm
Accuracy of dual antennae baseline length
10
relPosHeading Accuracy
uint32
1e-5 deg
Accuracy of dual antennae heading
11
flags
uint16_t
Status based on bits: - Bit 0: gnssFixOK - Bit 1: diffSoln - Bit 2: relPosValid - Bits 4..3: carrSoln - Bit 5: isMoving - Bit 6: refPosMiss - Bit 7: refObsMiss - Bit 8: relPosHeading Valid - Bit 9: relPos Normalized
3.5 INS Message (EVK/Ground INS)
The INS message is the Kalman filter position, velocity, and attitude solution output from the EVK and Ground INS units.
Field
Type
Units
Description
0
Message #
uint12
4058
1
Sub Type ID
uint4
4
2
Time
uint64
ns
Time since power on
3
PPS Time
uint64
ns
Time of last PPS pulse converted to GPS time (time since midnight on Jan 6, 1980)
4
Latitude
int32
1e-7 deg
Latitude, ‘+’: north, ‘-’: south
5
Longitude
int32
1e-7 deg
Longitude, ‘+’: east, ‘-’: west
6
Alt ellipsoid
int32
0.001 m
Height above ellipsoid
7
VN
int32
0.001 m/s
North Velocity in NED Frame
8
VE
int32
0.001 m/s
East Velocity in NED Frame
9
VD
int32
0.001 m/s
Down Velocity in NED Frame
10
Roll
int32
1e-5 deg
Roll Angle, rotation about body frame X
11
Pitch
int32
1e-5 deg
Pitch Angle, rotation about body frame Y
12
Heading
int32
1e-5 deg
Heading Angle, rotation about body frame Z
13
ZUPT
uint8
0: Moving, 1: Stationary
14
Status
uint8
0: Attitude Only; 1: Position and Attitude; 2: Position, Attitude, and Heading; 3: RTK Float; 4: RTK Fix If GPS button is turned OFF in Python tool, 8: Attitude Only; 9: Position and Attitude; 10: Position, Attitude, and Heading
3.6 AHRS Message (Ground IMU)
The APAHRS message is only available with the ANELLO AHRS upgrade on the Ground IMU. It provides the roll, pitch and yaw angles calculated as standard aerospace Euler angles in a 3-2-1 (yaw, pitch, roll) body frame rotation.
Field
Type
Units
Description
0
Message #
uint12
4058
1
Sub Type ID
uint4
8
2
Time
uint64
ns
Time since power on
3
Sync Time
uint64
ns
Time of last sync pulse.
4
Roll
int32
1e-5 deg
Roll in degrees
5
Pitch
int32
1e-5 deg
Pitch in degrees
6
Yaw
int32
1e-5 deg
Yaw in degrees
7
ZUPT Status
uint8
1 or 0
1 if ZUPT is enabled, 0 if ZUPT is disabled
Note
The yaw is not an absolute heading but an integrated relative heading - unless an absolute heading is provided by the user, after which the optical gyro integrates relative to that absolute heading.
4 Input Messages
4.1 APCFG Messages
The easiest way to configure an ANELLO unit is using the ANELLO Python Program, which saves all changes to non-volatile flash memory.
Alternatively, the unit can be configured using the APCFG message, which allows for both temporary (RAM) and permanent setting (FLASH) of configuration parameters.
#APCFG,<r/w/R/W>,<param1>,<value1>,…,<paramN>,<valueN>*checksum
Field
Description
0
APCFG
Sentence identifier
1
<read/write>
‘r’: read RAM, ‘w’: write RAM, ‘R’: read FLASH, ‘W’: write FLASH
2
<param>
Configuration parameter (APCFG code)
3
<value>
Configuration value, expressed in ASCII
4
checksum
XOR of bytes between # and * written in hexadecimal (letters must be uppercase)
For more details on configuration parameters and values, see Unit Configurations.
4.2 APVEH Messages
The easiest way to set ANELLO vehicle configurations is using the ANELLO Python Program, which saves all changes to non-volatile flash memory.
Alternatively, the unit can be configured using the APVEH message, which allows for both temporary (RAM) and permanent setting (FLASH) of configuration parameters.
#APVEH,<r/w/R/W>,<param1>,<value1>,…,<paramN>,<valueN>*checksum
Field
Description
0
APVEH
Sentence identifier
1
<read/write>
‘r’: read RAM, ‘w’: write RAM, ‘R’: read FLASH, ‘W’: write FLASH
2
<param>
Configuration parameter (APVEH code)
3
<value>
Configuration value, expressed in ASCII
4
checksum
XOR of bytes between # and * written in hexadecimal (letters must be uppercase)
4.3 APODO Message
The ANELLO EVK and Ground INS accepts odometer input over the configuration port. The APODO message is in ASCII format and used to convey the vehicle direction and a speed. A negative value indicates reverse, and a positive value indicates forward. If no direction is indicated, the direction is assumed to be forward.
Direction can also be input without a speed. This can be useful when there is no odometer input available, but transmission position is available. This is useful to enable INS initialization in both forward and reverse.
When an APODO message is received with a reverse direction indication, the unit will assume the vehicle is in reverse until a packet is received with a forward direction. The units of the speed in the APODO message is user configurable to m/s (default), mile/hr, km/hr, ft/s (see ‘odo’ code in Unit Configurations).
#APODO,<dir>,<speed>*checksum
Field
Description
0
APODO
Sentence identifier
1
<dir>
‘-’: reverse, ‘+’: forward (optional)
2
<speed>
Speed is a floating point value, units are set in unit configurations
3
checksum
XOR of bytes between # and * written in hexadecimal (letters must be uppercase)
For example, the following would all be interpreted as moving in reverse with a speed of 24: #APODO,-,24*7E #APODO,-24*52 #APODO,-,-24*53
Note
If sending odometer speeds by UDP from another program, send to UDP port 3 on the EVK, from the computer’s UDP port matching “odometer port” configuration.
4.4 RTCM Data Input
Standard RTCM messages can be forwarded to the data port of the ANELLO EVK and Ground INS to enable the GNSS receivers to reach RTK precision. Standard RTCM3.3 in MSM format, including MSM4, MSM5, and MSM7 messages, are supported. The ANELLO Python Program provides an NTRIP client which can connect to a standard NTRIP network and forward the RTCM messages to the ANELLO unit.
4.5 Ping Command
The Ping command can be used to test if the serial port is properly configured.
#APPNG*48
A correctly received ping command generates a response from the unit of:
#APPNG,0*54
4.6 Echo Command
The Echo command serves as an additional communication test for the serial port configuration as well as the checksum generator. For example:
#APECH,Echo! echo… ech… e…*77
A correctly received Echo command generates an identical response from the unit:
#APECH,Echo! echo… ech… e…*77.
4.7 Reset Command
The reset command allows the user to reset the system, e.g. after changing a configuration setting that requires a power cycle. No response message is generated; however, the system will reset causing the system output to be suspended briefly.
#APRST,0*58
5 Error Messages
If an incorrect command is sent to the unit, it responds with one of ten error responses. The error message format is:
#APERR,<error code>*CS
The following table lists the error code along with the corresponding description.
Error Code |
Description |
|---|---|
1 |
No start character (#) |
2 |
Read/Write indicator missing (from #APCFG or #APVEH) |
3 |
Incomplete message (checksum missing) |
4 |
Incorrect checksum |
5 |
Invalid preamble (AP) |
6 |
Invalid message type |
7 |
Invalid field |
8 |
Invalid value |
9 |
Flash locked |
10 |
Unexpected character (applies to APPID, APSTA, APVER, APSER, APFSN, and APFHW) |
11 |
Disabled command (applies to APODO) |
6 Checksum
6.1 Ascii Checksum
The ASCII checksum is an XOR of all characters between the start character ‘#’ and the checksum indicator ‘*’. The following python code snippet can be used to generate the correct checksum.
Specify the input message (generates the string: #APCFG,W,odr,2,msg,IMU*4B)
Generate the checksum for the inertial product input message
Print the complete message (starting field and checksum) to the screen
msg = bytearray(APCFG,W,odr,2,msg,IMU)
checksum = 0
for c in msg:
checksum = checksum ^ int(c)
print(#%s*%02X % (msg.decode(), checksum))
6.2 Binary Checksum
- Ground INS, EVK, Ground IMU:
The checksum definition can be found here.
- X3:
The 2 preamble bytes and the checksum itself are not included in the checksum calculation. Checksum is calculated as follows, where N is the number of bytes included in the checksum calculation:
CK_A = 0 CK_B = 0 for (I = 0; I < N; I++) { CK_A = CK_A + Buffer[I] CK_B = CK_B + CK_A } return CK_A, CK_B
Note
The checksum is a two-byte value (CK_A, CK_B). In the reference implementation, these bytes are appended to the end of the message buffer (the last two bytes).