27.06.2017 Сервер Статистики aka Автоматизация измерений Эпизод II
Ustinov (обсуждение | вклад) |
Ustinov (обсуждение | вклад) |
||
Строка 87: | Строка 87: | ||
ssvncviewer 192.168.0.94:5900 | ssvncviewer 192.168.0.94:5900 | ||
</source> | </source> | ||
+ | |||
+ | [[File:swift_console.png|600px]] | ||
'''Ssvnc''' также запускается автоматически, но иногда умудряется просто прекращать свою работу, тогда необходимо запустить скрипт ''run_vnc:'' | '''Ssvnc''' также запускается автоматически, но иногда умудряется просто прекращать свою работу, тогда необходимо запустить скрипт ''run_vnc:'' | ||
Строка 99: | Строка 101: | ||
nmap -O 192.168.0.94 | nmap -O 192.168.0.94 | ||
</source> | </source> | ||
− | [[ | + | [[File:VNC_StatServer.png|400px]] |
+ | |||
+ | == Что делать с логами? == | ||
+ | Обработать. | ||
+ | |||
+ | Шаг 1. Конвертировать собранные логи в RINEX формат, поможет ''convert_all_to_rinex'': | ||
+ | <source lang="bash"> | ||
+ | #!/bin/bash | ||
+ | |||
+ | DIR=/tmp | ||
+ | |||
+ | JAVAD=$DIR/javad.log | ||
+ | MCR=$DIR/mcr.log | ||
+ | PIKSI=$DIR/piksi.log | ||
+ | |||
+ | echo Javad: $JAVAD | ||
+ | convbin $JAVAD -r javad | ||
+ | |||
+ | echo MCR: $MCR | ||
+ | convbin $MCR -r nvs | ||
+ | |||
+ | echo Piksi: $PIKSI | ||
+ | export PIKSI_OUT=`echo $PIKSI | sed 's/\.log/\.obs/'` | ||
+ | /home/CommonFiles/progs/piksi_tools/piksi_tools/sbp2rinex.py $PIKSI -o $PIKSI_OUT | ||
+ | |||
+ | echo 'All convert!' | ||
+ | </source> | ||
+ | Для Javad и MCR используется скомпилированная программа '''convbin''' из RTKLib, для Piksi используется '''sbp2rinex.py''', предоставляемая Swift Navigation. | ||
+ | |||
+ | Шаг 2. Рассчитать решение, ''solve_all_from_rinex'': | ||
+ | <source lang="bash"> | ||
+ | #!/bin/bash | ||
+ | |||
+ | DIR=/tmp | ||
+ | |||
+ | JAVAD=$DIR/javad.obs | ||
+ | MCR=$DIR/mcr.obs | ||
+ | PIKSI=$DIR/piksi.obs | ||
+ | |||
+ | NAV=`echo $MCR | sed 's/\.obs/\.nav/g'` | ||
+ | GNAV=`echo $MCR | sed 's/\.obs/\.gnav/g'` | ||
+ | |||
+ | REF="2846044.0 2200316.0 5249376.0" | ||
+ | |||
+ | OUT=`echo $JAVAD | sed 's/\.obs/\.pos/g'` | ||
+ | echo "Javad: $JAVAD -> $OUT" | ||
+ | rnx2rtkp -r $REF -p 0 $JAVAD $NAV $GNAV -e > $OUT | ||
+ | |||
+ | OUT=`echo $MCR | sed 's/\.obs/\.pos/g'` | ||
+ | echo "MCR: $MCR -> $OUT" | ||
+ | rnx2rtkp -r $REF -p 0 $MCR $NAV $GNAV -e > $OUT | ||
+ | |||
+ | OUT=`echo $PIKSI | sed 's/\.obs/\.pos/g'` | ||
+ | echo "Piksi: $PIKSI -> $OUT" | ||
+ | rnx2rtkp -r $REF -p 0 $PIKSI $NAV $GNAV -e > $OUT | ||
+ | |||
+ | echo 'All solve!' | ||
+ | </source> | ||
+ | '''REF''' - задается опорная точка, '''-p 0''' - задается режим работы (0 - single), '''-e''' - формат выдачи данных (e - X/Y/Z ECEF). |
Версия 15:59, 27 июня 2017
- Данная страница продолжает дело создания Сервера Статистики и написана по мотивам нескольких статей: этой, этой и этой. Написана она для того, чтобы подвести итог и чтобы потом не забыть, как это сделано и работает сейчас.
Пути улучшения, как всегда, есть, но это дело будущего.
Что за Сервер Статистики такой?
Сервер Статистики - отдельно выделенный компьютер, работающий круглосуточно, к которому подключены различные приемники, в свою очередь, решающиеся по одной антенне. На данный момент подключены Javad Lexon GGD, Swift Navigation Piksi и наш Oryx в серой коробке походном исполнении. Далее в статье Oryx фигурирует под мейнстримовым названием MCR. IP сервера 192.168.0.94, кодовое имя Evaluator, пользователь srtt, пароль известен.
На протяжении суток Сервер Статистики пишет логи себе в /tmp, а в начале каждых суток (00:00) решается по ним, строит картинки, делает некоторые статистические (вот почему Сервер Статистики, а не логов) вычисления и шлет это на заданные почтовые адреса типа @gmail.com.
После этого для Javad и Oryx логи копируются в папку /home/CommonFiles/logs, затем стираются. Логи для Piksi, в настоящее время, слишком тяжелы, потому они просто стираются без копирования.
Необходимые скрипты находятся в папке /home/CommonFiles/scripts.
Необходимые программы в папке /home/CommonFiles/progs.
Как заставить приемники делиться логами?
Для этого существуют скрипты.
Javad не имеет ethernet возможностей, потому для него два скрипта.
Первый, настраивает приемник и запускает трансляцию данных в сеть - broadcast_javad:
PORT=/dev/ttyUSB0
stty -F $PORT raw
stty -F $PORT 115200 cs8 -parenb -cstopb -ixon
echo "em,,def:{1,,}" > $PORT
echo "em,,jps/gd" > $PORT
echo "em,,jps/qd" > $PORT
echo "em,,jps/WD" > $PORT
nc -l -p 3500 < $PORT
Второй скрипт пишет логи - start_javad_log:
IP=127.0.0.1
TcpPort=3500
DIR=/tmp/
FILE=javad.log
curl $IP:$TcpPort > $DIR/$FILE
MCR транслирует по сети протокол BINR через порт 3491. Для записи логов - start_mcr_log:
IP=192.168.0.163
TcpPort=3491
DIR=/tmp/
FILE=mcr.log
curl $IP:$TcpPort > $DIR/$FILE
Piksi пишет лог с помощью GUI программы swift_console в формате JSON, скрипт start_piksi_log:
IP=192.168.0.222
TcpPort=55555
DIR=/tmp
FILE=piksi.log
echo /home/CommonFiles/progs/swift_console_v1.0.A_linux/console -t -p $IP:$TcpPort -l -o $DIR --logfilename $FILE
DISPLAY=:1 /home/CommonFiles/progs/swift_console_v1.0.A_linux/console -t -p $IP:$TcpPort -l -o $DIR --logfilename $FILE
Сервер Статистики не имеет экрана, но должен запускать GUI приложение, по крайней мере на данный момент так. При запуске GUI приложений выдаются ошибки об отсутствии дисплея и завершении программы, это несколько странно, ведь наш сервер живет и здравствует без экрана, а здесь в качестве выхода из ситуации поднят виртуальный X-сервер, который называется Xvfb, он загружается автоматически при старте системы. Сделано это так. Соответственно, при запуске swift_console принудительно указывается этот виртуальный экран - DISPLAY=:1.
Посмотреть на виртуальный экран можно командой:
Ssvnc также запускается автоматически, но иногда умудряется просто прекращать свою работу, тогда необходимо запустить скрипт run_vnc:
x11vnc -display :1 -bg -nopw -listen 192.168.0.94 -xkb
Доступные сетевые сервисы Сервера Статистики, в том числе проверить работу ssvnc, можно командой:
Что делать с логами?
Обработать.
Шаг 1. Конвертировать собранные логи в RINEX формат, поможет convert_all_to_rinex:
DIR=/tmp
JAVAD=$DIR/javad.log
MCR=$DIR/mcr.log
PIKSI=$DIR/piksi.log
echo Javad: $JAVAD
convbin $JAVAD -r javad
echo MCR: $MCR
convbin $MCR -r nvs
echo Piksi: $PIKSI
export PIKSI_OUT=`echo $PIKSI | sed 's/\.log/\.obs/'`
/home/CommonFiles/progs/piksi_tools/piksi_tools/sbp2rinex.py $PIKSI -o $PIKSI_OUT
echo 'All convert!'
Для Javad и MCR используется скомпилированная программа convbin из RTKLib, для Piksi используется sbp2rinex.py, предоставляемая Swift Navigation.
Шаг 2. Рассчитать решение, solve_all_from_rinex:
DIR=/tmp
JAVAD=$DIR/javad.obs
MCR=$DIR/mcr.obs
PIKSI=$DIR/piksi.obs
NAV=`echo $MCR | sed 's/\.obs/\.nav/g'`
GNAV=`echo $MCR | sed 's/\.obs/\.gnav/g'`
REF="2846044.0 2200316.0 5249376.0"
OUT=`echo $JAVAD | sed 's/\.obs/\.pos/g'`
echo "Javad: $JAVAD -> $OUT"
rnx2rtkp -r $REF -p 0 $JAVAD $NAV $GNAV -e > $OUT
OUT=`echo $MCR | sed 's/\.obs/\.pos/g'`
echo "MCR: $MCR -> $OUT"
rnx2rtkp -r $REF -p 0 $MCR $NAV $GNAV -e > $OUT
OUT=`echo $PIKSI | sed 's/\.obs/\.pos/g'`
echo "Piksi: $PIKSI -> $OUT"
rnx2rtkp -r $REF -p 0 $PIKSI $NAV $GNAV -e > $OUT
echo 'All solve!'
REF - задается опорная точка, -p 0 - задается режим работы (0 - single), -e - формат выдачи данных (e - X/Y/Z ECEF).
[ Хронологический вид ]Комментарии
Войдите, чтобы комментировать.