| | | |
Die Hauptfunktionen des Frontends sind:
Weitere Bilder sind im Ordner ./images verfügbar.
Für Orange Pi Zero, Orange Pi Zero 2 und Orange Pi Zero 3 SBC ist ein flashfähiges Image verfügbar: Armbian_RTKBase
Wenn Sie einen Raspberry Pi verwenden, können Sie dank jancelin hier eine flashfähige ISO-Datei herunterladen.
Verbinden Sie Ihren GPS-Empfänger mit Ihrem Raspberry Pi/Orange Pi/....
Öffnen Sie ein Terminal und:
cd ~
wget https://raw.githubusercontent.com/Stefal/rtkbase/master/tools/install.sh -O install.sh
chmod +x install.sh
sudo ./install.sh --all release
Geh und hol dir einen Kaffee, es wird eine Weile dauern. Das Skript installiert die erforderliche Software. Wenn Sie einen über USB angeschlossenen U-Blox ZED-F9P-Empfänger verwenden, wird dieser erkannt und als Basisstation eingerichtet. Wenn Sie keinen F9P verwenden, müssen Sie Ihren Receiver manuell konfigurieren (siehe Schritt 7 in der manuellen Installation) und auf der Einstellungsseite den richtigen Port auswählen.
Öffnen Sie einen Webbrowser zu http://ip_of_your_sbc
(das Skript versucht, Ihnen diese IP-Adresse anzuzeigen). Das Standardpasswort ist admin
. Auf der Einstellungsseite können Sie Ihre eigenen Einstellungen für die Basiskoordinaten, Ntrip-Anmeldeinformationen usw. eingeben.
Wenn Sie die genauen Koordinaten Ihrer Basis noch nicht kennen, ist es an der Zeit, eines dieser Tutorials zu lesen:
Das Skript install.sh
kann ohne die Option --all
verwendet werden, um den Installationsprozess in mehrere verschiedene Schritte aufzuteilen:
################################
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.3b34g from github and compile it.
https://github.com/rtklibexplorer/RTKLIB/tree/b34g
-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. It works only with receiver like ZED-F9P.
-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.
Wenn Sie es also wirklich wollen, können Sie eine manuelle Installation mit einigen Erklärungen durchführen:
Installieren Sie Abhängigkeiten mit sudo ./install.sh --dependencies
oder machen Sie es manuell mit:
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
Installieren Sie RTKLIB mit sudo ./install.sh --rtklib
oder:
Holen Sie sich RTKlib
cd ~
wget -qO - https://github.com/rtklibexplorer/RTKLIB/archive/refs/tags/b34j.tar.gz | tar -xvz
kompilieren und installieren Sie str2str:
Optional können Sie die CTARGET-Zeile im Makefile in RTKLIB/app/str2str/gcc bearbeiten
cd RTKLIB/app/str2str/gcc
nano makefile
Für einen Orange Pi Zero SBC verwende ich:
CTARGET = -mcpu=cortex-a7 -mfpu=neon-vfpv4 -funsafe-math-optimizations
Dann können Sie str2str kompilieren und installieren:
make
sudo make install
Kompilieren/installieren Sie rtkrcv
und convbin
auf die gleiche Weise wie str2str
.
Holen Sie sich die neueste rtkbase-Version sudo ./install.sh --rtkbase-release
, oder:
wget https://github.com/stefal/rtkbase/releases/latest/download/rtkbase.tar.gz -O rtkbase.tar.gz
tar -xvf rtkbase.tar.gz
Wenn Sie möchten, können Sie dieses Repository klonen, um den neuesten Code zu erhalten.
Installieren Sie die RTKBase-Anforderungen:
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
Installieren Sie die Systemd-Dienste mit sudo ./install.sh --unit-files
oder führen Sie es manuell aus mit:
rtkbase/unit/
), um {user}
durch Ihren Benutzernamen zu ersetzen.archive_and_clean.sh
erledigt das für Sie. Die Standardeinstellungen komprimieren die Vortagsdaten und löschen alle Archive, die älter als 90 Tage sind. Um diese beiden Aufgaben zu automatisieren, aktivieren Sie rtkbase_archive.timer
. Der Standardwert führt das Skript jeden Tag um 04:00 Uhr aus./etc/systemd/system/
und aktivieren Sie dann den Webserver str2str_tcp und rtkbase_archive.timer: sudo systemctl daemon-reload
sudo systemctl enable rtkbase_web
sudo systemctl enable str2str_tcp
sudo systemctl enable rtkbase_archive.timer
Installieren und konfigurieren Sie chrony und gpsd mit sudo ./install.sh --gpsd-chrony
oder:
Installieren Sie chrony mit sudo apt install chrony
und fügen Sie dann diesen Parameter in der chrony conf-Datei (/etc/chrony/chrony.conf) hinzu:
refclock SHM 0 refid GPS precision 1e-1 offset 0.2 delay 0.2
Bearbeiten Sie die Chronikeinheitsdatei. Sie sollten After=gpsd.service
festlegen
Installieren Sie eine GPSD-Version >= 3.2, sonst funktioniert es nicht mit einem F9P. Die conf-Datei sollte Folgendes enthalten:
# Devices gpsd should connect to at boot time.
# They need to be read/writeable, either by user gpsd or the group dialout.
DEVICES="tcp://localhost:5015"
# Other options you want to pass to gpsd
GPSD_OPTIONS="-n -b"
Bearbeiten Sie die GPSD-Einheitendatei. Im Abschnitt „[Einheit]“ sollte so etwas stehen:
[Unit]
Description=GPS (Global Positioning System) Daemon
Requires=gpsd.socket
BindsTo=str2str_tcp.service
After=str2str_tcp.service
sudo systemctl daemon-reload
sudo systemctl enable chrony
sudo systemctl enable gpsd
Schließen Sie Ihren GPS-Empfänger über USB oder UART an Raspberry Pi/Orange Pi/... an und prüfen Sie, welchen COM-Port er verwendet (ttyS1, ttyAMA0, etwas anderes...). Wenn es sich um einen U-Blox F9P-Empfänger (USB oder UART) oder einen Septentrio Mosaic-X5 (USB) handelt, können Sie sudo ./install.sh --detect-gnss
verwenden. Notieren Sie das Ergebnis, vielleicht benötigen Sie es später.
Wenn Sie Ihren GPS-Empfänger noch nicht konfiguriert haben, müssen Sie ihn auf die Ausgabe von Rohdaten einstellen:
Wenn es sich um einen U-Blox ZED-F9P (USB oder UART) oder einen Septentrio Mosaic-X5 (USB) handelt, können Sie ihn verwenden
sudo ./install.sh --detect-gnss --configure-gnss
Wenn Sie ein Konfigurationstool von einem anderen Computer (wie U-center) verwenden müssen, können Sie socat
verwenden:
sudo socat tcp-listen:128,reuseaddr /dev/ttyS1,b115200,raw,echo=0
Ändern Sie bei Bedarf den Wert ttyS1 und 115200. Dann können Sie eine Netzwerkverbindung in U-center mit der IP-Adresse der Basisstation und dem Port Nr. 128 nutzen.
Jetzt können Sie die Dienste mit sudo ./install.sh --start-services
starten, oder:
sudo systemctl start rtkbase_web
sudo systemctl start str2str_tcp
sudo systemctl start gpsd
sudo systemctl start chrony
sudo systemctl start rtkbase_archive.timer
Alles sollte bereit sein. Jetzt können Sie einen Webbrowser mit der IP-Adresse Ihrer Basisstation öffnen.
RTKBase verwendet mehrere RTKLIB str2str
Instanzen, die mit run_cast.sh
gestartet wurden, als Systemd-Dienste. run_cast.sh
erhält seine Einstellungen von settings.conf
str2str_tcp.service
ist die Hauptinstanz. Es ist mit dem GPS-Empfänger verbunden und sendet die Rohdaten über TCP für alle anderen Dienste.str2str_ntrip_A.service
ruft die Daten von der Hauptinstanz ab, konvertiert die Daten in rtcm und streamt sie an einen Ntrip-Caster.str2str_ntrip_B.service
ruft die Daten von der Hauptinstanz ab, konvertiert die Daten in rtcm und streamt sie an einen anderen Ntrip-Caster.str2str_local_ntrip_caster.service
ruft die Daten von der Hauptinstanz ab, konvertiert die Daten in rtcm und fungiert als lokaler Ntrip-Caster.str2str_rtcm_svr.service
ruft die Daten von der Hauptinstanz ab, konvertiert die Daten in rtcm und streamt sie an Clientsstr2str_rtcm_serial.service
ruft die Daten von der Hauptinstanz ab, konvertiert die Daten in RTCM und streamt sie an einen seriellen Port (Funkverbindung oder andere Peripheriegeräte).str2str_file.service
ruft die Daten von der Hauptinstanz ab und protokolliert die Daten in Dateien. Die Web-GUI ist verfügbar, wenn der Dienst rtkbase_web
ausgeführt wird.
Offline-Basisstation ohne U-Blox-Empfänger, So erhalten Sie Datum und Uhrzeit: Wenn GPSD die Rohdaten Ihres GPS-Empfängers nicht verstehen kann, können Sie den Dienst raw2nmea aktivieren. Es konvertiert die Rohdaten in den in der settings.conf
(nmea_port) festgelegten TCP-Port und gpsd verwendet ihn zur Versorgung von Chrony. systemctl enable --now rtkbase_raw2nmea
Luftbilder: Der Standardkartenhintergrund ist OpenStreetMap, Sie können jedoch zu einer weltweiten Luftebene wechseln, wenn Sie über einen Maptiler-Schlüssel verfügen. Um diese Ebene zu aktivieren, erstellen Sie ein kostenloses Konto bei Maptiler, erstellen Sie einen Schlüssel und fügen Sie ihn zur settings.conf
im Abschnitt [general]
hinzu: maptiler_key=your_key
Empfängeroptionen: str2str akzeptiert einige empfängerabhängige Optionen. Wenn Sie einen U-Blox verwenden, wird der Parameter -TADJ=1
als Workaround für nicht gerundete zweite Werte in Rtcm- und Ntrip-Ausgaben empfohlen. Sie können diesen Parameter in den Einstellungsformularen eingeben. Weitere Informationen hier und hier.
Wenn Sie RTKBase aus dem Dev-Zweig installieren möchten, können Sie dies mit diesen Befehlen tun:
cd ~
wget https://raw.githubusercontent.com/Stefal/rtkbase/dev/tools/install.sh -O install.sh
chmod +x install.sh
sudo ./install.sh --all repo --rtkbase-repo dev
Ein GPS-Empfänger mit Zeitimpulsausgang ist eine sehr genaue Stratum-0-Uhr. Daher könnte Ihre GPS-Basisstation als Stratum-1-NTP-Peer für Ihr lokales Netzwerk und/oder den NTP-Pool fungieren. Dazu sind einige Schritte erforderlich:
Verbinden Sie den Timepulse-Ausgang + GND mit einigen GPIO-Eingängen Ihres SBC.
Konfigurieren Sie diesen Eingang als PPS in Ihrem Betriebssystem.
Raspberry Pi-Beispiel:
dtoverlay=pps-gpio,gpiopin=18
in einer neuen Zeile hinzu. „18“ ist der für Timepulse verwendete Eingang.pps-gpio
in einer neuen Zeile hinzu, falls es noch nicht vorhanden ist.Orange Pi Zero-Beispiel, in /boot/armbianEnv.txt:
pps-gpio
zur overlays
Zeile hinzu.param_pps_pin=PA19
<- change 'PA19' zu Ihrer Eingabe hinzu.Stellen Sie GPSD und Chrony so ein, dass PPS verwendet wird
gpsd: Kommentieren Sie die Zeile DEVICE
in /etc/defaut/gpsd
und kommentieren Sie #DEVICES="tcp:\127.0.0.1:5015 devpps0
aus. Bearbeiten Sie den Port, wenn Sie den Dienst rtkbase_raw2nmea verwenden.
chrony: Entkommentieren Sie in /etc/chrony/chrony.conf
die Zeile „refclock pps“ und fügen Sie „noselect“ zum „refclock SHM 0“ hinzu. Sie sollten so etwas haben:
refclock SHM 0 refid GPS precision 1e-1 offset 0 delay 0.2 noselect
refclock PPS /dev/pps0 refid PPS lock GPS
chronyc sources -v
Sie sollten etwa Folgendes lesen, achten Sie auf das „*“ vor „PPS“: basegnss@orangepizero:~$ chronyc sources -v
210 Number of sources = 6
.-- Source mode '^' = server, '=' = peer, '#' = local clock.
/ .- Source state '*' = current synced, '+' = combined , '-' = not combined,
| / '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
|| .- xxxx [ yyyy ] +/- zzzz
|| Reachability register (octal) -. | xxxx = adjusted offset,
|| Log2(Polling interval) --. | | yyyy = measured offset,
|| | | zzzz = estimated error.
|| | |
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
#? GPS 0 4 377 17 +64ms[ +64ms] +/- 200ms
#* PPS 0 4 377 14 +363ns[ +506ns] +/- 1790ns
^- ntp0.dillydally.fr 2 6 177 16 -12ms[ -12ms] +/- 50ms
^? 2a01:e35:2fba:7c00::21 0 6 0 - +0ns[ +0ns] +/- 0ns
^- 62-210-213-21.rev.poneyt> 2 6 177 17 -6488us[-6487us] +/- 67ms
^- kalimantan.ordimatic.net 3 6 177 16 -27ms[ -27ms] +/- 64ms
Debian-Basisdistribution >= 11 (Bullseye) Python >= 3.8
Siehe Changelog
RTKBase ist unter AGPL 3 lizenziert (siehe LIZENZ-Datei).
RTKBase verwendet einige Teile anderer Software:
RTKBase verwendet OpenStreetMap-Kacheln. Vielen Dank an alle Mitwirkenden!