| | | |
Las principales características del frontend son:
Otras imágenes están disponibles en la carpeta ./images.
Hay una imagen lista para flashear disponible para Orange Pi Zero, Orange Pi Zero 2, Orange Pi Zero 3 SBC: Armbian_RTKBase
Si usas una Raspberry Pi, gracias a jancelin, puedes descargar un archivo iso listo para flashear aquí.
Conecte su receptor gnss a su raspberry pi/orange pi/....
Abra una terminal y:
cd ~
wget https://raw.githubusercontent.com/Stefal/rtkbase/master/tools/install.sh -O install.sh
chmod +x install.sh
sudo ./install.sh --all release
Ve a tomar un café, tardará un rato. El script instalará el software necesario y, si utiliza un receptor U-Blox ZED-F9P conectado por USB, será detectado y configurado para funcionar como estación base. Si no utiliza un F9P, tendrá que configurar su receptor manualmente (consulte el paso 7 en la instalación manual) y elegir el puerto correcto en la página de configuración.
Abra un navegador web en http://ip_of_your_sbc
(el script intentará mostrarle esta dirección IP). La contraseña predeterminada es admin
. La página de configuración le permite ingresar sus propias configuraciones para las coordenadas base, credenciales de ntrip, etc.
Si aún no conoces las coordenadas precisas de tu base, es hora de leer uno de estos tutoriales:
El script install.sh
se puede utilizar sin la opción --all
para dividir el proceso de instalación en varios pasos diferentes:
################################
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.
Entonces, si realmente lo deseas, vayamos a realizar una instalación manual con algunas explicaciones:
Instale dependencias con sudo ./install.sh --dependencies
o hágalo manualmente con:
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
Instale RTKLIB con sudo ./install.sh --rtklib
o:
obtener RTKlib
cd ~
wget -qO - https://github.com/rtklibexplorer/RTKLIB/archive/refs/tags/b34j.tar.gz | tar -xvz
compilar e instalar str2str:
Opcionalmente, puede editar la línea CTARGET en el archivo MAKE en RTKLIB/app/str2str/gcc
cd RTKLIB/app/str2str/gcc
nano makefile
Para un SBC Orange Pi Zero, uso:
CTARGET = -mcpu=cortex-a7 -mfpu=neon-vfpv4 -funsafe-math-optimizations
Luego puedes compilar e instalar str2str:
make
sudo make install
Compile/instale rtkrcv
y convbin
de la misma manera que str2str
.
Obtenga la última versión de rtkbase sudo ./install.sh --rtkbase-release
o:
wget https://github.com/stefal/rtkbase/releases/latest/download/rtkbase.tar.gz -O rtkbase.tar.gz
tar -xvf rtkbase.tar.gz
Si lo prefiere, puede clonar este repositorio para obtener el código más reciente.
Instale los requisitos de 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
Instale los servicios systemd con sudo ./install.sh --unit-files
o hágalo manualmente con:
rtkbase/unit/
) para reemplazar {user}
con su nombre de usuario.archive_and_clean.sh
lo hará por usted. La configuración predeterminada comprime los datos del día anterior y elimina todos los archivos de más de 90 días. Para automatizar estas 2 tareas, habilite rtkbase_archive.timer
. El valor predeterminado ejecuta el script todos los días a las 04H00./etc/systemd/system/
luego habilite el servidor web, str2str_tcp y rtkbase_archive.timer: sudo systemctl daemon-reload
sudo systemctl enable rtkbase_web
sudo systemctl enable str2str_tcp
sudo systemctl enable rtkbase_archive.timer
Instale y configure chrony y gpsd con sudo ./install.sh --gpsd-chrony
, o:
Instale chrony con sudo apt install chrony
y luego agregue este parámetro en el archivo de configuración de chrony (/etc/chrony/chrony.conf):
refclock SHM 0 refid GPS precision 1e-1 offset 0.2 delay 0.2
Edite el archivo de la unidad chrony. Deberías configurar After=gpsd.service
Instale una versión gpsd >= 3.2 o no funcionará con un F9P. Su archivo conf debe contener:
# 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"
Edite el archivo de la unidad gpsd. Deberías tener algo como esto en la sección "[Unidad]":
[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
Conecte su receptor gnss a raspberry pi/orange pi/.... con usb o uart, y verifique qué puerto com utiliza (ttyS1, ttyAMA0, algo más...). Si es un receptor U-Blox F9P (usb o uart) o un Septentrio Mosaic-X5 (usb), puede usar sudo ./install.sh --detect-gnss
. Anota el resultado, puede que lo necesites más adelante.
Si aún no configuró su receptor gnss, debe configurarlo para que genere datos sin procesar:
Si es un U-Blox ZED-F9P (usb o uart), o un Septentrio Mosaic-X5 (usb) puedes usar
sudo ./install.sh --detect-gnss --configure-gnss
Si necesita usar una herramienta de configuración desde otra computadora (como U-center), puede usar socat
:
sudo socat tcp-listen:128,reuseaddr /dev/ttyS1,b115200,raw,echo=0
Cambie el valor ttyS1 y 115200 si es necesario. Luego podrá utilizar una conexión de red en U-center con la dirección IP de la estación base y el puerto n°128.
Ahora puede iniciar los servicios con sudo ./install.sh --start-services
o:
sudo systemctl start rtkbase_web
sudo systemctl start str2str_tcp
sudo systemctl start gpsd
sudo systemctl start chrony
sudo systemctl start rtkbase_archive.timer
Todo debería estar listo, ahora puede abrir un navegador web en la dirección IP de su estación base.
RTKBase utiliza varias instancias RTKLIB str2str
iniciadas con run_cast.sh
como servicios systemd. run_cast.sh
obtiene su configuración de settings.conf
str2str_tcp.service
es la instancia principal. Está conectado al receptor gnss y transmite los datos sin procesar en TCP para todos los demás servicios.str2str_ntrip_A.service
obtiene los datos de la instancia principal, los convierte a rtcm y los transmite a un lanzador Ntrip.str2str_ntrip_B.service
obtiene los datos de la instancia principal, los convierte a rtcm y los transmite a otro lanzador de Ntrip.str2str_local_ntrip_caster.service
obtiene los datos de la instancia principal, los convierte a rtcm y actúa como un lanzador Ntrip local.str2str_rtcm_svr.service
obtiene los datos de la instancia principal, los convierte a rtcm y los transmite a los clientesstr2str_rtcm_serial.service
obtiene los datos de la instancia principal, los convierte a rtcm y los transmite a un puerto serie (enlace de radio u otros periféricos)str2str_file.service
obtiene los datos de la instancia principal y los registra en archivos. La GUI web está disponible cuando el servicio rtkbase_web
se está ejecutando.
Estación base sin conexión sin receptor U-Blox, cómo obtener fecha y hora: si gpsd no puede entender los datos sin procesar de su receptor gnss, puede habilitar el servicio raw2nmea. Convertirá los datos sin procesar al puerto tcp configurado en settings.conf
(nmea_port) y gpsd los usará para alimentar a chrony. systemctl enable --now rtkbase_raw2nmea
Imágenes aéreas: el fondo del mapa predeterminado es OpenStreetMap, pero puedes cambiar a una capa aérea mundial si tienes una clave Maptiler. Para habilitar esta capa, cree una cuenta gratuita en Maptiler, cree una clave y agréguela a settings.conf
dentro de la sección [general]
: maptiler_key=your_key
Opciones del receptor: str2str acepta algunas opciones que dependen del receptor. Si utiliza un U-Blox, se recomienda el parámetro -TADJ=1
como solución alternativa para los segundos valores no redondeados en las salidas Rtcm y Ntrip. Puede ingresar este parámetro dentro de los formularios de configuración. Más información aquí y aquí.
Si desea instalar RTKBase desde la rama de desarrollo, puede hacerlo con estos comandos:
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 receptor gnss con salida de pulso de tiempo es un reloj de estrato 0 muy preciso, por lo que su estación base gnss podría actuar como un par ntp de estrato 1 para su red local y/o el grupo ntp. Hay algunos pasos para hacer esto:
Conecte la salida timepulse + GND a algunas entradas GPIO en su SBC.
Configure esta entrada como PPS en su sistema operativo.
Ejemplo de frambuesa Pi:
dtoverlay=pps-gpio,gpiopin=18
en una nueva línea. '18' es la entrada utilizada para el pulso de tiempo.pps-gpio
en una nueva línea, si aún no está presente.Ejemplo de Orange Pi Zero, dentro de /boot/armbianEnv.txt:
pps-gpio
a la línea overlays
.param_pps_pin=PA19
<- cambie 'PA19' a su entrada.Configure gpsd y chrony para usar PPS
gpsd: comente la línea DEVICE
en /etc/defaut/gpsd
y descomente #DEVICES="tcp:\127.0.0.1:5015 devpps0
. Edite el puerto si usa el servicio rtkbase_raw2nmea.
chrony: dentro de /etc/chrony/chrony.conf
descomente la línea refclock pps y agregue noselect al 'refclock SHM 0`. Deberías tener algo como esto:
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
Debería leer algo como esto, observe el '*' antes de '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
Distribución base Debian >= 11 (Bullseye) Python >= 3.8
Ver el registro de cambios
RTKBase tiene licencia AGPL 3 (ver archivo LICENCIA).
RTKBase utiliza algunas partes de otro software:
RTKBase utiliza mosaicos de OpenStreetMap. ¡Gracias a todos los contribuyentes!