300x250 AD TOP

Search This Blog

Paling Dilihat

Powered by Blogger.

Tuesday, June 27, 2017

RTK Rover and Base Configuration Web Interface

So I've been working on this for the past few weeks

When I first started to mess around with RTKLIB I've wanted to have a nice UI to do that, while researching it I came across a product from drotek.com which already has a nice UI and I was glad to find its an open source (!!).

So I decided to sit down and take a look at it, at first I was a little dissapointed to see it worked on Intel Edison Only as I didn't find this board particularly interesting and now after reading that Intel discontinued it I think its even more important to find generic SBCs.

So I started to dig in the source code and I was glad to find out its written in Node Js as Node was one of my primary development environments for the past couple of years. I went over the source code and it seemed simple enough to work on, so I npm install 'ed it and went to work.

First, I've converted the whole project to typescript and cleaned up some Edison specific code, then I went ahead and ported rtkrcv to windows but since windows doesn't have a tty console, I've decided to disable that functionality and worked on making the tcp console work. I also wanted this project to work on M8N so I've had to upgrade rtklib to 2.4.3 as well., I've found a bug or two and went ahead to create an web interface for the services.

I've added loggers, PM2 and split the str2str and rtkrcv to their own hosted services so I've had better control over the service lifecycle and the ability to monitor it in realtime in any way possible, so monitoring console output for errors, monitoring logs for messages to be exposed as events and monitor rtkrcv monitor port and control port to get even more useful information, such as streams statistics, satellites, observations, navigation data and ofcurse the latest position and SNR and exposed all that information as APIs.

In the UI, I've converted the project to typescript which helped me to clean up a few issues, add a toastr for better error reporting, add socket.io to get realtime notifications and implemented a periodic update of all the statistics I wanted as well as add the ability for the station to work as both base and rover, which in essence means it can start str2str and rtkrcv and have complete control over the inputs and outputs. I've even added a com port detection API for the UI.

I've updated the chart.js version to get better animation for the satellite SNR graphs and added a finer resolution in the Map section.

For the rtkrcv and str2str I've added a gyp build configuration so it can be compiled in almost any environment, so far I've tested it on Windows, Linux x64 and Linux Arm and seems to be working without a hitch even on Orange PI Zero.

Now, I'll probably start testing it in a small scale, originally I wanted it for my Rover project, but this project was a learning experience as well as fun.

I'm looking for someone else to take over this project, I see great potential for it to be used across the navigation hobbyist community.

Tags: , , , ,


  1. First I want to thank you for the Windows update to rtkrcv. I was working on making those changes but running into a couple of socket problems. Thanks to you I finally got it working using VS2017. I tried to post a couple of issues on GITHUB but didn't see an issue page. So anyway here it goes:
    1. prstatus keeps crashing - I isolated the problem to its using this rtcm_t rtcm[3], I tried a couple of things so I just commented out the lines usting rtcm...
    2. Had to change one other line - forgot which now but I will post when I figure it out.
    3. Like you said -d will not work but -p will using telnet port so I can get a rtkrcv console.
    4. Can't seem to get anything to print to the monitor port is I do -m 23.

    Any help would be appreciated

    1. Hi Mike,

      Did you try the original rtklib source repo?

      You should be able to open issues on that project.

      My port is only for SMARTNAV-RTK

      As far as the monitor port, If I remember correctly, it will only print something when it has something to print. The documentation might be a better help than I am: