SkillAgentSearch skills...

Rtkbase

Your own GNSS base station for RTK localization with a Web GUI

Install / Use

/learn @Stefal/Rtkbase

README

RTKBase

An easy to use and easy to install web frontend with bash scripts and services for a simple headless gnss base station.

FrontEnd:

|<img src="./images/web_status.png" alt="status" width="250"/>|<img src="./images/web_settings.png" alt="settings" width="250"/>|<img src="./images/web_logs.png" alt="logs" width="250"/>|

Frontend's main features are:

  • View the satellites signal levels
  • View the base location on a map
  • Detect and configure the Gnss receiver (Ublox F9P, Septentrio Mosaic-X5, Unicore UM980 / UM982)
  • Start/stop various services (Sending data to a Ntrip caster, internal Ntrip caster, Rtcm server, Sending Rtcm stream on a radio link, Log raw data to files)
  • Edit the services settings
  • Convert raw data to Rinex
  • Download/delete raw data

Base example:

<img src="./images/base_f9p_raspberry_pi.jpg" alt="status" width="550" />
  • Enclosure: GentleBOX JE-200 (waterproof, cable glands for antenna and ethernet cable)
  • SBC: Raspberry Pi 3 / Orange Pi Zero (512MB)
  • Gnss Receiver: U-Blox ZED-F9P (from Drotek)
  • Antenna: DA910 (Gps L1/L2, Glonass L1/L2, Beidou B1/B2/B3 and Galileo E1/E5b/E6) + sma (male) to TNC (male) outdoor cable.
  • Power: Trendnet TPE-115GI POE+ injector + Trendnet POE TPE-104GS Extractor/Splitter + DC Barrel to Micro Usb adapter

Other images are available in the ./images folder.

Ready to flash release:

A ready to flash Armbian image is available for Raspberry Pi, Orange Pi Zero, Orange Pi Zero 2, Orange Pi Zero 3 SBC : Armbian_RTKBase

For older Raspberry Pi releases, see here.

Easy installation:

  • Connect your gnss receiver to your raspberry pi/orange pi/....

  • Open a terminal and:

    cd ~
    wget https://raw.githubusercontent.com/Stefal/rtkbase/master/tools/install.sh -O install.sh
    chmod +x install.sh
    sudo ./install.sh --all release
    
  • Go grab a coffee, it's gonna take a while. The script will install the needed software, and if you use a supported receiver (U-Blox ZED-F9P, Septentrio Mosaic-X5, Unicore UM980/UM982), it'll be detected and set to work as a base station. If you don't use a supported recevier, you will have to configure your receiver manually (see step 7 in manual installation), and choose the correct port from the settings page.

  • Open a web browser to http://ip_of_your_sbc (the script will try to show you this ip address). Default password is admin. The settings page allows you to enter your own settings for the base coordinates, ntrip credentials and so on...

    <img src="./images/web_all_settings.png" alt="all settings" width="600" />

    If you don't already know your base precise coordinates, it's time to read one of these tutorials:

  • To help you find your base ip address, you can use the simple find_rtkase gui tool. It is available for Gnu/Linux and Windows in ./tools/find_rtkbase/dist.

    • Click on the "Find" button, wait, then click on the "Open" button. It will open the RTKBase GUI in your web browser.

      <img src="./tools/find_rtkbase/find_rtkbase_screenshot.png" alt="screenshot of find_rtkbase tool" width="300" />

Manual installation:

