| | | |
Os principais recursos do Frontend são:
Outras imagens estão disponíveis na pasta ./images.
Uma imagem pronta para flash está disponível para Orange Pi Zero, Orange Pi Zero 2, Orange Pi Zero 3 SBC: Armbian_RTKBase
Se você usa um Raspberry Pi, graças ao jancelin, você pode baixar um arquivo iso pronto para flash aqui.
Conecte seu receptor gnss ao seu raspberry pi/orange pi/....
Abra um terminal e:
cd ~
wget https://raw.githubusercontent.com/Stefal/rtkbase/master/tools/install.sh -O install.sh
chmod +x install.sh
sudo ./install.sh --all release
Vá tomar um café, vai demorar um pouco. O script instalará o software necessário e, se você usar um receptor U-Blox ZED-F9P conectado por USB, ele será detectado e configurado para funcionar como estação base. Se você não usar um F9P, terá que configurar seu receptor manualmente (veja a etapa 7 na instalação manual) e escolher a porta correta na página de configurações.
Abra um navegador da web em http://ip_of_your_sbc
(o script tentará mostrar esse endereço IP). A senha padrão é admin
. A página de configurações permite que você insira suas próprias configurações para as coordenadas da base, credenciais ntrip e assim por diante...
Se você ainda não conhece suas coordenadas básicas precisas, é hora de ler um destes tutoriais:
O script install.sh
pode ser usado sem a opção --all
para dividir o processo de instalação em várias etapas 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.
Então, se você realmente quer, vamos para uma instalação manual com algumas explicações:
Instale dependências com sudo ./install.sh --dependencies
ou faça isso manualmente com:
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 com sudo ./install.sh --rtklib
ou:
obter RTKlib
cd ~
wget -qO - https://github.com/rtklibexplorer/RTKLIB/archive/refs/tags/b34j.tar.gz | tar -xvz
compile e instale str2str:
Opcionalmente, você pode editar a linha CTARGET no makefile em RTKLIB/app/str2str/gcc
cd RTKLIB/app/str2str/gcc
nano makefile
Para um Orange Pi Zero SBC, eu uso:
CTARGET = -mcpu=cortex-a7 -mfpu=neon-vfpv4 -funsafe-math-optimizations
Então você pode compilar e instalar o str2str:
make
sudo make install
Compile/instale rtkrcv
e convbin
da mesma forma que str2str
.
Obtenha a versão mais recente do 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
Se preferir, você pode clonar este repositório para obter o código mais recente.
Instale os requisitos do 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 os serviços systemd com sudo ./install.sh --unit-files
ou faça isso manualmente com:
rtkbase/unit/
) para substituir {user}
pelo seu nome de usuário.archive_and_clean.sh
fará isso por você. As configurações padrão compactam os dados do dia anterior e excluem todos os arquivos com mais de 90 dias. Para automatizar essas 2 tarefas, habilite rtkbase_archive.timer
. O valor padrão executa o script todos os dias às 04H00./etc/systemd/system/
e ative o servidor web, str2str_tcp e rtkbase_archive.timer: sudo systemctl daemon-reload
sudo systemctl enable rtkbase_web
sudo systemctl enable str2str_tcp
sudo systemctl enable rtkbase_archive.timer
Instale e configure chrony e gpsd com sudo ./install.sh --gpsd-chrony
ou:
Instale o chrony com sudo apt install chrony
e adicione este parâmetro no arquivo conf do chrony (/etc/chrony/chrony.conf):
refclock SHM 0 refid GPS precision 1e-1 offset 0.2 delay 0.2
Edite o arquivo da unidade chrony. Você deve definir After=gpsd.service
Instale uma versão gpsd >= 3.2 ou não funcionará com um F9P. Seu arquivo conf deve conter:
# 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 o arquivo da unidade gpsd. Você deve ter algo assim na seção "[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
Conecte seu receptor gnss ao raspberry pi/orange pi/.... com usb ou uart e verifique qual porta COM ele usa (ttyS1, ttyAMA0, outra coisa...). Se for um receptor U-Blox F9P (usb ou uart) ou um Septentrio Mosaic-X5 (usb), você pode usar sudo ./install.sh --detect-gnss
. Anote o resultado, você pode precisar dele mais tarde.
Se você ainda não configurou seu receptor gnss, você deve configurá-lo para gerar dados brutos:
Se for um U-Blox ZED-F9P (usb ou uart) ou um Septentrio Mosaic-X5 (usb) você pode usar
sudo ./install.sh --detect-gnss --configure-gnss
Se precisar usar uma ferramenta de configuração de outro computador (como U-center), você pode usar socat
:
sudo socat tcp-listen:128,reuseaddr /dev/ttyS1,b115200,raw,echo=0
Altere o valor ttyS1 e 115200, se necessário. Então você pode usar uma conexão de rede no U-center com o endereço IP da estação base e a porta n°128.
Agora você pode iniciar os serviços com 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
Tudo deve estar pronto, agora você pode abrir um navegador da web no endereço IP da sua estação base.
RTKBase usa várias instâncias RTKLIB str2str
iniciadas com run_cast.sh
como serviços systemd. run_cast.sh
obtém suas configurações de settings.conf
str2str_tcp.service
é a instância principal. Ele é conectado ao receptor gnss e transmite os dados brutos em TCP para todos os demais serviços.str2str_ntrip_A.service
obtém os dados da instância principal, converte os dados em rtcm e os transmite para um rodízio Ntrip.str2str_ntrip_B.service
obtém os dados da instância principal, converte os dados em rtcm e os transmite para outro rodízio Ntrip.str2str_local_ntrip_caster.service
obtém os dados da instância principal, converte os dados em rtcm e atua como um rodízio Ntrip local.str2str_rtcm_svr.service
obtém os dados da instância principal, converte os dados em rtcm e os transmite para os clientesstr2str_rtcm_serial.service
obtém os dados da instância principal, converte os dados em rtcm e os transmite para uma porta serial (link de rádio ou outros periféricos)str2str_file.service
obtém os dados da instância principal e registra os dados em arquivos. A GUI da web está disponível quando o serviço rtkbase_web
está em execução.
Estação base offline sem receptor U-Blox, como obter data e hora: Se o gpsd não conseguir entender os dados brutos do seu receptor gnss, você pode ativar o serviço raw2nmea. Ele converterá os dados brutos para a porta tcp definida em settings.conf
(nmea_port) e o gpsd os usará para alimentar o chrony. systemctl enable --now rtkbase_raw2nmea
Imagens aéreas: O plano de fundo padrão do mapa é OpenStreetMap, mas você pode mudar para uma camada aérea mundial se tiver uma chave Maptiler. Para habilitar esta camada, crie uma conta gratuita no Maptiler, crie uma chave e adicione-a ao settings.conf
dentro da seção [general]
: maptiler_key=your_key
Opções do receptor: str2str aceita algumas opções dependentes do receptor. Se você usar um U-Blox, o parâmetro -TADJ=1
é recomendado como uma solução alternativa para valores de segundos não arredondados nas saídas Rtcm e Ntrip. Você pode inserir este parâmetro nos formulários de configurações. Mais informações aqui e aqui.
Se você deseja instalar o RTKBase a partir do branch dev, você pode fazer isso com estes 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
Um receptor gnss com uma saída timepulse é um relógio estrato 0 muito preciso, portanto, sua estação base gnss pode atuar como um par NTP estrato 1 para sua rede local e/ou pool NTP. Existem algumas etapas para fazer isso:
Conecte a saída timepulse + GND a algumas entradas GPIO em seu SBC.
Configure esta entrada como PPS no seu sistema operacional.
Exemplo de Raspberry Pi:
dtoverlay=pps-gpio,gpiopin=18
em uma nova linha. '18' é a entrada usada para timepulse.pps-gpio
em uma nova linha, se ainda não estiver presente.Exemplo do Orange Pi Zero, dentro de /boot/armbianEnv.txt:
pps-gpio
à linha overlays
.param_pps_pin=PA19
<- change 'PA19' à sua entrada.Configure gpsd e chrony para usar PPS
gpsd: comente a linha DEVICE
em /etc/defaut/gpsd
e remova o comentário #DEVICES="tcp:\127.0.0.1:5015 devpps0
. Edite a porta se você usar o serviço rtkbase_raw2nmea.
chrony: dentro de /etc/chrony/chrony.conf
remova o comentário da linha refclock pps e adicione noselect ao 'refclock SHM 0`. Você deve ter algo assim:
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
Você deve ler algo assim, observe o '*' 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
Distribuição base Debian >= 11 (Bullseye) Python >= 3.8
Veja o changelog
RTKBase está licenciado sob AGPL 3 (ver arquivo LICENSE).
RTKBase usa algumas partes de outro software:
RTKBase usa blocos OpenStreetMap. Obrigado a todos os colaboradores!