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

Тут https://www.advancednavigation.com.au/sites/advancednavigation.com.au/files/Spatial%20Dual%20Reference%20Manual.pdf кое-как описан

У Вас в 2.4.3b8 работает режим PPP? В 2.4.2 решается, а тут никак :frowning:

Попробовал с ‘-p 6’ и Galileo-only , тоже не работает.

Лидер испытаний u-blox8, но в советских модулях используется измерение фазы. Я плакал :sunglasses:


Преимущество отечественных модулей заключается в том, что вроссийских модулях 
ГеоС-3 и NV-08C в отличие от зарубежных, 
используется измерение фазы несущей навигационного сигнала, 
и тем самым возможно построение систем высокоточной навигации.
 
Однако, по критерию цены конкурировать с зарубежными аналогами может только ГеоС-3. 
Стоимость такого приемника для крупных партий составит 7-7,5$ 
(в отличие от NV-08C при цене 35-40 $/шт). 
 
Однако, стоит признать, что цена ГеоС-3 выше зарубежного аналога – 
лидера испытаний uBlox М8, стоимость которого 4-5 $/шт.

http://www.i-mash.ru/news/nov_otrasl/76960-izvestny-rezultaty-ispytanijj-navigacionnykh.html

В чем отличия TRK-MEAS v3 от v5 кроме шифрования?Мне удалось получить v5 ,но
rtklib не понимает v5…

В v5 нет поля mesQi (оно пустое), поэтому надо убирать проверки связанные с
U1(p+1):


        if (U1(p+1)<4||ubx_sys(U1(p+4))!=SYS_GPS) continue;
...
        /* quality indicator (0:idle,1:search,2:aquired,3:unusable, */
        /*                    4:code lock,5,6,7:code/carrier lock) */
        qi=U1(p+1);
        if (qi<4||7<qi) continue;


Шифрование пока не проблема, интересно будет, когда в Q2 появятся модули
с ROM 3.01

Добавил к rtklib поддержку файлов геоида в форматах Leica GEM, Javad BIN и Trimble GGF,
но пока не до конца протестировал. Думаю что текстовый формат
Carlson GSF добавлять не стоит,
так это будет работать слишком медленно, либо придется в opengeoid()
положить его в буфер в памяти. Для маленьких файлов это нормально,
для больших и для тех девайсов, где мало RAM не очень.

Каких только “неконвенциональных” академиев не бывает


Для этого использовалась методика точного дифференциального позиционирования (ТДП), 
имеющая также англоязычное название «Precise Point Positioning» (PPP). 
Обработка велась в модуле GrafNav версии 8.3 программного комплекса
Waypoint GPS компании NovAtel (Канада).

UNCONVENTIONAL APPROACH TO THE ISSUE OF THE COORDINATES OF
GEODETIC POINTS UPDATING IN THE GLOBAL GEOCENTRIC REFERENCE
SYSTEM
Andrey V. Voitenko
Siberian Automobile and Highway Academy, 644080, Russia, Omsk, 5 Prospekt Mira, Ph. D. in
Engineering (Russian Scientific Degree "Candidate of Technical Sciences"), 
Head of the Department of Geodesy

Я написал патч к ublox.c который получает полностью все сырые данные только из
нешифрованного/дешифрованного пакета SEC-0 (0x2700, contains TRK-MEAS(v5) и TRK-SFRBX),
никаких других сообщений не надо.

Что-то я по-облизывался на всякие галилео и бедоу и тоже заказал ublox-8, благо рубль чуток подорожал :slight_smile:
Вот только из последних сообщения не понял я, победили вы защиту или нет. И другая проблема - обновить мобильное приложение gpslib+

Для M8N (и совместимых вроде Navilock) она легко отключается,
а устройств с ROM 3.01+ пока нет, как появятся, будем думать :sunglasses:

В конце концов протестировал работу с Leica GEM, Javad BIN и Carlson GSF,
на моих тестовых файлах проблем нет.

А где используется геоидная высота?

Если не лезть в детали, то на всех топографических картах и в OSM tag .

.conf файл нарушает общепринятую терминологию
(без геоида=geodetic, с геоидом=orthometric, с квазигеоидом=normal)
и запутывает дело:


out-height         =geodetic   # (0:ellipsoidal,1:geodetic)
out-geoid          =internal   # (0:internal,1:egm96,2:egm08_2.5,3:egm08_1,4:gsi2000)
file-geoidfile     =

Правильнее было бы написать


out-height         =1   # 0:ellipsoidal(geodetic), 1:orthometric or normal (using geoid or quasigeoid file)
...

Я также сильно сомневаюсь в целесообразости наличия ‘internal’ для mode != SINGLE.

2usm78-gis А где-то собраны всё патчи чтобы получить всех благ с ublox8? А то читаю и вижу, получилось то, удалось это, а как конкретно нету.

  1. Т.е. как начать получать сырые данные с бедоу, галлилео, и т.д.
  2. Упоминались ещё патчи для конвертера в ринекс, чтобы эти сырые данные понимать.

бейдоу работает на прошивке 2.01 без вопросов, вроде как даже и лучше
чем на 3.01 (больше экспериментальных спутников видно), но к интерпретации измеренных данных
есть вопросы. Вы восточнее, будете видеть больше чем я, так что пришите сюда
о результатах.
Для галилео необходимо перешивать на 3.01.
M8T при этом выдает сразу RXM-RAWX, а вот с M8N все несколько сложнее:
RXM-RAWX не работает, а TRK-MEAS(v5) зашифрован и упакован в пакет SEC-0.
В идеальном варианте надо разобраться с алгоритмом шифрования и
написать патч для rtklib. Дело это такое сомнительное, и видимо
кто-нибудь напишет со временем что-то вроде libdvdcss.so с *decipher_sec0(raw_t raw),
я подставляться не буду.
Хороший рабочий вариант на сегодня - заменить в прошивке 3 байта (+контрольную сумму),
что позволяет иметь нешифрованный SEC-0 на выходе.

Я несколько перестарался и отредактировал decode_trkmeas() до нерабочего состояния,
проверяя работу с произвольной CFG-RATE, но могу попытаться сделать минимальный патч.
Вообще мне не нравится модель развития rtklib, когда автор совершенно некооперативен
и просто игнорирует все патчи “со стороны”, сам при этом не имея никакого серьезного
плана развития.
При этом он сменил лицензию с GPLv3 на BSD, и у меня честно говоря нет никакого желания
исправляя ошибки и добавляя профессиональный функционал
помогать торгашам потирающим ладони по дороге в банк (таково же как и мое отношение
к public domain в OSM).
Для того чтобы создать серьезный форк, надо иметь killer app. Таковым я считаю
rtknavi+rtkplot на qt, как напишу, так будет и не стыдно создать репозиторий на github.

Edit
Патч выглядит примерно так:


+/* demux sec-0 -------------------------------*/
+static int demux_sec_0(raw_t *raw)
+{
+ trace(2,"demux_sec_0: ver=%d pkt=%2.2x dttag=%d\n",U1(raw->buff+6),U1(raw->buff+6+7),raw->dttag);
+
+ if (U1(raw->buff+6) != 2 )
+  return 0; /* unknown version */
+
+ if (U1(raw->buff+6+4) != UBXSYNC1 || U1(raw->buff+6+5) != UBXSYNC2)
+ {
+  return 0; /* encrypted packet */
+ }
+
+ if (U1(raw->buff+6+7) == 0x10)
+  return decode_trkmeas2(raw,10);
+ if (U1(raw->buff+6+7) == 0x0f)
+  return decode_trksfrbx2(raw,10);
+
+ return 0; /* ??? */
+}
 /* decode ublox raw message --------------------------------------------------*/
 static int decode_ubx(raw_t *raw)
 {
@@ -907,10 +1335,13 @@
         case ID_RXMRAW  : return decode_rxmraw  (raw);
         case ID_RXMRAWX : return decode_rxmrawx (raw);
         case ID_RXMSFRB : return decode_rxmsfrb (raw);
+        case ID_TRKSFRB : return decode_trksfrb (raw);
         case ID_RXMSFRBX: return decode_rxmsfrbx(raw);
         case ID_NAVSOL  : return decode_navsol  (raw);
         case ID_NAVTIME : return decode_navtime (raw);
-        case ID_TRKMEAS : return decode_trkmeas (raw);
+        case ID_TRKMEAS : return decode_trkmeas2(raw,0);
+        case ID_SEC_0   : return demux_sec_0    (raw);
+        case ID_CFG_RATE: return decode_cfg_rate(raw);
         case ID_TRKD5   : return decode_trkd5   (raw);
         case ID_TRKSFRBX: return decode_trksfrbx(raw);
     }