The install.sh script can be used without the --all option to split the installation process into several different steps:

    ################################
    RTKBASE INSTALLATION HELP
    ################################
    Bash scripts to install a simple gnss base station with a web frontend.
    
    
    
    * Before install, connect your gnss receiver to raspberry pi/orange pi/.... with usb or uart.
    * Running install script with sudo
    
    Easy installation: sudo ./install.sh --all release
    
    Options:
            -a | --all <rtkbase source>
                             Install all you need to run RTKBase : dependencies, RTKlib, last release of Rtkbase, services,
                             crontab jobs, detect your GNSS receiver and configure it.
                             <rtkbase source> could be:
                                 release  (get the latest available release)
                                 repo     (you need to add the --rtkbase-repo argument with a branch name)
                                 url      (you need to add the --rtkbase-custom-source argument with an url)
                                 bundled  (available if the rtkbase archive is bundled with the install script)
    
            -u | --user
                             Use this username as User= inside service unit and for path to rtkbase:
                             --user=john will install rtkbase in /home/john/rtkbase
    
            -d | --dependencies
                             Install all dependencies like git build-essential python3-pip ...
    
            -r | --rtklib
                             Get RTKlib 2.4.3b34j from github and compile it.
                             https://github.com/rtklibexplorer/RTKLIB/tree/b34j
    
            -b | --rtkbase-release
                             Get last release of RTKBase:
                             https://github.com/Stefal/rtkbase/releases
    
            -i | --rtkbase-repo <branch>
                             Clone RTKBASE from github with the <branch> parameter used to select the branch.
    
            -j | --rtkbase-bundled
                             Extract the rtkbase files bundled with this script, if available.
    
            -f | --rtkbase-custom <source>
                             Get RTKBASE from an url.
    
            -t | --unit-files
                             Deploy services.
    
            -g | --gpsd-chrony
                             Install gpsd and chrony to set date and time
                             from the gnss receiver.
    
            -e | --detect-gnss
                             Detect your GNSS receiver.
    
            -n | --no-write-port
                             Doesn'\''t write the detected port inside settings.conf.
                             Only relevant with --detect-gnss argument.
    
            -c | --configure-gnss
                             Configure your GNSS receiver.
    
            -s | --start-services
                             Start services (rtkbase_web, str2str_tcp, gpsd, chrony)
    
            -h | --help
                              Display this help message.

So, if you really want it, let's go for a manual installation with some explanations:

  1. Install dependencies with sudo ./install.sh --dependencies, or do it manually with:

     sudo apt update
     sudo apt install -y  git build-essential pps-tools python3-pip python3-dev python3-setuptools python3-wheel libsystemd-dev bc dos2unix socat zip unzip pkg-config psmisc
    
  2. Install RTKLIB with sudo ./install.sh --rtklib, or:

    • get RTKlib

      cd ~
      wget -qO - https://github.com/rtklibexplorer/RTKLIB/archive/refs/tags/b34j.tar.gz | tar -xvz
      
    • compile and install str2str:

      Optionally, you can edit the CTARGET line in makefile in RTKLIB/app/str2str/gcc

      cd RTKLIB/app/str2str/gcc
      nano makefile
      

      For an Orange Pi Zero SBC, i use:

      CTARGET = -mcpu=cortex-a7 -mfpu=neon-vfpv4 -funsafe-math-optimizations

      Then you can compile and install str2str:

      make
      sudo make install
      
    • Compile/install rtkrcv and convbin the same way as str2str.

  3. Get latest rtkbase release sudo ./install.sh --rtkbase-release, or:

    wget https://github.com/stefal/rtkbase/releases/latest/download/rtkbase.tar.gz -O rtkbase.tar.gz
    tar -xvf rtkbase.tar.gz
    
    

    If you prefer, you can clone this repository to get the latest code.

  4. Install the rtkbase requirements:

    python3 -m pip install --upgrade pip setuptools wheel  --extra-index-url https://www.piwheels.org/simple
    python3 -m pip install -r rtkbase/web_app/requirements.txt  --extra-index-url https://www.piwheels.org/simple
    
    
  5. Install the systemd services with sudo ./install.sh --unit-files, or do it manually with:

    • Edit them (rtkbase/unit/) to replace {user} with your username.
    • If you log the raw data inside the base station, you may want to compress these data and delete the too old archives. archive_and_clean.sh will do it for you. The default settings compress the previous day data and delete all archives older than 90 days. To automate these 2 tasks, enable the rtkbase_archive.timer. The default value runs the script every day at 04H00.
    • Copy these services to /etc/systemd/system/ then enable the web server, str2str_tcp and rtkbase_archive.timer:
    sudo systemctl daemon-reload
    sudo systemctl enable rtkbase_web
    sudo systemctl enable str2str_tcp
    sudo systemctl enable rtkbase_archive.timer
    
  6. Install and configure chrony and gpsd with sudo ./install.sh --gpsd-chrony, or:

    • Install chrony with sudo apt install chrony then add this parameter in the chrony conf file (/etc/chrony/chrony.conf):

      refclock SHM 0 refid GPS precision 1e-1 offset 0.2 delay 0.2

      Edit the chrony unit file. You should set After=gpsd.service

    • Install a gpsd release >= 3.2 or it won't work with a F9P. Its conf file should contains:

       # Devices gpsd should connect to at boot time.
       # They need to be rea
    
View on GitHub
GitHub Stars716
CategoryDevelopment
Updated2d ago
Forks192

Languages

Python

Security Score

100/100

Audited on Mar 26, 2026

No findings