RTKlib/постпроцессинг

Я провел численный эксперимент по определению с помощью RTKLIB
(well known) координат вот этой точки
http://vermessung.bayern.de/grundlagenverm/georeferenzpunkt/muenchen.html
относительно (well known, расстояние 2.6 км) базовой станции
http://gibs.bkg.bund.de/gref/gstainfo.php?st=25 по 15 минутному RINEX логу,
сделанному с помощью u-blox NEO-M8N и антенны Tallysman TW3440 http://www.tallysman.com/TW344X.php
Результаты весьмы поучительны в плане работы с “местными” системами координат
и пересчете систем высот, так что я добавлю их в ближайшее время в вики.

u-blox опубликовал новое описание протокола обмена данными V17
http://www.u-blox.com/images/downloads/Product_Docs/u-bloxM8_ReceiverDescriptionProtocolSpec_%28UBX-13003221%29_Public.pdf
в котором описаны RXM-RAWX и RXM-SFRBX.
В колонке комментариев к pseudorange есть такая фраза


GLONASS inter
frequency channel delays are compensated with
an internal calibration table.

что подразумевает либо заводскую калибровку (наиболее вероятное)
или автокалибровку по измерениям GPS.
Вторая важная фраза касается корректировки фазы


 Clock resets are applied to both
phase and code measurements in accordance
with the RINEX specification

и ранее здесь обсуждалась.
Версия прошивки с RXM-RAWX → EXT 2.30,
и сравнив сырые данные из RXM-RAWX и TRK-MEAS
можно будет удостовериться в правильности текущего драйвера для u-blox
(у меня есть тут некоторые сомнения, + очевидная проблема с > 10 Hz).

Is it convenient for somebody to upload neo-7p firmware? I’d like to flash my EVK-7N.
Many thanks.

You don’t need 7P firmware to get raw data from NEO-7X.
The TRK-TRKD5 and TRK-SFRBX messages
can be enabled by adding the following lines (depending on the output port)


# USB
!UBX CFG-MSG 3 10 0 0 0 1 0 0
!UBX CFG-MSG 3 15 0 0 0 1 0 0
# UART1
!UBX CFG-MSG 3 10 0 1 0 0 0 0
!UBX CFG-MSG 3 15 0 1 0 0 0 0
# SPI
!UBX CFG-MSG 3 10 0 0 0 0 1 0
!UBX CFG-MSG 3 15 0 0 0 0 1 0

to your init file https://github.com/tomojitakasu/RTKLIB/blob/master/data/ubx_m8n_bds_raw_1hz.cmd
Recent rtklib versions know how to deal with these messages.

Many thanks again

Ооо, россиянские бизьнесмены подтянулись :roll_eyes:
http://geodesist.ru/forum/threads/rtklib-%D0%9D%D1%83%D0%B6%D0%B5%D0%BD-%D0%B3%D1%83%D1%80%D1%83-%D0%B4%D0%BB%D1%8F-%D0%BD%D0%B0%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F-%D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%86%D0%B8%D0%B8.35323/

В соседней теме есть ссылка на статью про rtklib http://habrahabr.ru/post/244475/

С одной стороны это хорошо, но уж больно много в тексте мелких огрехов:

  1. не указана версия NVS (hardware и firmware)
  2. на 3434 OBS приходится 112 ошибок. и это при том, что NVS драйвер в rtklib даже не проверяет контрольную сумму.
    тут какая-то кривизна конфигурации.
  3. в окне RTKCONV незачем включать SBAS и L2 (как и D, так как rtklib его не использует)
  4. в окне RTKPOST только одна строчка для файлов эфемерид. Подозреваю что они НЕ для глонасс :sunglasses: и только для ровера
    поэтому писать в заголовке "ГЛОНАСС*, GPS*, Open source* " не совсем корректно, раз
    уж используются только данные GPS.
  5. Параметры антенны не используются (хотя дальше в обсуждении упоминается ANTEX для TW3870)
  6. Ни слова про базу и параметры ее данных (видно только что она ближе 100 метров, т.к. B=0.0 km)
  7. Координаты ровера 55.73815787N 37.52383650E говорят о том, что он находится всего в ~13 км от
    станции ФАГС CNG1 http://www.mwork.su/markdelo/images/content/smagluk/doklad.pdf
    2014-11-28 это 332 день, скачать OBS, эфемериды
    http://82.138.13.236/filebrowser/index.php?SESSID=9ad559b3da9f4b83120afff257d9d07b&currentPath=RGS/obs/2014
    и сделать нормальный постпроцессинг, в том числе и глолнасс :stuck_out_tongue:

