Build RTKLIB on Emlid Reach M+


We have a Emlid reach M+ and we need to receive the GPS orientation when it is moving slowly < 0.5knots.

We’ve seen we can modify the code from the RTKLIB and solve the issue. The problem is that we don’t know how to update the new compiled binaries in the Reach M+. We tried to access through SSH but we cannot find the directory that contains the RTKLIB binaries. We think we need to access as root but we don’t know the password.

Could anybody help us with this issue?

Hello, Welcome to the forum.
I’m afraid there is some bad news, root-access is no longer supported (Permanent monitoring system: how to schedule solutions sync with a remote server)

so I wouldn’t count on replacing binaries (unless you want to do some more heavy hacking), I think your best bet is to look at an external unit to perform the rtklib calculations (but probably you chose the M+ not to have an external board…). Technically you should be able to start your version from ssh, but I’m afraid that running your own RTKLib on the device is a challenging quest. Also, Emlid is using it’s own modified version of RTKLib, so you won’t be able to have the fixes/changes they did specifically for their devices.

That said, you mentionned the purpose is orientation, for that you could use the onboard IMU. Unfortunately there is no integration within reachview and it is not officially supported. However there are various threads on the forum with starting points.

1 Like

Hi Carlos,

I’m afraid ReachView code is not open-source, so it can’t be easily modified with custom binaries. Also, you can use the “reach” user only. Root access is not provided.

However, the ReachView provides access to SPI for non-root users since the firmware v2.22. Now you can get IMU readings from SPI.

For example, Andy shared his experience in this thread :slightly_smiling_face: I believe it might be helpful.

Hi @svetlana.nikolenko,
Most of my experience/progress with Reach IMU is with the RS2, the OP uses the M+ (based on the title).
So key information for him is which type of IMU is used. Is it the MPU9250 or the ICM20948? I think it’s the MPU.
Another issue might be (if it uses similar firmware as the Reach RTK Modules): missing non-root access to ‘spidev’ (I’m still waiting to get this fixed :frowning: )
And the final issue: no way to automatically ‘export’/‘broadcast’ the IMU-data at startup.

So I can share/help the OP, but probably need some firmware-fixes to reach his goal (depending on what the goal is offcourse) (maybe the spidev is accessible on the M+, but since I don’t own one, I cannot verify)

Hi @svetlana.nikolenko:

Thank you so much for the information, and thank @abertier for your support.

In the post you mentioned, it seems they are using a TCP/UDP connection to get the IMU data, however, in our rover, we only use the UART to receive the data. Is there any posibility to send the IMU data through this interface?

On the other hand, if the device is not able to provide the orientation for a low velocity we think its applications would be limited, e.g. most of mobile robots move slower than 0.5knots. Is it possible for you to report this issue to the development team and perform this modification for the next version? We think it would be very useful for people that are working in the field of mobile robotics.



Hi Carlos, Andy,

Sorry for the delay.

In Reach M+, we use the first one.

We don’t have a ready solution for this. So, I can hardly help much with the details of such integration. If you’re experienced in Linux, you can SSH into Reach and get IMU data with /dev/spidev0.0.

Thanks for your request. But at the moment, we don’t have such plans.

Hi everyone:

Finally, we managed to solve the issue, briefly, these were the steps:

  • Downgrade to v2.18. Once downgraded, the device detect there is an old version, and ask to upgrade again. To avoid it, we accepted to upgrade the firmware, and during the downloading, we disconnected the device from Internet. Then, the device ask me to skip the upgrade and continue using the current version.

  • Access through ssh using root:emlireach.

  • We cloned the repository: and performed the needed modifications. Basically, we modified solution.c, changing “if (vel>=1.0)” with “if (vel>=0.5)”

  • We compiled the RTKLIB using a raspberry pi 3 (ARM64), avoiding cross compiling from the PC, the fastest way if you have a raspberry pi.

  • We installed the new RTKLIK following these steps:
    Recompiling Reach RTKLIB source code (rtkrcv and/or str2srv)

I leave these steps just in case somebody wants to do something similar.

Has the information contained on that old post of mine (how to compile the source code) finally found it’s way into the official documentation?

Hi Carlos,

I just want to point out that you’ll lose these custom changes in case you update the device. However, we don’t recommend using outdated software versions. It’s better to keep your receivers always up-to-date in order to benefit from the latest features and improvements.

Hi Amilcar:

I don’t really understand your question.

Dear Svetlana:

We’re working on research projects from the University of Malaga. Sometimes we need to modify devices to accomplish our research requirements. As soon as we perform the experiments with the EMLID device, we’ll update it.

Of course, we’ll reference the used device “EMLID Reach M+” in our scientific publications. I’ll let you know.



Hi Carlos,

The question was not directed at you, it was directed at Emlid. They are the ones that sould add the information on “how to compile from source” to the official Emlid documentation.

I don’t think your guide will be included, since the firmware is less open now.