06.04.2017 Автоматизация измерений
Boldenkov (обсуждение | вклад) (Новая страница: «<summary [ hidden ] > Автоматизация обработки измерений, получаемых с приёмника </summary> {{TOCright}} До…») |
Ustinov (обсуждение | вклад) (→Решение навигационной задачи) |
||
(не показаны 10 промежуточных версий 3 участников) | |||
Строка 1: | Строка 1: | ||
<summary [ hidden ] > | <summary [ hidden ] > | ||
Автоматизация обработки измерений, получаемых с приёмника | Автоматизация обработки измерений, получаемых с приёмника | ||
+ | |||
+ | <center>[[File:20170406_RcvComparison_KPDV.png|300px]]</center> | ||
</summary> | </summary> | ||
Строка 6: | Строка 8: | ||
{{TOCright}} | {{TOCright}} | ||
− | Долой многоходовку из | + | Долой многоходовку из [https://www.srns.ru/wiki/Blog:Boldenkov/06.04.2017_Javad_vs_Linux прошлой статьи] |
Хочу ... | Хочу ... | ||
Строка 17: | Строка 19: | ||
== Снятие измерений == | == Снятие измерений == | ||
+ | |||
+ | Также на Evaluator найдены скрипты для Geos3_SN17, сохраню, на всякий случай, пока сюда: | ||
+ | === Geos3_SN17 === | ||
+ | Скрипт geos_settings: | ||
+ | <source lang="bash"> | ||
+ | #!/bin/bash | ||
+ | |||
+ | RCV_ID=geos3_SN17 | ||
+ | |||
+ | PORT_BIN=/dev/ttyUSB0 | ||
+ | BIN_SPEED=115200 | ||
+ | |||
+ | PORT_NMEA=/dev/ttyUSB1 | ||
+ | NMEA_SPEED=115200 | ||
+ | </source> | ||
+ | |||
+ | Скрипт init_geos: | ||
+ | <source lang="bash"> | ||
+ | #!/bin/bash | ||
+ | |||
+ | source geos_settings | ||
+ | |||
+ | stty -F $PORT_BIN 4800 | ||
+ | stty -F $PORT_BIN $BIN_SPEED raw | ||
+ | |||
+ | stty -F $PORT_NMEA 4800 | ||
+ | stty -F $PORT_NMEA $NMEA_SPEED raw | ||
+ | |||
+ | if [ -f /tmp/"$RCV_ID"_BIN.pid ] | ||
+ | then | ||
+ | cat /tmp/"$RCV_ID"_BIN.pid | xargs kill | ||
+ | fi | ||
+ | |||
+ | ser2net -C "2222:raw:0:$PORT_BIN:$BIN_SPEED NONE 1STOPBIT 8DATABITS -XONXOFF -RTSCTS LOCAL" -P /tmp/"$RCV_ID"_BIN.pid | ||
+ | |||
+ | |||
+ | if [ -f /tmp/"$RCV_ID"_NMEA.pid ] | ||
+ | then | ||
+ | cat /tmp/"$RCV_ID"_NMEA.pid | xargs kill | ||
+ | fi | ||
+ | |||
+ | ser2net -C "2223:raw:0:$PORT_NMEA:$NMEA_SPEED NONE 1STOPBIT 8DATABITS -XONXOFF -RTSCTS LOCAL" -P /tmp/"$RCV_ID"_NMEA.pid | ||
+ | </source> | ||
=== Javad === | === Javad === | ||
Строка 38: | Строка 83: | ||
cat $PORT > $FILE | cat $PORT > $FILE | ||
</source> | </source> | ||
+ | |||
+ | |||
+ | === MCR === | ||
+ | Наш приёмник сыпет протоколом BINR через порт 3491. Ничего делать не нужно, просто записать результат в файл (start_mcr_log): | ||
+ | |||
+ | <source lang="bash"> | ||
+ | #!/bin/bash | ||
+ | |||
+ | IP=192.168.0.167 | ||
+ | TcpPort=3491 | ||
+ | |||
+ | DIR=/tmp | ||
+ | FILE=mcr.log | ||
+ | |||
+ | curl $IP:$TcpPort > $DIR/$FILE | ||
+ | </source> | ||
+ | |||
+ | === Piksi === | ||
+ | С Piksi сложнее всего. Он выдаёт свой бинарный лог SBP через порт 55555, но я пока не разобрался, как использовать лог в бинарном виде. Представляемая ими программа обработки sbp2rinex использует лог SBP, закодированный в JSON. А записывать такой лог может графическая программа swift_console. Надо разобраться, как обойтись без этого, т.к. лог в формате JSON занимает много места. Да и программа GUI тут лишняя. Но пока так (start_piksi_log): | ||
+ | |||
+ | <source lang="bash"> | ||
+ | #!/bin/bash | ||
+ | |||
+ | IP=192.168.0.222 | ||
+ | TcpPort=55555 | ||
+ | DIR=/tmp | ||
+ | FILE=piksi.log | ||
+ | |||
+ | echo /home/CommonFiles/Piksi/swift_console_v1.0.A_linux/console -t -p $IP:$TcpPort -l -o $DIR --logfilename $FILE | ||
+ | /home/CommonFiles/Piksi/swift_console_v1.0.A_linux/console -t -p $IP:$TcpPort -l -o $DIR --logfilename $FILE | ||
+ | </source> | ||
+ | |||
+ | == Преобразование измерений в 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/Piksi/piksi_tools/piksi_tools/sbp2rinex.py $PIKSI -o $PIKSI_OUT | ||
+ | </source> | ||
+ | |||
+ | |||
+ | |||
+ | На выходе - файлы в формате RINEX. | ||
+ | |||
+ | == Решение навигационной задачи == | ||
+ | |||
+ | Пока в Javad не включены эфемериды и файлы с эфемеридами пустые, а как заставить их выдавать Piksi - пока вообще не понятно, надо исследовать. | ||
+ | Я использовал эфемериды, принятые MCR. Скрипт 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 $JAVAD $NAV $GNAV -a > $OUT | ||
+ | |||
+ | OUT=`echo $MCR | sed 's/\.obs/\.pos/g'` | ||
+ | echo "MCR: $MCR -> $OUT" | ||
+ | rnx2rtkp -r $REF $MCR $NAV $GNAV -a > $OUT | ||
+ | |||
+ | OUT=`echo $PIKSI | sed 's/\.obs/\.pos/g'` | ||
+ | echo "Piksi: $PIKSI -> $OUT" | ||
+ | rnx2rtkp -r $REF $PIKSI $NAV $GNAV -a > $OUT | ||
+ | </source> | ||
+ | |||
+ | Результатом являются файлы с решением навигационной задачи в формате RTKlib. | ||
+ | |||
+ | == Построение графика == | ||
+ | |||
+ | Далее я из файла с решением вытащил 3 и 4 столбики, содержащие отклонение от базовой линии в метрах и построил их через Gnuplot на графике. Использован дополнительный скрипт pl для простоты, от него надо будет избавиться. Скрипт plot_all: | ||
+ | |||
+ | <source lang="bash"> | ||
+ | #/bin/bash | ||
+ | |||
+ | DIR=/tmp | ||
+ | |||
+ | JAVAD=$DIR/javad.pos | ||
+ | MCR=$DIR/mcr.pos | ||
+ | PIKSI=$DIR/piksi.pos | ||
+ | |||
+ | JAVAD_OUT=`echo $JAVAD | sed 's/\.pos/\.plane/g'` | ||
+ | echo "$JAVAD -> $JAVAD_OUT" | ||
+ | cat $JAVAD | grep -v "^%" | awk '{print $3" "$4}' > $JAVAD_OUT | ||
+ | |||
+ | MCR_OUT=`echo $MCR | sed 's/\.pos/\.plane/g'` | ||
+ | echo "$MCR -> $MCR_OUT" | ||
+ | cat $MCR | grep -v "^%" | awk '{print $3" "$4}' > $MCR_OUT | ||
+ | |||
+ | PIKSI_OUT=`echo $PIKSI | sed 's/\.pos/\.plane/g'` | ||
+ | echo "$PIKSI -> $PIKSI_OUT" | ||
+ | cat $PIKSI | grep -v "^%" | awk '{print $3" "$4}' > $PIKSI_OUT | ||
+ | |||
+ | pl $MCR_OUT $PIKSI_OUT $JAVAD_OUT | ||
+ | </source> | ||
+ | |||
+ | Всё вместе можно запустить скриптом process_all: | ||
+ | |||
+ | <source lang="bash"> | ||
+ | #!/bin/bash | ||
+ | |||
+ | convert_all_to_rinex | ||
+ | solve_all_from_rinex | ||
+ | plot_all | ||
+ | </source> | ||
+ | |||
+ | == И первый результат! == | ||
+ | |||
+ | [[File:20170406_RcvComparison_1.png|400px]] | ||
+ | |||
+ | == В заключение == | ||
+ | |||
+ | Я скрипты сделал по-быстрому, на коленке, так, как делать нельзя. Надо код приводить в порядок. | ||
+ | |||
+ | Там "захардкодены" все пути, названия всех файлов и т.д. Например, добавить/убавить приёмник - уже проблема. | ||
+ | Надо вынести приёмники в список. Но работать с ними надо разными способами, тут надо как-то решить данный вопрос. | ||
+ | |||
+ | Далее, интересны графики в разных условиях - GPS/GPS+ГЛОНАСС, L1/L2+L2 и т.д. Дополнять строки в скрипты - неправильно. Надо делать нормальный код. | ||
+ | |||
+ | И ещё - я так и не сделал рассылку результатов, надо сюда добавить sendmail или сделать какого-нибудь бота. | ||
+ | |||
+ | Но пока так! | ||
+ | {{wl-publish: 2017-04-06 15:33:47 +0300 | Boldenkov }} |
Текущая версия на 12:45, 13 июня 2017
|
Долой многоходовку из прошлой статьи
Хочу ...
Хочу утром, за чашечкой кофе, получать сравнительный анализ точности работы приёмников за последние сутки.
[править] Приёмники
Мне сейчас доступен Javad, MCR и Piksi. Используем далее их.
[править] Снятие измерений
Также на Evaluator найдены скрипты для Geos3_SN17, сохраню, на всякий случай, пока сюда:
[править] Geos3_SN17
Скрипт geos_settings:
RCV_ID=geos3_SN17
PORT_BIN=/dev/ttyUSB0
BIN_SPEED=115200
PORT_NMEA=/dev/ttyUSB1
NMEA_SPEED=115200
Скрипт init_geos:
source geos_settings
stty -F $PORT_BIN 4800
stty -F $PORT_BIN $BIN_SPEED raw
stty -F $PORT_NMEA 4800
stty -F $PORT_NMEA $NMEA_SPEED raw
if [ -f /tmp/"$RCV_ID"_BIN.pid ]
then
cat /tmp/"$RCV_ID"_BIN.pid | xargs kill
fi
ser2net -C "2222:raw:0:$PORT_BIN:$BIN_SPEED NONE 1STOPBIT 8DATABITS -XONXOFF -RTSCTS LOCAL" -P /tmp/"$RCV_ID"_BIN.pid
if [ -f /tmp/"$RCV_ID"_NMEA.pid ]
then
cat /tmp/"$RCV_ID"_NMEA.pid | xargs kill
fi
ser2net -C "2223:raw:0:$PORT_NMEA:$NMEA_SPEED NONE 1STOPBIT 8DATABITS -XONXOFF -RTSCTS LOCAL" -P /tmp/"$RCV_ID"_NMEA.pid
[править] Javad
С Javad я работаю через USB с использованием переходника на RS232. Чтобы получить его измерения (в формате Javad), я сделал скрипт start_javad_log:
PORT=/dev/ttyUSB0
FILE=/tmp/javad.log
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
cat $PORT > $FILE
[править] MCR
Наш приёмник сыпет протоколом BINR через порт 3491. Ничего делать не нужно, просто записать результат в файл (start_mcr_log):
IP=192.168.0.167
TcpPort=3491
DIR=/tmp
FILE=mcr.log
curl $IP:$TcpPort > $DIR/$FILE
[править] Piksi
С Piksi сложнее всего. Он выдаёт свой бинарный лог SBP через порт 55555, но я пока не разобрался, как использовать лог в бинарном виде. Представляемая ими программа обработки sbp2rinex использует лог SBP, закодированный в JSON. А записывать такой лог может графическая программа swift_console. Надо разобраться, как обойтись без этого, т.к. лог в формате JSON занимает много места. Да и программа GUI тут лишняя. Но пока так (start_piksi_log):
IP=192.168.0.222
TcpPort=55555
DIR=/tmp
FILE=piksi.log
echo /home/CommonFiles/Piksi/swift_console_v1.0.A_linux/console -t -p $IP:$TcpPort -l -o $DIR --logfilename $FILE
/home/CommonFiles/Piksi/swift_console_v1.0.A_linux/console -t -p $IP:$TcpPort -l -o $DIR --logfilename $FILE
[править] Преобразование измерений в 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/Piksi/piksi_tools/piksi_tools/sbp2rinex.py $PIKSI -o $PIKSI_OUT
На выходе - файлы в формате RINEX.
[править] Решение навигационной задачи
Пока в Javad не включены эфемериды и файлы с эфемеридами пустые, а как заставить их выдавать Piksi - пока вообще не понятно, надо исследовать. Я использовал эфемериды, принятые MCR. Скрипт 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 $JAVAD $NAV $GNAV -a > $OUT
OUT=`echo $MCR | sed 's/\.obs/\.pos/g'`
echo "MCR: $MCR -> $OUT"
rnx2rtkp -r $REF $MCR $NAV $GNAV -a > $OUT
OUT=`echo $PIKSI | sed 's/\.obs/\.pos/g'`
echo "Piksi: $PIKSI -> $OUT"
rnx2rtkp -r $REF $PIKSI $NAV $GNAV -a > $OUT
Результатом являются файлы с решением навигационной задачи в формате RTKlib.
[править] Построение графика
Далее я из файла с решением вытащил 3 и 4 столбики, содержащие отклонение от базовой линии в метрах и построил их через Gnuplot на графике. Использован дополнительный скрипт pl для простоты, от него надо будет избавиться. Скрипт plot_all:
DIR=/tmp
JAVAD=$DIR/javad.pos
MCR=$DIR/mcr.pos
PIKSI=$DIR/piksi.pos
JAVAD_OUT=`echo $JAVAD | sed 's/\.pos/\.plane/g'`
echo "$JAVAD -> $JAVAD_OUT"
cat $JAVAD | grep -v "^%" | awk '{print $3" "$4}' > $JAVAD_OUT
MCR_OUT=`echo $MCR | sed 's/\.pos/\.plane/g'`
echo "$MCR -> $MCR_OUT"
cat $MCR | grep -v "^%" | awk '{print $3" "$4}' > $MCR_OUT
PIKSI_OUT=`echo $PIKSI | sed 's/\.pos/\.plane/g'`
echo "$PIKSI -> $PIKSI_OUT"
cat $PIKSI | grep -v "^%" | awk '{print $3" "$4}' > $PIKSI_OUT
pl $MCR_OUT $PIKSI_OUT $JAVAD_OUT
Всё вместе можно запустить скриптом process_all:
convert_all_to_rinex
solve_all_from_rinex
plot_all
[править] И первый результат!
[править] В заключение
Я скрипты сделал по-быстрому, на коленке, так, как делать нельзя. Надо код приводить в порядок.
Там "захардкодены" все пути, названия всех файлов и т.д. Например, добавить/убавить приёмник - уже проблема. Надо вынести приёмники в список. Но работать с ними надо разными способами, тут надо как-то решить данный вопрос.
Далее, интересны графики в разных условиях - GPS/GPS+ГЛОНАСС, L1/L2+L2 и т.д. Дополнять строки в скрипты - неправильно. Надо делать нормальный код.
И ещё - я так и не сделал рассылку результатов, надо сюда добавить sendmail или сделать какого-нибудь бота.
Но пока так!
[ Хронологический вид ]Комментарии
Войдите, чтобы комментировать.