Use of Emlid Reach observation data with RTKLIB

category: gnss
tags: rtk rtklib


Emlid Reach is an all-in-one package for RTK positioning. It is an easy-to-use one-frequency RTK receiver that acts as a Wi-Fi access point in the initial settings and allows RTK settings on the browser. Multiple satellite systems can be selected among GPS, QZSS, GLONASS, Galileo, and BeiDou (however, we select either GLONASS or BeiDou). If there are two Reach units, multi-GNSS RTK positioning is possible by TCP connection with one as server and the other as client. With Reach, we can perform multi-GNSS RTK.

It is also possible to obtain positioning results on another PC. Connect two Reach as NTRIP Server to different mount points of NTRIP Caster, while connect another PC with RTKLIB installed to those mount points of NTRIP Caster as NTRIP Client. However, when positioning calculation is performed, the positioning calculation target of RTKLIB is limited to GPS only.

Only GPS satellites are used for positioning

In this example, BeiDou should be available on both the RTK base station and the mobile station. However, you can see that BeiDou was not used in this positioning calculation. Reach uses RTKLIB internally, so BeiDou should be available in this example. I didn’t know why satellites other than GPS were not available.

RTK setting on Reach

RTCM3 messages in Base mode tab of Reach display are as follows:

Message numberDescription
1002GPS L1 code, phase, ambiguity, and CNR
1006Station coordinates and antenna height
1010GLONASS L1 code, phase, ambiguity, and CNR
1097Galileo MSM7
1127BeiDou MSM7

Configuration window of Emlid Reach base mode

CNR: carrier-to-noise power ratio
MSM7: full pseudoranges, phase ranges, phase range rate and CNR (high resolution)

As for GPS and GLONASS, the traditional RTK Observation was sent. On the other hand, for Galileo, SBAS, QZSS, and BeiDou, observation data was transmitted with MSM7. Compared to RTK Observation, MSM7 could transmit more information such as multi-frequency observation results and Doppler frequency. MSM7 is also defined for GPS and GLONASS (message numbers are 1077 and 1087, respectively).

Enabling all satellites to analyze by RTKLIB

Reach positioning chip u-blox NEO-M8T binary data contains this information. Therefore, instead of RTCM message numbers 1002 and 1010, send 1077 and 1087 respectively. Although it is possible to modify the software so that Reach alone can send RTCM 3 messages 1077 and 1087, we decided to read the NEO-M8T information from another microcomputer here.

Reference: RTCM3 Message Type

Reach can be accessed by shell using ssh. So I logged into Reach’s shell and examined it. The internal NEO-M8T serial port was connected to port number 2000 by netcat, and it was found that this port was accessible from the outside. This can be a security hole such as a third party changing the positioning mode, so this method may not be available in future Reach software updates.

After compiling RTKLIB from the source code into another microcomputer (Raspberry Pi), taking out NEO-M8T binary observation data inside Reach by the program str2str on that microcomputer and formatting it to RTCM 3 format, and then transmit them to STRAP Caster. By creating and executing the following shell file on the microcomputer, all the satellites observed by Reach could be available. The reason that satellites other than GPS were not targeted for positioning in the external RTKLIB was due to the message type used. All satellites are also used for positioning in another Reach.


if [ -e ./str2str ]; then
./str2str \
  -in tcpcli://[IP address of Reach]:2000#ubx \
  -out ntrips://:[Password for NTRIP Caster]@[IP address]/[Mount point]#rtcm3 \
  -msg "1005,1019(5),1020(5),1045(5),1046(5),1044(5),1077,1087,1097,1107,1117" \
  -p 34.44010565 132.41478259 233.057

Replace the Reach IP address, NTRIP Caster IP address, password, mount point, and antenna coordinates with your environment. In this shell file, the antenna coordinates, GPS, GLONASS, Galileo, QZSS, and BeiDou are set to send MSM7. The ephemeris is set to transmit only once every 5 seconds so that the receiver can find the satellites quickly.