usm78-gis
Прошу практического совета, чем вообще патчат ARM-код под виндовс ? У меня сейчас тулчейн такой

  1. посмотреть в Иде что там делает код
  2. написать заплатку на C в VS 2005
  3. копильнуть в obj или exe
  4. посмотреть, что получилось, в Иде (те ли регистры передают данные, сохраняются ли в стеке и пр.)
  5. скопировать/написать ассемблерный ARM-код, подправить, если надо
  6. компильнуть майкрософтовским armasm
  7. открыть получившийся бинарник каким-либо отладчиком (или Идой), найти код, скопировать hex
  8. вставить hex Идой в бинарник
  9. проверить ссылки на вызываемые процедуры, посчитать на калькуляторе нужные смещения, исправить все вызовы

Для несложного кода п.п.2-4 можно опустить, но всё-равно по сравнению с x86 это просто умопомрачение - там всё решается целым выбором инструментов (ida, ollydbg, hiew) и всего одним пунктом “открыть файл - вставить мнемонику asm”.

Заранее благодарен.

Последние два дня поездил с записью L1 Carrier (софт коммерческий, приемник начального уровня на сёрфе с разлоченой фазой). Антенна обычная автомобильная patch на магните.
Первый день по МКАД и Ленинградке, carrier lock стабильный, до получаса не срывался. На следующий день обработал с данными IGS Менделеево, в полном восторге, небо и земля по сравнению с кодовой коррекцией, вплоть до 0.2 м float решение.

Differential Correction Summary:
    1 file processed.  In this file:
        4565 (100.0%) of 4567 selected positions were code corrected by post-processing
        2156 (47.2%) of 4567 selected positions were carrier corrected by post-processing
        145 (6.7%) of code positions chosen over carrier, as they were of higher quality

    Estimated accuracies for 4565 corrected positions are as follows:
            Range	Percentage
            ----------	----------
             0-15cm	     -
            15-30cm	  7.0%
            30-50cm	 11.5%
             0.5-1m	 22.6%
               1-2m	 28.4%
               2-5m	 29.0%
                >5m	  1.5%

На второй день ездил по Новокуркинскому шоссе. Здания вроде далеко, но высокие. Самый продолжительный блок carrier получился 40 минут, но фаза вообще не обработалась, только код.

--------------------------------------------------
Differential Correction Summary:
    1 file processed.  In this file:
        4565 (100.0%) of 4567 selected positions were code corrected by post-processing
        0 (0.0%) of 4567 selected positions were carrier corrected by post-processing

    Estimated accuracies for 4565 corrected positions are as follows:
            Range	Percentage
            ----------	----------
             0-15cm	     -
            15-30cm	     -
            30-50cm	     -
             0.5-1m	  0.2%
               1-2m	 53.7%
               2-5m	 45.3%
                >5m	  0.7%

Выводы:

  1. Нужна более качественная антенна (это было сразу понятно, но я пока не готов покупать такое крепление для авто).
  2. Даже внутренний контроль при сборе данных (счетчик carrier lock) не гарантирует, что данные обработаются.
  3. Приходится подстраивать маршрут, чтобы не проехать под мостом или рядом со зданиями. Практически нереально в городе.
  4. Кодовая коррекция имеет право на существование.

Если кто-то будет писать юзер-интерфейс для сбора данных и последующей постобработки RTKLib, можно перенять следующие вещи.

  1. Счетчик carrier lock. Каждый спутник оценивается по флагам приёмника (есть во всех приёмниках с сырыми данными) “L1 Valid”, “Carrier Lost”, по уровню сигнала >30 db*Hz, возвышению > 10° и т.д.
    Далее таких спутников непрерывно должно быть >= 5 штук. При невыполнении любого условия счётчик сбрасывается в ноль и начинай сначала.
  2. Минимально полезная длина блока - 10 минут, чем дольше, тем точнее (гиперболическая зависимость, примерно через 40-60 минут точность уже на максимуме).
    Таким образом ещё в поле видно качество собираемого материала L1, но, как я написал выше, не гарантия что он будет успешно обработан. В этом отношении RTK интереснее, но в разы сложнее в реализации.

Настройки можно менять, например, ползунком. Слева “Productivity” vs справа “Accuracy”, соответственно чем дальше ползунок вправо - тем жестче маски-условия для счётчика carrier lock. Некогда в поле набивать циферки.

  1. Код обрабатывается всегда (за исключением совсем экзотичных случаев < 4 спутников), т.е. эта технология хоть и менее точная, но самая устойчивая в городских условиях.
    ОДНАКО если для L1 достаточно 30-секундных ринексов базы, то для кода крайне желательно 1-5 секунд (плохие результаты во второй врезке, похоже, именно из-за этого).

