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

В вики добавили несколько другие калибровочные данные для глонасса в ublox-m8.
Не исключено, что они хранятся в OTP (самое разумное место для них, но места там
мало и это может объяснить почему используются только “целые” метры).
Так что любители глонасс, good luck разбираться с этой нанотехнологией.
Впрочем, автор rtklib писал, что собирается для вас написать калибровочную программу
для версии 2.4.3.
Я написал мини-логгер для wince с приемниками u-blox. В помещении работает,
надо проверить его на свежем воздухе.

На устройстве с ublox7@9600 все заработало, а вот с ublox5 какие-то странности.
При (родной стандартной) скорости 4800 он работает, но потом не справляется
с объемом данных TRK-TRKD5, а если скорость повысить, то TRK-TRKD5 пропадает…
Вообще работа с baud rates в wince это просто PITA, особенно с GPSMID
от производителя.

Edit
rtklib на эхолоте Lowrance Elite http://www.lowrance.com/en-US/Products/Elite , вот это будет
действительно достойный хак. Но для этого опять же нужна qt версия rtknavi,
с железом и линуксом я наконец разобрался :sunglasses:

А на wince он пишет логи на флешку?
И смотрю про qt тут уже мантры пишешь :slight_smile: Попробую на праздниках воссоздать интерфейс. А вот с подключением к rtklib возможно возникнут трудности.

Да. Легкая модификация “NMEA logging” вот отсюда http://mycartrek600.blogspot.com .
Собирается простой командой
arm-mingw32ce-gcc logit.c -o logit.exe
без всяких .vcproj и прочей жути :wink:
Я добавил только “b” к fopen (иначе получались очень неприятные вещи)


    if ((LOG_stream=fopen(LOG_fname, "ab+")) == NULL)

и инициализацию ublox сырых данных в NMEA_init (также можно будет проделать и с sirf)



    SetupComm(NMEA_handle, 0x1000, 0x1000); /* in , out */

#if 0
  unsigned char w2[]={0xB5,0x62,0x06,0x00,0x14,0x00,0x01,0x00,0x00,0x00,0xD0,0x08,0x00,0x00,0x00,0xE1,0x00,0x00,0x07,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0xDE,0xC9};

  sendUBX(w2,sizeof(w2));

  GetCommState (NMEA_handle, &portState);
   
  // Change the DCB structure settings.
  portState.BaudRate = 57600;              // Current baud
  portState.fBinary = TRUE;               // Binary mode; no EOF check

  SetCommState (NMEA_handle, &portState);
    PurgeComm(NMEA_handle, PURGE_RXCLEAR); /* Baud rate wouldn't change without this ! (?) */
#endif

  // TRK-TRKD5
  unsigned char w3[]={0xb5,0x62,0x06,0x01,0x08,0x00,0x03,0x0a,0x00,0x01,0x00,0x00,0x00,0x00,0x1d,0x06};
  sendUBX(w3,sizeof(w3));

  Sleep(2000); // ms NAV-TIMEGPS
  unsigned char w1[]={0xb5,0x62,0x06,0x01,0x08,0x00,0x01,0x20,0x00,0x01,0x00,0x00,0x00,0x00,0x31,0x90};
  sendUBX(w1,sizeof(w1));

  Sleep(2000); // ms TRK-SFRBX
  unsigned char w2[]={0xb5,0x62,0x06,0x01,0x08,0x00,0x03,0x0f,0x00,0x01,0x00,0x00,0x00,0x00,0x22,0x29};
  sendUBX(w2,sizeof(w2));

  Sleep(2000); // ms TRK-SFRB
  unsigned char w4[]={0xb5,0x62,0x06,0x01,0x08,0x00,0x03,0x02,0x00,0x01,0x00,0x00,0x00,0x00,0x15,0xce};
  sendUBX(w4,sizeof(w4));

