06.04.2017 Автоматизация измерений

Материал из SRNS
Перейти к: навигация, поиск
(Новая страница: «<summary [ hidden ] > Автоматизация обработки измерений, получаемых с приёмника </summary> {{TOCright}} До…»)
 
(Снятие измерений)
Строка 38: Строка 38:
 
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>
 +
 +
== И первый результат! ==
 +
 +
[[File:20170406_RcvComparison_1.png|400px]]

Версия 16:28, 6 апреля 2017

Содержание

Долой многоходовку из [прошлой статьи]

Хочу ...

Хочу утром, за чашечкой кофе, получать сравнительный анализ точности работы приёмников за последние сутки.

Приёмники

Мне сейчас доступен Javad, MCR и Piksi. Используем далее их.

Снятие измерений

Javad

С Javad я работаю через USB с использованием переходника на RS232. Чтобы получить его измерения (в формате Javad), я сделал скрипт start_javad_log:

#!/bin/bash

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):

#!/bin/bash

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):

#!/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

Преобразование измерений в RINEX

Можно обойтись и без этого, но я сделал так, чтобы далее использовать полученные файлы в разных целях, не только для данной задачи.

Всё конвертирует отдельный скрипт convert_all_to_rinex:

#!/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


На выходе - файлы в формате RINEX.

Решение навигационной задачи

Пока в Javad не включены эфемериды и файлы с эфемеридами пустые, а как заставить их выдавать Piksi - пока вообще не понятно, надо исследовать. Я использовал эфемериды, принятые MCR. Скрипт solve_all_from_rinex:

#/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

Результатом являются файлы с решением навигационной задачи в формате RTKlib.

Построение графика

Далее я из файла с решением вытащил 3 и 4 столбики, содержащие отклонение от базовой линии в метрах и построил их через Gnuplot на графике. Использован дополнительный скрипт pl для простоты, от него надо будет избавиться. Скрипт plot_all:

#/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

И первый результат!

20170406 RcvComparison 1.png

[ Хронологический вид ]Комментарии

(нет элементов)

Войдите, чтобы комментировать.

Персональные инструменты
Пространства имён

Варианты
Действия
SRNS Wiki
Рабочие журналы
Приватный файлсервер
QNAP Сервер
Инструменты