Коммерческие люди что-то в последнее время засуетились и выложили программу Kinematica.jar https://www.advancednavigation.com.au
но у меня это чудо из “ограниченной во времени явы” не работает:
$ java -jar ~/Downloads/Kinematica.jar
Exception in thread "main" java.lang.UnsupportedClassVersionError: com/advancednavigation/kinemeticPostProcessor/Main : Unsupported major.minor version 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)
Честно говоря достали.
Буду тоже сам писать GUI на Qt.
Лидер испытаний u-blox8, но в советских модулях используется измерение фазы. Я плакал
Преимущество отечественных модулей заключается в том, что вроссийских модулях
ГеоС-3 и NV-08C в отличие от зарубежных,
используется измерение фазы несущей навигационного сигнала,
и тем самым возможно построение систем высокоточной навигации.
Однако, по критерию цены конкурировать с зарубежными аналогами может только ГеоС-3.
Стоимость такого приемника для крупных партий составит 7-7,5$
(в отличие от NV-08C при цене 35-40 $/шт).
Однако, стоит признать, что цена ГеоС-3 выше зарубежного аналога –
лидера испытаний uBlox М8, стоимость которого 4-5 $/шт.
Добавил к 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, благо рубль чуток подорожал
Вот только из последних сообщения не понял я, победили вы защиту или нет. И другая проблема - обновить мобильное приложение gpslib+
бейдоу работает на прошивке 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);
}