sendUBX это просто WriteFile (NMEA_handle,…), подойдет и для sirf.

+5. Смотрю я на цифирки ‘Viewed’ и думаю: хоть бы кто-нибудь помог :sunglasses:

Думаю это будет самая простая часть.
rtkplot было бы вообще сказкой, но там нетривиальные виджеты.
Я тут натолкнулся с ним на интересную вещ:
teqc отказался работать с RINEX OBS больше 2 ГБ :slight_smile:

Важно не нарваться на китайский клон Nikon EG-CP14: у него нет AUDIO_R красного
разъема, т.е. выхода сигнала GPS :wink: А UC-E6 вообще никуда не годится, у него пинов совсем мало,
и пины не те, и не там.

В России продается под названим “NAVIXY A7”.

teqc отказался работать с RINEX OBS больше 2 ГБ
Откуда столько, за месяц что ли?
rtkplot было бы вообще сказкой, но там нетривиальные виджеты.
Насколько я смог представить, показывать бары для сигналов и небесный свод для спутников тоже не понятно с какой стороны зайти.

За неделю, базовая станция на крыше.

Рисовать самому, такое было уже на qt в qlandkarte M, но правда
без цветных баров как у гармина.

Edit
У меня еще где-то завалялся старый добрый sharp zaurus с qpeGPS :sunglasses:
http://qpegps.sourceforge.net/images/qpegps_shots/0.9.2.1/shots_640x480_0.9.2.1.html

gpsstatus.cpp http://sourceforge.net/p/qpegps/code/HEAD/tree/trunk/qpegps/gpsstatus.cpp

Edit2
qpeGPS напомнил мне как все в те годы плевались при мысли об обработке сырых данных:
и говорили ни в коем случае не покупать вот такой приемник:
http://www.pocketgpsworld.com/preteclpreview.php
Royaltek RFG-1000 http://www.mikrocontroller.net/attachment/60971/RFG-1000.pdf
с чипсетом Trimble FirstGPS (?)
http://www.trimble.com/news/release.aspx?id=062200a

Родной протокол/скорость на HTC Artemis все-таки NMEA/57600. Это можно было косвенно
предположить по команде SPL “GPSRouting 57600”, которая перенаправляет GPS на USB
(без wince, только в SPL), но теперь я сумел доказать это напрямую.
Берется пакет с http://sourceforge.net/projects/wing-linux и запускается
при включенном GPS (так как инициализация GPS UART и CPLD GPIO в Linux для Artemis сделана там
абсолютно неправильно).


root@localhost:~# stty -F /dev/ttyS1 clocal raw speed 57600

root@localhost:~# cat /dev/ttyS1
тут NMEA

root@localhost:~# echo -ne '$PSRF100',0,38400,8,1,0*3C\\r\\n > /dev/ttyS1

root@localhost:~# od -x /dev/ttyS1 
0000000     a2a0    5b00    0029    ...

MID148 работает, и переключает (внутри) порт на 38400, поэтому перепрошивка через
SPL “GPSRouting 57600” не получается.
Остается собрать sirfmemdump для arm-linux и сделать для начала дамп прошивки.

Для эхолота Lowrance Mark-4 (Elite тоже должен работать) https://wiki.openstreetmap.org/wiki/Chart_plotters
берется для тестирования файл SDK core-image-sato-sdk-imx28evk.ext3 отсюда
http://downloads.yoctoproject.org/releases/yocto/yocto-1.8/machines/imx28evk
кладется на SD карту, делается


mount -o loop /dev/mmcblk0p1/core-image-sato-sdk-imx28evk.ext3 /mnt