Также случайно нашел познавательное видео для начинающих, чтобы понять сколько времени требуется на “точный GPS” и не испытывать потом разочарований :smiley: Заодно можно посмотреть на обычный для большинства полевых контроллеров интерфейс (WinCE->WM6.5). Андроид только начинает вхождение на этот рынок, но, видимо, процесс этот неизбежен.

chnav у меня нет опыта работы с отладчиком ida для arm, так как меня интересовали 2 класса проблем:
прямое взаимодействие с железом, и алгоритмы. В первом случае отладчик применить практически невозможно,
а для алгоритмов на мой взгляд более адекватен статический анализ.

usm78-gis
Видимо я неправильно выразился. Мне нужен inline assembler - набил мнемонику ARM, получил hex. После долгих поисков нашел radare и Rasm, думал может есть что-то более приглядное с GUI.

В то время как в Москве наконец таки опубликовали “официальные” координаты (ГГСК-2011) 9 станций ФАГС
http://geod.ru/data/fags/
в Петербурге и области появился новый NTRIP caster (48 т.р. доступ к сети “ГЕОСПАЙДЕР”)


Name °  '  ''       °  '  ''       h        doc_h ° '  °  '
PULK 59 46 18.57470 30 19 40.00514 95.805
SVT2 60 31 58.46320 29 46 49.79509 71.600

GORN 59 55 50.41237 30 16 00.32442 45.075  50.30 59 55 30 16
KRON 60 00 24.31871 29 43 58.04535 29.851  35.09 60 00 29 43
KUP2 59 53 17.67477 30 22 31.63983 37.534  42.77 59 53 30 22
LOM2 59 53 28.16836 29 47 11.28981 55.588  60.82 59 53 29 47
MURN 60 03 27.52860 30 27 15.96939 61.624  66.88 60 03 30 27
PRV2 60 10 23.53491 29 27 16.22718 33.774  39.02 60 10 29 27
PUSH 59 44 21.89930 30 23 22.36149 75.524  80.74 59 44 30 23
ROSI 59 55 48.72730 30 20 03.27038 46.176  51.39 59 55 30 20
SEST 60 07 10.52608 29 57 07.59901 59.912  65.16 60 07 29 57
SVED 59 47 29.70626 30 40 28.73351 36.364  41.60 59 47 30 40

BNTA 59 55 20.78488 30 16 53.51372 34.144
KRVS 59 52 52.59175 30 59 14.61104 42.687
PRVM 60 21 29.05868 29 44 15.94852 107.622
PRZR 61 02 20.63547 30 08 46.74999 36.788
SBOR 59 49 15.93102 29 02 39.01157 45.734
SRTV 60 08 52.46256 30 12 38.39363 94.305
SVRS 59 21 47.91109 30 04 15.01887 117.530
TL60 59 32 16.18559 30 53 01.07897 60.583
VBRG 60 41 40.03140 28 46 30.46963 56.319

включающий в себя 2 станции IGS/EUREF, 10 станций КГА и 9 собственных в области.
Так как данные PULK и SVTL общедоступны, а для GORN на сайте КГА опубликован 1 час 10секундного RINEX
(L1/L2 GPS+GLO: gorn254a.12o, gorn254a.12g, gorn254a.12n, расстояние GORN-PULK ~ 18.2 км)


GORN                                                        MARKER NAME
GORN                                                        MARKER NUMBER
                                                            OBSERVER / AGENCY
1700739             LEICA GR10          1.00/4.007          REC # / TYPE / VERS
                    LEIAR25         NONE                    ANT # / TYPE
        0.0000        0.0000        0.0000                  ANTENNA: DELTA H/E/N
     1     1                                                WAVELENGTH FACT L1/2
     4    C1    L1    P2    L2                              # / TYPES OF OBSERV
    10.000                                                  INTERVAL
  2012    09    10    00    00    0.0000000     GPS         TIME OF FIRST OBS
  2012    09    10    00    59   50.0000000     GPS         TIME OF LAST OBS

остается только гадать, какие такие ииновации заключаются в сдвиге высоты на
~ 5.23 метра относительно опубликованных КГА (doc_h и более или менее совпадающих с ETRF),
а также горизонтальные отклонения от ITRF/ETRF.

