| | | |
Основные особенности фронтенда:
Другие изображения доступны в папке ./images.
Готовый образ для прошивки доступен для Orange Pi Zero, Orange Pi Zero 2, Orange Pi Zero 3 SBC: Armbian_RTKBase
Если вы используете Raspberry Pi, благодаря jancelin вы можете скачать готовый прошивочный ISO-файл здесь.
Подключите ГНСС-приемник к Raspberry Pi/orange Pi/....
Откройте терминал и:
cd ~
wget https://raw.githubusercontent.com/Stefal/rtkbase/master/tools/install.sh -O install.sh
chmod +x install.sh
sudo ./install.sh --all release
Иди выпей кофе, это займет некоторое время. Скрипт установит необходимое программное обеспечение, и если вы используете приемник U-Blox ZED-F9P, подключенный через USB, он будет обнаружен и настроен для работы в качестве базовой станции. Если вы не используете F9P, вам придется настроить приемник вручную (см. шаг 7 ручной установки) и выбрать правильный порт на странице настроек.
Откройте веб-браузер по адресу http://ip_of_your_sbc
(скрипт попытается показать вам этот IP-адрес). Пароль по умолчанию — admin
. Страница настроек позволяет вам ввести собственные настройки базовых координат, учетных данных ntrip и так далее...
Если вы еще не знаете точные координаты своей базы, самое время прочитать одно из этих руководств:
Сценарий install.sh
можно использовать без параметра --all
, чтобы разделить процесс установки на несколько этапов:
################################
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.
Итак, если вы действительно этого хотите, давайте выполним ручную установку с некоторыми пояснениями:
Установите зависимости с помощью sudo ./install.sh --dependencies
или сделайте это вручную с помощью:
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
Установите RTKLIB с помощью sudo ./install.sh --rtklib
или:
получить RTKlib
cd ~
wget -qO - https://github.com/rtklibexplorer/RTKLIB/archive/refs/tags/b34j.tar.gz | tar -xvz
скомпилируйте и установите str2str:
При желании вы можете отредактировать строку CTARGET в make-файле RTKLIB/app/str2str/gcc.
cd RTKLIB/app/str2str/gcc
nano makefile
Для Orange Pi Zero SBC я использую:
CTARGET = -mcpu=cortex-a7 -mfpu=neon-vfpv4 -funsafe-math-optimizations
Затем вы можете скомпилировать и установить str2str:
make
sudo make install
Скомпилируйте/установите rtkrcv
и convbin
так же, как str2str
.
Получите последнюю версию rtkbase sudo ./install.sh --rtkbase-release
или:
wget https://github.com/stefal/rtkbase/releases/latest/download/rtkbase.tar.gz -O rtkbase.tar.gz
tar -xvf rtkbase.tar.gz
Если хотите, вы можете клонировать этот репозиторий, чтобы получить последнюю версию кода.
Установите требования 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
Установите службы systemd с помощью sudo ./install.sh --unit-files
или сделайте это вручную с помощью:
rtkbase/unit/
), заменив {user}
своим именем пользователя.archive_and_clean.sh
сделает это за вас. Настройки по умолчанию сжимают данные за предыдущий день и удаляют все архивы старше 90 дней. Чтобы автоматизировать эти две задачи, включите rtkbase_archive.timer
. Значение по умолчанию запускает сценарий каждый день в 04:00./etc/systemd/system/
затем включите веб-сервер, str2str_tcp и rtkbase_archive.timer: sudo systemctl daemon-reload
sudo systemctl enable rtkbase_web
sudo systemctl enable str2str_tcp
sudo systemctl enable rtkbase_archive.timer
Установите и настройте chrony и gpsd с помощью sudo ./install.sh --gpsd-chrony
или:
Установите chrony с помощью sudo apt install chrony
затем добавьте этот параметр в файл chrony conf (/etc/chrony/chrony.conf):
refclock SHM 0 refid GPS precision 1e-1 offset 0.2 delay 0.2
Отредактируйте файл модуля Chrony. Вы должны установить After=gpsd.service
Установите версию gpsd >= 3.2, иначе она не будет работать с F9P. Его файл конфигурации должен содержать:
# 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"
Отредактируйте файл модуля GPSD. В разделе «[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
Подключите свой GNSS-приемник к raspberry pi/orange pi/.... с помощью USB или UART и проверьте, какой com-порт он использует (ttyS1, ttyAMA0, что-то еще...). Если это приемник U-Blox F9P (USB или UART) или Septentrio Mosaic-X5 (USB), вы можете использовать sudo ./install.sh --detect-gnss
. Запишите результат, он может понадобиться вам позже.
Если вы еще не настроили свой gnss-приемник, вам необходимо настроить его на вывод необработанных данных:
Если это U-Blox ZED-F9P (USB или UART) или Septentrio Mosaic-X5 (USB), вы можете использовать
sudo ./install.sh --detect-gnss --configure-gnss
Если вам нужно использовать инструмент настройки с другого компьютера (например, U-center), вы можете использовать socat
:
sudo socat tcp-listen:128,reuseaddr /dev/ttyS1,b115200,raw,echo=0
При необходимости измените значения ttyS1 и 115200. Затем вы можете использовать сетевое соединение в U-center с IP-адресом базовой станции и портом № 128.
Теперь вы можете запустить службы с помощью sudo ./install.sh --start-services
или:
sudo systemctl start rtkbase_web
sudo systemctl start str2str_tcp
sudo systemctl start gpsd
sudo systemctl start chrony
sudo systemctl start rtkbase_archive.timer
Все должно быть готово, теперь вы можете открыть веб-браузер по IP-адресу вашей базовой станции.
RTKBase использует несколько экземпляров RTKLIB str2str
, запущенных с помощью run_cast.sh
в качестве сервисов systemd. run_cast.sh
получает свои настройки из settings.conf
str2str_tcp.service
— основной экземпляр. Он подключен к GPS-приемнику и передает необработанные данные по TCP всем остальным службам.str2str_ntrip_A.service
получает данные из основного экземпляра, преобразует их в rtcm и передает их в заклинатель Ntrip.str2str_ntrip_B.service
получает данные из основного экземпляра, преобразует их в rtcm и передает их другому заклинателю Ntrip.str2str_local_ntrip_caster.service
получает данные из основного экземпляра, преобразует их в rtcm и действует как локальный преобразователь Ntrip.str2str_rtcm_svr.service
получает данные из основного экземпляра, преобразует данные в rtcm и передает их клиентам.str2str_rtcm_serial.service
получает данные из основного экземпляра, преобразует данные в rtcm и передает их в последовательный порт (радиоканал или другое периферийное устройство)str2str_file.service
получает данные из основного экземпляра и записывает их в файлы. Веб-интерфейс доступен, когда запущена служба rtkbase_web
.
Автономная базовая станция без приемника U-Blox, как получить дату и время: если gpsd не может понять необработанные данные с вашего приемника GNSS, вы можете включить службу raw2nmea. Он преобразует необработанные данные в TCP-порт, установленный в settings.conf
(nmea_port), и gpsd будет использовать их для подачи chrony. systemctl enable --now rtkbase_raw2nmea
Аэрофотоснимки. Фоном карты по умолчанию является OpenStreetMap, но вы можете переключиться на слой аэрофотоснимков со всего мира, если у вас есть ключ Maptiler. Чтобы включить этот слой, создайте бесплатную учетную запись на Maptiler, создайте ключ и добавьте его в settings.conf
в разделе [general]
: maptiler_key=your_key
Параметры получателя: str2str принимает некоторые параметры, зависящие от получателя. Если вы используете U-Blox, параметр -TADJ=1
рекомендуется использовать в качестве обходного пути для не округленных значений секунды в выходных данных Rtcm и Ntrip. Вы можете ввести этот параметр внутри форм настроек. Больше информации здесь и здесь.
Если вы хотите установить RTKBase из ветки dev, вы можете сделать это с помощью этих команд:
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
Приемник GNSS с импульсным выходом представляет собой очень точные часы уровня 0, поэтому ваша базовая станция GNSS может выступать в качестве узла ntp уровня 1 для вашей локальной сети и/или пула ntp. Для этого нужно выполнить несколько шагов:
Подключите выход временного импульса + GND к некоторым входам GPIO на вашем SBC.
Настройте этот вход как PPS в вашей операционной системе.
Пример Raspberry Pi:
dtoverlay=pps-gpio,gpiopin=18
в новой строке. «18» — это вход, используемый для импульса времени.pps-gpio
в новой строке, если он еще не присутствует.Пример Orange Pi Zero, внутри /boot/armbianEnv.txt:
pps-gpio
в строку overlays
.param_pps_pin=PA19
<- измените «PA19» на введенные данные.Настройте gpsd и chrony на использование PPS.
gpsd: закомментируйте строку DEVICE
в /etc/defaut/gpsd
и раскомментируйте #DEVICES="tcp:\127.0.0.1:5015 devpps0
. Отредактируйте порт, если вы используете службу rtkbase_raw2nmea.
chrony: внутри /etc/chrony/chrony.conf
раскомментируйте строку reflock pps и добавьте noselect к 'refclock SHM 0`. У вас должно получиться что-то вроде этого:
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
Вы должны прочитать что-то вроде этого, обратите внимание на «*» перед «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 >= 11 (Bullseye) Python >= 3.8
Посмотреть список изменений
RTKBase имеет лицензию AGPL 3 (см. файл ЛИЦЕНЗИИ).
RTKBase использует некоторые части другого программного обеспечения:
RTKBase использует плитки OpenStreetMap. Спасибо всем участникам!