| | | |
Les principales fonctionnalités du Frontend sont :
D'autres images sont disponibles dans le dossier ./images.
Une image prête à flasher est disponible pour Orange Pi Zero, Orange Pi Zero 2, Orange Pi Zero 3 SBC : Armbian_RTKBase
Si vous utilisez un Raspberry Pi, grâce à jancelin, vous pouvez télécharger ici un fichier iso prêt à flasher.
Connectez votre récepteur gnss à votre raspberry pi/orange pi/....
Ouvrez un terminal et :
cd ~
wget https://raw.githubusercontent.com/Stefal/rtkbase/master/tools/install.sh -O install.sh
chmod +x install.sh
sudo ./install.sh --all release
Va prendre un café, ça va prendre du temps. Le script installera le logiciel nécessaire et si vous utilisez un récepteur U-Blox ZED-F9P connecté par USB, il sera détecté et configuré pour fonctionner comme une station de base. Si vous n'utilisez pas de F9P, vous devrez configurer votre récepteur manuellement (voir l'étape 7 de l'installation manuelle) et choisir le bon port dans la page des paramètres.
Ouvrez un navigateur Web sur http://ip_of_your_sbc
(le script tentera de vous montrer cette adresse IP). Le mot de passe par défaut est admin
. La page des paramètres vous permet de saisir vos propres paramètres pour les coordonnées de base, les informations d'identification ntrip, etc.
Si vous ne connaissez pas encore les coordonnées précises de votre base, il est temps de lire l'un de ces tutoriels :
Le script install.sh
peut être utilisé sans l'option --all
pour diviser le processus d'installation en plusieurs étapes différentes :
################################
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.
Alors, si vous le souhaitez vraiment, c'est parti pour une installation manuelle avec quelques explications :
Installez les dépendances avec sudo ./install.sh --dependencies
, ou faites-le manuellement avec :
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
Installez RTKLIB avec sudo ./install.sh --rtklib
, ou :
obtenir RTKlib
cd ~
wget -qO - https://github.com/rtklibexplorer/RTKLIB/archive/refs/tags/b34j.tar.gz | tar -xvz
compilez et installez str2str :
En option, vous pouvez modifier la ligne CTARGET dans le makefile dans RTKLIB/app/str2str/gcc
cd RTKLIB/app/str2str/gcc
nano makefile
Pour un SBC Orange Pi Zero, j'utilise :
CTARGET = -mcpu=cortex-a7 -mfpu=neon-vfpv4 -funsafe-math-optimizations
Ensuite, vous pouvez compiler et installer str2str :
make
sudo make install
Compilez/installez rtkrcv
et convbin
de la même manière que str2str
.
Obtenez la dernière version de rtkbase sudo ./install.sh --rtkbase-release
, ou :
wget https://github.com/stefal/rtkbase/releases/latest/download/rtkbase.tar.gz -O rtkbase.tar.gz
tar -xvf rtkbase.tar.gz
Si vous préférez, vous pouvez cloner ce référentiel pour obtenir le dernier code.
Installez la configuration requise pour rtkbase :
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
Installez les services systemd avec sudo ./install.sh --unit-files
, ou faites-le manuellement avec :
rtkbase/unit/
) pour remplacer {user}
par votre nom d'utilisateur.archive_and_clean.sh
le fera pour vous. Les paramètres par défaut compressent les données de la veille et suppriment toutes les archives datant de plus de 90 jours. Pour automatiser ces 2 tâches, activez le rtkbase_archive.timer
. La valeur par défaut exécute le script tous les jours à 04H00./etc/systemd/system/
puis activez le serveur Web, str2str_tcp et rtkbase_archive.timer : sudo systemctl daemon-reload
sudo systemctl enable rtkbase_web
sudo systemctl enable str2str_tcp
sudo systemctl enable rtkbase_archive.timer
Installez et configurez chrony et gpsd avec sudo ./install.sh --gpsd-chrony
, ou :
Installez chrony avec sudo apt install chrony
puis ajoutez ce paramètre dans le fichier de conf chrony (/etc/chrony/chrony.conf) :
refclock SHM 0 refid GPS precision 1e-1 offset 0.2 delay 0.2
Modifiez le fichier de l'unité chrony. Vous devez définir After=gpsd.service
Installez une version gpsd >= 3.2 ou cela ne fonctionnera pas avec un F9P. Son fichier de configuration doit contenir :
# 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"
Modifiez le fichier de l'unité gpsd. Vous devriez avoir quelque chose comme ceci dans la section « [Unité] » :
[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
Connectez votre récepteur gnss à raspberry pi/orange pi/.... avec usb ou uart, et vérifiez quel port com il utilise (ttyS1, ttyAMA0, autre chose...). S'il s'agit d'un récepteur U-Blox F9P (usb ou uart) ou d'un Septentrio Mosaic-X5 (usb), vous pouvez utiliser sudo ./install.sh --detect-gnss
. Notez le résultat, vous en aurez peut-être besoin plus tard.
Si vous n'avez pas déjà configuré votre récepteur gnss, vous devez le configurer pour qu'il génère des données brutes :
S'il s'agit d'un U-Blox ZED-F9P (usb ou uart), ou d'un Septentrio Mosaic-X5 (usb), vous pouvez utiliser
sudo ./install.sh --detect-gnss --configure-gnss
Si vous devez utiliser un outil de configuration depuis un autre ordinateur (comme U-center), vous pouvez utiliser socat
:
sudo socat tcp-listen:128,reuseaddr /dev/ttyS1,b115200,raw,echo=0
Modifiez les valeurs ttyS1 et 115200 si nécessaire. Vous pouvez ensuite utiliser une connexion réseau dans U-center avec l'adresse IP de la base et le port n°128.
Vous pouvez maintenant démarrer les services avec sudo ./install.sh --start-services
, ou :
sudo systemctl start rtkbase_web
sudo systemctl start str2str_tcp
sudo systemctl start gpsd
sudo systemctl start chrony
sudo systemctl start rtkbase_archive.timer
Tout devrait être prêt, vous pouvez maintenant ouvrir un navigateur Web sur l'adresse IP de votre borne d'accès.
RTKBase utilise plusieurs instances RTKLIB str2str
démarrées avec run_cast.sh
en tant que services systemd. run_cast.sh
obtient ses paramètres de settings.conf
str2str_tcp.service
est l'instance principale. Il est connecté au récepteur gnss et diffuse les données brutes sur TCP pour tous les autres services.str2str_ntrip_A.service
récupère les données de l'instance principale, convertit les données en rtcm et les diffuse vers un lanceur Ntrip.str2str_ntrip_B.service
récupère les données de l'instance principale, convertit les données en rtcm et les diffuse vers un autre lanceur Ntrip.str2str_local_ntrip_caster.service
récupère les données de l'instance principale, convertit les données en rtcm et agit en tant que lanceur Ntrip local.str2str_rtcm_svr.service
récupère les données de l'instance principale, convertit les données en rtcm et les diffuse aux clientsstr2str_rtcm_serial.service
récupère les données de l'instance principale, convertit les données en rtcm et les diffuse vers un port série (liaison radio ou autres périphériques)str2str_file.service
récupère les données de l'instance principale et enregistre les données dans des fichiers. L'interface graphique Web est disponible lorsque le service rtkbase_web
est en cours d'exécution.
Station de base hors ligne sans récepteur U-Blox, comment obtenir la date et l'heure : Si gpsd ne peut pas comprendre les données brutes de votre récepteur gnss, vous pouvez activer le service raw2nmea. Il convertira les données brutes en port TCP défini dans settings.conf
(nmea_port) et gpsd l'utilisera pour alimenter chrony. systemctl enable --now rtkbase_raw2nmea
Images aériennes : l'arrière-plan de la carte par défaut est OpenStreetMap, mais vous pouvez passer à une couche aérienne mondiale si vous disposez d'une clé Maptiler. Pour activer cette couche, créez un compte gratuit sur Maptiler, créez une clé et ajoutez-la à settings.conf
dans la section [general]
: maptiler_key=your_key
Options du récepteur : str2str accepte certaines options dépendantes du récepteur. Si vous utilisez un U-Blox, le paramètre -TADJ=1
est recommandé comme solution de contournement aux valeurs de secondes non arrondies dans les sorties Rtcm et Ntrip. Vous pouvez saisir ce paramètre dans les formulaires de paramètres. Plus d’informations ici et ici.
Si vous souhaitez installer RTKBase depuis la branche dev, vous pouvez le faire avec ces commandes :
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
Un récepteur gnss avec une sortie d'impulsion temporelle est une horloge de strate 0 très précise. Ainsi, votre station de base gnss pourrait agir comme un homologue ntp de strate 1 pour votre réseau local et/ou le pool ntp. Il y a quelques étapes pour ce faire :
Connectez la sortie timepulse + GND à certaines entrées GPIO de votre SBC.
Configurez cette entrée comme PPS dans votre système d'exploitation.
Exemple de Raspberry Pi :
dtoverlay=pps-gpio,gpiopin=18
sur une nouvelle ligne. « 18 » est l'entrée utilisée pour l'impulsion temporelle.pps-gpio
sur une nouvelle ligne, si ce n'est pas déjà présent.Exemple Orange Pi Zero, dans /boot/armbianEnv.txt :
pps-gpio
à la ligne overlays
.param_pps_pin=PA19
<- changez 'PA19' à votre entrée.Configurer GPSD et Chrony pour utiliser PPS
gpsd : commentez la ligne DEVICE
dans /etc/defaut/gpsd
et décommentez #DEVICES="tcp:\127.0.0.1:5015 devpps0
. Modifiez le port si vous utilisez le service rtkbase_raw2nmea.
chrony : dans /etc/chrony/chrony.conf
décommentez la ligne refclock pps et ajoutez noselect au 'refclock SHM 0`. Vous devriez avoir quelque chose comme ceci :
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
Vous devriez lire quelque chose comme ceci, remarquez le '*' avant '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
Distribution de base Debian >= 11 (Bullseye) Python >= 3.8
Voir le changelog
RTKBase est sous licence AGPL 3 (voir fichier LICENSE).
RTKBase utilise certaines parties d'autres logiciels :
RTKBase utilise des tuiles OpenStreetMap. Merci à tous les contributeurs !