В ринексах обычно в заголовке навигационные координаты, те что выдал приёмник на момент начала записи. Их нельзя использовать как базовые.

Такой грубой ошибки я сделать не мог, хотя бы потому, что у них в заголовке для GORN стоят на самом деле координаты MDVJ (!)


  2844679.9015  2161056.4418  5266376.1712                  APPROX POSITION XYZ

Теперь при отладке учета параметров антенн натолкнулся еще на один баг: они считываются только
если использовать точные эфемериды.
Забавно, что сегодня еще один человек уже добавил этот баг в трекер
https://github.com/tomojitakasu/RTKLIB/issues/64

5 метровый сдвиг по высоте подозреваю возникает из-за использования кем-то
программы TransLine, так любимой на geodesist.ru: при пересчете пулково → wgs сдвиг высот
у нее почему-то порядка 20-21 метр, вместо 15-16.
Как же все таки достали эти местные системы :rage:
Еще раз убеждаюсь, что для ОСМ надо зафиксировать какую-нибудь эпоху
как “официальную ОСМ” ETRS89 и пользоваться исключительно UTM.

В общую копилку знаний:

  • время регистрации и настройки для быстрой статики с одночастотным приёмником Trimble и геодезической антенной, выдержка из инструкции Trimble Digital Fieldbook

• Survey type = FastStatic
• Logging interval = 15 seconds
• Elevations mask = 13 degrees
• PDOP mask = 6.0

L1 default measurement times:
• Time for 4 satellites = 30 minutes
• Time for 5 satellites = 25 minutes
• Time for 6 satellites = 20 minutes
  • примерно достижимая точность с одночастотным приёмником, для статики и PPK (post-processed kinematic), в зависимости от непрерывности блока L1
Typical accuracies achieved after carrier phase data collection
Time since acquiring lock  Accuracy
10 minutes                 20 cm +5ppm
20 minutes                 10 cm +5ppm
45 minutes                  1 cm +5ppm

Обновил информацию по прошивкам чипсета SirfIII.

Добавлены патчи, разблокирующие фазу у примерно 20 устройств, версий прошивок от 3.0.2 до 3.6.0. Написаны инструкции по перепрошивке SirfIII на Windows, WinCE и процесс восстановления после неудачи.

Здесь: http://gps.0xdc.ru/wiki/doku.php?id=sirfstar

Из интересного. У нас уже давно была прошивка от TomTom MKII (GSW3.0.2TomTom1.1_3.0.00.03-C3P1.02, файл TomTomMkII-302-factory-reset.bin). Судя по всему, в ней фаза не залочена и доступна “из коробки”. К сожалению, проверить негде - устройства нет, а на других устройствах она не работает.

Спасибо chnav за присланные прошивки :slight_smile:

P.S. RtkGps (под android) форкнут и развивается дальше. https://play.google.com/store/apps/details?id=gpsplus.rtkgps Эта ссылка есть на rtklib.com

У Compass(BeiDou) есть какие-нибудь перспективы?
У нас до февраля открыт тестовый доступ к местной сети референцных станций, и в rinex я его наблюдаю, с достаточно хорошими уровнями сигнала.

Сеть

Спасибо, грандиозная работа.

(added)
В субботу ездил в Шереметьево, записал 45 минут данных на парковке. До IGS Менделеево 14 км. Приемник iPaq rx5940, китайская патч-антенна на тонком 3м кабеле.

Logged Points
	Name                               Components     95%  Error          Status    
       SVO2                 Long  37° 24' 43.90961"E        0.015           Adjusted
                             Lat  55° 57' 32.36754"N        0.020           Adjusted
                   Ellips height             191.873        0.026           Adjusted


Processed vectors
                             Vector       95%         Vector        95%
  Vector Identifier          Length      Error      Components     Error SV PDOP  QA  Solution   
  MDVJ - SVO2             14165.685      0.069   X   -2919.898     0.028  7  2.5  No     Fixed
  15/01/10 08:51:53.00                           Y   13287.742     0.028
          +00:45:00.00                           Z   -3946.737     0.028

Пришлось повозиться с обработкой, подозреваю вредит multipath (было видно на графиках невязок). Я то думал крыша автомобиля сама по себе работает как groundplane…

В следующий раз постараюсь доехать до Зеленограда и записать максимум возможных устройств, особенно SiRF Star IV.

Если есть ublox-m8, то да. На 60N 30E хорошо видны 2-3 MEO спутника.
Я даже QZSS спутник почти час отлично принимал.

А результаты ‘teqc +qcq’ можно опубликовать ?