и потом возможен chroot /mnt
В SDK есть gcc и qt4. Правда у эхолота нет тачскрина, поэтому GUI должен
будет работать только с кнопками.
Встроенный GPS приемник STA5058 работает c частотой 5 Hz, и я его даже
убедил командой $PSTMDUMPEPHEMS выдать эфемериды, но в непонятном и
недокументированном формате :slight_smile: Внешний u-blox будет работать лучше и быстрее.
Единственная проблема пока это X11 из этого SDK, он погибает по непонятной причине
со старомодной ошибкой (типа http://www.friendlyarm.net/forum/topic/1541 )


EE) FBDEV(0): FBIOPUT_VSCREENINFO: Invalid argument

Стандартный mxsfb.c вроде как не запрещает самому устанавливать Modelines,
но 480x272 это не VESA мода и возможно я что-то недопонимаю.
Без исходников разобраться непросто, но можно.

Edit
220 Hz это что-то очень много,
а параметр pclk у navico какой-то нестандартный…
fbmode=x:480,y:272,le:2,ri:2,up:2,lo:2,hs:41,vs:10,pclk:110,depth:16,clkp:0


bash-4.3# ./myfbset -x

Mode "480x272"
    # D: 50.000 MHz, H: 74.405 kHz, V: 220.132 Hz
    DotClock 50.001
    HTimings 480 544 608 672
    VTimings 272 304 306 338
    Flags    "-HSync" "-VSync"
EndMode

bash-4.3# ./myfbset -i

mode "480x272-220"
    # D: 50.000 MHz, H: 74.405 kHz, V: 220.132 Hz
    geometry 480 272 480 816 16
    timings 20000 64 64 32 32 64 2
    rgba 5/11,6/5,5/0,0/0
endmode

Frame buffer device information:
    Name        : mxsfb
    Address     : 0x47000000
    Size        : 261120
    Type        : PACKED PIXELS
    Visual      : TRUECOLOR
    XPanStep    : 0
    YPanStep    : 1
    YWrapStep   : 0
    LineLength  : 960
    Accelerator : No 

С HTC Artemis у меня ничего путного не получилось.
После переключения в internal boot mode и в Линуксе - полная тишина.
Перепрошивать через BOOTSEL/D0 на этом телефоне теоретически можно, но технически
слишком сложно.
Перехожу на HTC Athena, там перепрошивка официально поддерживается,
пусть даже и придется поломать голову над проблемой RSA ключей :sunglasses:


root@localhost:~# stty -F /dev/ttyS1 clocal raw speed 57600
38400
root@localhost:~# cat /dev/ttyS1 
$GPGGA,000154.070,,,,,0,00,,,M,0.0,M,,0000*51
^C
root@localhost:~# echo -ne '$PSRF100',0,38400,8,1,0*3C\\r\\n > /dev/ttyS1
root@localhost:~# stty -F /dev/ttyS1 clocal raw speed 38400
57600
root@localhost:~# od -x /dev/ttyS1
0000000     a2a0    5b00    0029
^C
root@localhost:~# echo -ne "\xa0\xa2\x00\x01\x94\x00\x94\xb0\xb3" > /dev/ttyS1 
root@localhost:~# od -x /dev/ttyS1
^C
root@localhost:~# strace -ff ./sirfmemdump.arm -p /dev/ttyS1 -v 6  -i ping
execve("./sirfmemdump.arm", ["./sirfmemdump.arm", "-p", "/dev/ttyS1", "-v", "6", "-i", "ping"], [/* 11 vars */]) = 0
uname({sys="Linux", node="localhost", ...}) = 0
brk(0)                                  = 0xac000
brk(0xacd00)                            = 0xacd00
readlink("/proc/self/exe", "/home/root/sirfmemdump.arm", 4096) = 26
brk(0xcdd00)                            = 0xcdd00
brk(0xce000)                            = 0xce000
open("/dev/ttyS1", O_RDWR|O_NOCTTY)     = 3
ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 -opost -isig -icanon echo ...}) = 0
ioctl(3, SNDCTL_TMR_CONTINUE or TCSETSF, {B38400 -opost -isig -icanon -echo ...}) = 0
ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 -opost -isig -icanon -echo ...}) = 0
ioctl(3, SNDCTL_TMR_CONTINUE or TCSETSF, {B38400 -opost -isig -icanon -echo ...}) = 0
ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 -opost -isig -icanon -echo ...}) = 0
ioctl(3, SNDCTL_TMR_CONTINUE or TCSETSF, {B38400 -opost -isig -icanon -echo ...}) = 0
ioctl(3, TCFLSH, 0x2)                   = 0
write(2, "./sirfmemdump.arm: port set up.."..., 34./sirfmemdump.arm: port set up...
) = 34
open("sirfmemdump.bin", O_RDONLY)       = 4
fstat64(4, {st_mode=S_IFREG|0755, st_size=3057, ...}) = 0
write(2, "./sirfmemdump.arm: passed sanity"..., 43./sirfmemdump.arm: passed sanity checks...
) = 43
read(4, "\0\0\240\343X\20\237\345X \237\345\370\7\260\350\370\7"..., 3057) = 3057
close(4)                                = 0
write(2, "./sirfmemdump.arm: loader read i"..., 37./sirfmemdump.arm: loader read in...
) = 37
write(2, "./sirfmemdump.arm: blocking sign"..., 39./sirfmemdump.arm: blocking signals...
) = 39
rt_sigprocmask(SIG_BLOCK, [HUP INT QUIT KILL STOP TSTP], NULL, 8) = 0
write(2, "./sirfmemdump.arm: Sending loade"..., 37./sirfmemdump.arm: Sending loader...
) = 37
ioctl(3, TCSBRK, 0x1)                   = 0
nanosleep({0, 1000000}, NULL)           = 0
ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 -opost -isig -icanon -echo ...}) = 0
ioctl(3, SNDCTL_TMR_CONTINUE or TCSETSF, {B38400 -opost -isig -icanon -echo ...}) = 0
timer_delete(0x2)                       = 0
write(2, "gpsflash: transferring binary..."..., 34gpsflash: transferring binary...) = 34
write(3, "S\0\0\0\v\361\0\0\240\343X\20\237\345X \237\345\370\7\260"..., 512) = 512
write(2, "-", 1-)                        = 1
write(2, "\10", )                      = 1
write(3, "\32x0*\6\321\244J\243K\32\200\1\"\243K\32\200/\340\32x"..., 512) = 512
write(2, "-", 1-)                        = 1
write(2, "\10", )                      = 1
write(3, "\234FbF\1\233\363\30\1\231\333y\213T\v\0\0013\1\223\20"..., 512) = 512
write(2, "-", 1-)                        = 1
write(2, "\10", )                      = 1
write(3, "\365\321\367\347\10\0p\274\2\274\10G\300F\324/\0\0\360"..., 512) = 512
write(2, "-", 1-)                        = 1
write(2, "\10", )                      = 1
write(3, "\377\377\252\252\0\0\30G\300F\200#p\265%M\333\5+`\20#$"..., 512) = 512
write(2, "-", 1-)                        = 1
write(2, "\10", )                      = 1
write(3, "\32\0\30\0N2\21\210\t\6\t\16\341v\0022\22\210R0\0\210*"..., 507) = 507
write(2, "-", 1-)                        = 1
write(2, "\10", )                      = 1
timer_delete(0x2)                       = 0
write(2, "...done (0.02 sec).\n", 20...done (0.02 sec).
)   = 20
brk(0xcd000)                            = 0xcd000
write(2, "./sirfmemdump.arm: Unblocking si"..., 41./sirfmemdump.arm: Unblocking signals...
) = 41
rt_sigprocmask(SIG_UNBLOCK, [HUP INT QUIT KILL STOP TSTP], NULL, 8) = 0
write(2, "./sirfmemdump.arm: Finished.\n", 29./sirfmemdump.arm: Finished.
) = 29
timer_delete(0x2)                       = 0
read(3,

Политбюро ЦК ОСМФ заблокировало анонимное редактирование в вики,
поэтому пара комментариев по эхолоту тут.
Самописная специфика похоже ограничивается двумя вкомпилированными модулями


navico_sku driver module loaded / navico_hal driver module loaded
i.MX28 sonar driver, (c) 2012 Navico
navicosonar navicosonar: Clock rate = 240000000
navicosonar: rxfifosize=16384, dmalen=256

их в распакованном виде проще задампить прямо через /dev/mem.
На Mark-4 можно прицепить USB флешку (только непонятно куда на плате)


ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
fsl-ehci fsl-ehci: Freescale On-Chip EHCI Host Controller
fsl-ehci fsl-ehci: new USB bus registered, assigned bus number 1
fsl-ehci fsl-ehci: irq 93, io base 0x80080000
fsl-ehci fsl-ehci: USB 2.0 started, EHCI 1.00
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 1 port detected
Initializing USB Mass Storage driver...
usbcore: registered new interface driver usb-storage
USB Mass Storage support registered.

Благодаря SLIP драйверу можно использовать slattach из busybox для IP туннеля
через NMEA кабель:


SLIP: version 0.8.4-NET3.019-NEWTTY (dynamic channels, max=256) (6 bit encapsulation enabled).
CSLIP: code copyright 1989 Regents of the University of California.
SLIP linefill/keepalive option.

У большого брата Elite-7 fbmode=x:800,y:480,le:50,ri:50,up:0,lo:15,hs:100,vs:2,pclk:28,depth:16


mode "800x480-92"
        # D: 50.000 MHz, H: 50.403 kHz, V: 92.314 Hz
        geometry 800 480 800 1440 16  
        timings 20000 64 64 32 32 64 2
        accel false
        rgba 5/11,6/5,5/0,0/0
endmode

и данные по процессору и прерываниям:


root@(none):/etc/rc.d# cat /proc/cpuinfo
Processor       : ARM926EJ-S rev 5 (v5l)
BogoMIPS        : 226.09
Features        : swp half thumb fastmult edsp java
CPU implementer : 0x41 
CPU architecture: 5TEJ 
CPU variant     : 0x0  
CPU part        : 0x926
CPU revision    : 5

Hardware        : Navico MX28 board 
Revision        : 28011
Serial          : 0000000000000000

root@(none):/etc/rc.d# cat /proc/interrupts
           CPU0
  6:          0           -  pswitch
  8:      13100           -  can0   
 38:      14122           -  fb_irq 
 39:          0           -  mxs-pxp
 41:      34361           -  GPMI NFC BCH Interrupt
 47:      38593           -  DebugUART
 48:     392470           -  i.MX/mxs Timer Tick
 70:          0           -  auart dma rx
 71:          0           -  auart dma tx
 72:          0           -  auart dma rx
 73:          0           -  auart dma tx
 78:          0           -  auart dma rx
 79:          0           -  auart dma tx
 82:      15431           -  mxs-mmc dma
 84:     113525           -  navicosonar
 88:     165697           -  GPMI NFC DMA Interrupt
 96:      14235           -  mxs-mmc error 
 98:          0           -  navicosonar   
112:      34464           -  auart internal
113:      65507           -  auart internal
116:      10373           -  auart internal
177:         94           -  right-key
178:       2809           -  left-key 
197:          0           -  zout-key 
198:        135           -  enter-key
199:          0           -  zin-key  
212:         68           -  power-key
244:          0           -  up-key   
245:         69           -  down-key 
248:          4           -  menu-key 
251:          0           -  pages-key
Err:          0

Несмотря на клятвенные заверения производителя, что на Lowrance Mark-4 HDI стоит
чернобелый экран (“Эксклюзивная модель монохромного экрана Mark-4 Super Twist Display наделена высоким разрешением”),
LCD у меня там все-таки цветной, который кормится чернобелыми картинками (!).
Framebuffer повернут на 90° против часовой стрелки
(строки в fbcon таким образом идут “снизу вверх”) и за счет увеличенного виртуального
разрешения виден только “правый нижний”, т.е. эффективно визуально “правый верхний”
квадрант.

Извиняюсь, что вопрос немного не в тему, но не знаю где ещё спросить.
Пошерстил инет, но так и не нашел ответа на очень простой вопрос:
А работают ли уже дифф.поправки для ГЛОНАСС, в частности на Урале?
А то вроде как и СДКМ есть, и пара спутников Луч-5А и Луч-5Б запущены, которые должны вещать поправки… А инфы что всё работает нет.

Заказал тут 11.11.2015 для экспериментов High Quality Ublox NEO-M8N Flight Controller GPS with Protective Shell for PIX PX4 Pixhawk за ~18$.
Пока руки не дошли подключить его к компу.
Для начала интерес только в автономному использованию.
А вообще хочу его к эхолоту Humminbird 798 подцепить. Внутренний GPS что-то по точности не устраивает, носимые GPS+ГЛОНАСС заметно лучше. Плюс из-за того что координаты внутренний GPS выдаёт 5 раз в сек, ошибка по скорости у него в 5 раз больше чем у 1Гц внешнего древнего модуля, а постоянно скучущая скорость и особенно направление, когда стоишь на месте бесит. Ну а если руки дойдут, то еще б сваять промежуточный контроллер, который бы по SPI компас опрашивал, и добавлял соответствующие NMEA сообщения.

Ну а в далёкой перспективе было бы сдорово иметь например на авто “базовую станцию”, а в лодке модулёк с ней связывающийся в рилтайме. Хотя для рыбалки наверняка достаточно было бы просто поправок SBASS.

usm78-gis, а какие вопросы по Qt, мож я чем помогу?

Замутить интерфейс rtknavi

Не работает ещё система и х.з когда запустят.

http://geodesist.ru/forum/threads/vopros-po-differencialnym-popravkam.26070/page-3#post-551277
Q:

A:

Самое паршивое что для поддержки новых PRN потребуются новые прошивки для приёмников, а это значит практически всё, что сейчас есть на руках, останется не у дел.

Так вроде как уже давненько определены PRN для Луч-ей в ИКД СДКМ.
Или про что речь?

Как вы думаете, каковы шансы что все иностранные компании, как только был опубликован ИКД СДКМ, кинулись добавлять его поддержку в свои прошивки ? Я ставлю на 0%.

Ну а я то по своей наивности думаю, что иностранные компании получают инфу от первоисточника по договорённости, и не скачивают с инета. :slight_smile:
Поэтому наивно полагаю, что шансы есть.
Хотя как разработчик понимаю, что пока нет сигнала с Луч-ей, то отладить буржуям софт свой крайне сложно.
Впрочем ранее я полагал, что СДКМ - полностью совместим со всякими там WAAS-ами, поэтому типа и отлаживать не надо. Но бегло почитав ИКД СДКМ сильно в этом усомнился. :slight_smile:

Alexander74
В своё время спутники SBAS/EGNOS добавлялись в прошивки по мере ввода в эксплуатацию. Нет ни одной внятной причины для них действовать иначе с нашими спутниками ЛУЧ. Так что от вашей веры или надежды поддержка лучей в сегодняшних чипах не появится )) Она есть в каких-то российских приёмниках, где-то в теме я выкладывал отчет.

(added)
Alexander74 на всех форумах есть общая проблема, у нас не принято представляться. Народ бодается годами, постепенно выясняя весомость слова того или иного участника. Если вы напишите профессиональным разработчиком чего вы являетесь, всем будет легче разговаривать.

Вы посмотрите на их положение на экваторе. Кроме как на индуистов на Урале надеяться
не на кого.

А что у него в нутрях ?