За два вечера экспериментов с окна я видел только QZSS спутник. На выходных попробую выйти на улицу. Правда я у себя что-то сломал, сменит сообщение из которого извлекаю время для создания файла, в итоге лог не пишется.
Так же расстроило, что андроидовский RTKGPS+, не понимает TRKM* сообщения. Так что скорее всего придётся ublox8 использовать как локальную базу, а с ublox6 бегать вокруг. Большие надежды, что с таким подходом, когда локальная база стоит в статике дольше, а между ней и ровером считанные метры, кинематика получится лучше.
Хотя немного печалит, что Глонасс использовать не выйдет, т.к. нужна коррекция, да ещё и с версии 2.01 где её значения не известны.
Обновляться на 3.01 как-то стрёмно, т.к. я не смог найти дамп текущей прошивки, чтобы в случае чего откатиться.
Про 3 байта, я так понял в вики писать не будешь, типа ida в руки и вперёд. Про контрольную сумму вообще не ясно где копать.
Киллер, не киллер, но да меня уже задолбало в трёх местах вводить даты время, чтобы обработать данные или что-нибудь скачать. Поэтому у меня тоже есть желание как это упростить. За прототип я взял gnss solution и неделю возился в opengl. Потом оказалось, что у Runge есть компонент, которым он отображает отрендеренные карты в своей студии. И в принципе там из коробки уже можно рисовать точки и вектора + любые проекции. Вот спутниковую подложку и графики придётся покумекать как подсунуть. Но это уже что-то, потому что с opengl с нуля у меня опустились руки. Плюс он заверил, что предыдущие версии под моно работали.

Сходил на улицу, о ощущения на глаз 8-я версия лучше держит фазу, по крайней мере красных полосочек заметно реже. А вот по силе сигнала как-то хуже.
Но при конвертации, полно ошибок вида


2 ubx trksfrbx sat number error: sys=4 prn=255
2 ubx trkmeas sat number error: sys= 4 prn=255

Судя по докам 4 это IMES, зачем нужен не понятно. Отключать видимо надо через CFG_GNSS.
Китайских тарелок так и не поймал. Очень близко к горизонту (меньше 15г) виделся QSZZ, но в nav файле для QZS? один нули, видимо не чего не извлеклось.
Притом не понятно, если они включены по умолчанию, зачем в вики приведена длинная строка для недокументированной CFG-BDS?

Есть 3 версии поправок в прошивке (2 для 2.01 и 1 для 3.01, все в вики), но толку от них мало,
глонасс дело сложное.

Текущей это какой, M8T 2.30 ? В любом случае дамп “своей” прошивки нельзя сделать только
для 3.01 (там убрана эта функция, добавлены какие-то новые, но я детально не смотрел).

Я уже забыл детали, но надо заменить один 4 байтовый bl на 2 thumb2 nop, что-то типа

а про внутренности этого bl, да, ida в руки (ну или objdump) и смотри сам, какой там xor, ror и P-box.

Этой теме уже почти 6 лет, уже ведь писал и про Fletcher-64 и даже исходники на C есть в теме :wink:
В вики добавить не могу, меня там заблокировали.

qt gui идея тоже не только моя:
http://diydrones.com/forum/topics/project-of-touchscreen-gui-for-rtklib

4 это глонасс


#define SYS_GLO     0x04                /* navigation system: GLONASS */

и так как у него только 1 код, то часто нельзя сразу определить номеp спутника,
то есть это нормальная ситуация.

Для номеров > 32, это два последних запущенных спутника,
в 3.01 я их не вижу даже с этой командой.