mercoledì 20 aprile 2016

Selezionare testo in nano

Alcune volte puo' essere comodo fare cut and paste nell'editor Nano. Il problema e' che la combinazione di tasti per attivare la modalita' di selezione e' quanto meno curiosa ed e' CTRL+SHIF+6 (e lo dice uno che in Turbo Pascal era abituato a CTRL+K B e CTRL+K K per  aprire e chiudere i blocchi di selezione)



La selezione del testo si fa attraverso le frecce dopo aver iniziato la modalita' Selezione

Un altro aspetto curioso e' che si puo' fare strettamente Cut and Paste (con CTRL+K e CTRL+U) e non Copy and Paste

Per questo motivo se si vuole copiare una parte di codice in un altro posto si deve tagliare la parte selezionata, incollarla in posto e poi copiare di nuovo nella posizione desiderata

ps: esistono altri editor disponibili, peraltro alcuni con scorciatoie di tastiera simili a quelle di Borland che a sua volta rimandava a Wordstar (se non erro), come per esempio Joe ma non sono installati di default in Debian e si deve quindi convivere con Nano (come prima avevo convissuto con Vi)


martedì 19 aprile 2016

DGPS con Ublox M8T e RTKLib a 5Hz e 10Hz

In caso di utilizzo di GPS Differenziale in modalita' dinamica puo' essere utile avere una frequenza di campionamento piu' veloce dello standard di una acquisizione al secondo, in particolar modo se il rover si muove rapidamente.
L'Ublox M8T permette questa funzionalita' almeno fino al valore di campionamento di 10Hz (piu' veloce non ho provato ma il file di configurazione permette di inserire il tempo di campionamento in millisecondi, il che fa pensare che si posssano inserire valori inferiori ai 100 millisecondi



L'unica accortezza, per permettere il campionamento piu' veloce, e' quello di modificare la velocita' della porta seriale (anche se si acquisisce via USB) modificando il valore standard di 9600 bps portandolo a 115200 bps. Si deve tenere anche conto che il file di configurazione di RTKLib, nonostante si chiami ubx_m8t_glo_raw_5hz.cmd non modifica la velocita' della porta per cui, cosi' come e', e' sostanzialmente inutile


-----------------------------------
# RTKNAVI options (2016/02/08 17:25:54, v.2.4.3 b8)

pos1-posmode       =single     # (0:single,1:dgps,2:kinematic,3:static,4:movingbase,5:fixed,6:ppp-kine,7:ppp-static,8:ppp-fixed)
pos1-frequency     =l1         # (1:l1,2:l1+l2,3:l1+l2+l5,4:l1+l5)
pos1-soltype       =forward    # (0:forward,1:backward,2:combined)
pos1-elmask        =15         # (deg)
pos1-snrmask_r     =off        # (0:off,1:on)
pos1-snrmask_b     =off        # (0:off,1:on)
pos1-snrmask_L1    =0,0,0,0,0,0,0,0,0
pos1-snrmask_L2    =0,0,0,0,0,0,0,0,0
pos1-snrmask_L5    =0,0,0,0,0,0,0,0,0
pos1-dynamics      =off        # (0:off,1:on)
pos1-tidecorr      =off        # (0:off,1:on,2:otl)
pos1-ionoopt       =brdc       # (0:off,1:brdc,2:sbas,3:dual-freq,4:est-stec,5:ionex-tec,6:qzs-brdc,7:qzs-lex,8:stec)
pos1-tropopt       =saas       # (0:off,1:saas,2:sbas,3:est-ztd,4:est-ztdgrad,5:ztd)
pos1-sateph        =brdc       # (0:brdc,1:precise,2:brdc+sbas,3:brdc+ssrapc,4:brdc+ssrcom)
pos1-posopt1       =off        # (0:off,1:on)
pos1-posopt2       =off        # (0:off,1:on)
pos1-posopt3       =off        # (0:off,1:on,2:precise)
pos1-posopt4       =off        # (0:off,1:on)
pos1-posopt5       =off        # (0:off,1:on)
pos1-posopt6       =off        # (0:off,1:on)
pos1-exclsats      =           # (prn ...)
pos1-navsys        =1          # (1:gps+2:sbas+4:glo+8:gal+16:qzs+32:comp)
pos2-armode        =continuous # (0:off,1:continuous,2:instantaneous,3:fix-and-hold)
pos2-gloarmode     =off        # (0:off,1:on,2:autocal)
pos2-bdsarmode     =off        # (0:off,1:on)
pos2-arthres       =3
pos2-arthres1      =0.9999
pos2-arthres2      =0.25
pos2-arthres3      =0.1
pos2-arthres4      =0.05
pos2-arlockcnt     =0
pos2-arelmask      =0          # (deg)
pos2-arminfix      =10
pos2-armaxiter     =1
pos2-elmaskhold    =0          # (deg)
pos2-aroutcnt      =5
pos2-maxage        =30         # (s)
pos2-syncsol       =off        # (0:off,1:on)
pos2-slipthres     =0.05       # (m)
pos2-rejionno      =30         # (m)
pos2-rejgdop       =30
pos2-niter         =1
pos2-baselen       =0          # (m)
pos2-basesig       =0          # (m)
out-solformat      =llh        # (0:llh,1:xyz,2:enu,3:nmea)
out-outhead        =off        # (0:off,1:on)
out-outopt         =off        # (0:off,1:on)
out-timesys        =gpst       # (0:gpst,1:utc,2:jst)
out-timeform       =hms        # (0:tow,1:hms)
out-timendec       =3
out-degform        =deg        # (0:deg,1:dms)
out-fieldsep       =
out-height         =ellipsoidal # (0:ellipsoidal,1:geodetic)
out-geoid          =internal   # (0:internal,1:egm96,2:egm08_2.5,3:egm08_1,4:gsi2000)
out-solstatic      =all        # (0:all,1:single)
out-nmeaintv1      =0          # (s)
out-nmeaintv2      =0          # (s)
out-outstat        =off        # (0:off,1:state,2:residual)
stats-eratio1      =100
stats-eratio2      =100
stats-errphase     =0.003      # (m)
stats-errphaseel   =0.003      # (m)
stats-errphasebl   =0          # (m/10km)
stats-errdoppler   =1          # (Hz)
stats-stdbias      =30         # (m)
stats-stdiono      =0.03       # (m)
stats-stdtrop      =0.3        # (m)
stats-prnaccelh    =10         # (m/s^2)
stats-prnaccelv    =10         # (m/s^2)
stats-prnbias      =0.0001     # (m)
stats-prniono      =0.001      # (m)
stats-prntrop      =0.0001     # (m)
stats-prnpos       =0          # (m)
stats-clkstab      =5e-12      # (s/s)
ant1-postype       =llh        # (0:llh,1:xyz,2:single,3:posfile,4:rinexhead,5:rtcm)
ant1-pos1          =90         # (deg|m)
ant1-pos2          =0          # (deg|m)
ant1-pos3          =-6335367.6285 # (m|m)
ant1-anttype       =
ant1-antdele       =0          # (m)
ant1-antdeln       =0          # (m)
ant1-antdelu       =0          # (m)
ant2-postype       =llh        # (0:llh,1:xyz,2:single,3:posfile,4:rinexhead,5:rtcm)
ant2-pos1          =90         # (deg|m)
ant2-pos2          =0          # (deg|m)
ant2-pos3          =-6335367.6285 # (m|m)
ant2-anttype       =
ant2-antdele       =0          # (m)
ant2-antdeln       =0          # (m)
ant2-antdelu       =0          # (m)
misc-timeinterp    =off        # (0:off,1:on)
misc-sbasatsel     =0          # (0:all)
misc-rnxopt1       =
misc-rnxopt2       =
misc-pppopt        =
file-satantfile    =
file-rcvantfile    =
file-staposfile    =
file-geoidfile     =
file-ionofile      =
file-dcbfile       =
file-eopfile       =
file-blqfile       =
file-tempdir       =/tmp
file-geexefile     =
file-solstatfile   =
file-tracefile     =
file-cmdfile1      =ubx_m8t_glo_raw_10hz.cmd




inpstr1-type       =serial     # (0:off,1:serial,2:file,3:tcpsvr,4:tcpcli,7:ntripcli,8:ftp,9:http)
inpstr2-type       =off        # (0:off,1:serial,2:file,3:tcpsvr,4:tcpcli,7:ntripcli,8:ftp,9:http)
inpstr3-type       =off        # (0:off,1:serial,2:file,3:tcpsvr,4:tcpcli,7:ntripcli,8:ftp,9:http)
inpstr1-path       =ttyACM0:115200:8:n:1:off
inpstr2-path       =
inpstr3-path       =
inpstr1-format     =ubx        # (0:rtcm2,1:rtcm3,2:oem4,3:oem3,4:ubx,5:ss2,6:hemis,7:skytraq,8:gw10,9:javad,10:nvs,11:binex,12:rt17,15:sp3)
inpstr2-format     =rtcm2      # (0:rtcm2,1:rtcm3,2:oem4,3:oem3,4:ubx,5:ss2,6:hemis,7:skytraq,8:gw10,9:javad,10:nvs,11:binex,12:rt17,15:sp3)
inpstr3-format     =rtcm2      # (0:rtcm2,1:rtcm3,2:oem4,3:oem3,4:ubx,5:ss2,6:hemis,7:skytraq,8:gw10,9:javad,10:nvs,11:binex,12:rt17,15:sp3)
inpstr2-nmeareq    =off        # (0:off,1:latlon,2:single)
inpstr2-nmealat    =0          # (deg)
inpstr2-nmealon    =0          # (deg)
outstr1-type       =file       # (0:off,1:serial,2:file,3:tcpsvr,4:tcpcli,6:ntripsvr)
outstr2-type       =off        # (0:off,1:serial,2:file,3:tcpsvr,4:tcpcli,6:ntripsvr)
outstr1-path       =./ufast2.txt
outstr2-path       =
outstr1-format     =llh        # (0:llh,1:xyz,2:enu,3:nmea)
outstr2-format     =llh        # (0:llh,1:xyz,2:enu,3:nmea)
logstr1-type       =file       # (0:off,1:serial,2:file,3:tcpsvr,4:tcpcli,6:ntripsvr)
logstr2-type       =off        # (0:off,1:serial,2:file,3:tcpsvr,4:tcpcli,6:ntripsvr)
logstr3-type       =off        # (0:off,1:serial,2:file,3:tcpsvr,4:tcpcli,6:ntripsvr)
logstr1-path       =./ufast2.ubx
logstr2-path       =
logstr3-path       =
misc-svrcycle      =10         # (ms)
misc-timeout       =10000      # (ms)
misc-reconnect     =10000      # (ms)
misc-nmeacycle     =5000       # (ms)
misc-buffsize      =32768      # (bytes)
misc-navmsgsel     =all        # (0:all,1:rover,2:base,3:corr)
misc-proxyaddr     =
misc-fswapmargin   =30         # (s)

-----------------------------------

File di configurazione per acquisizione raw a 10Hz. Nella prima riga evidenziata in giallo si imposta la velocita' della seriale, nella seconda il passo di campionamento (100 ms)
-----------------------------------
!UBX CFG-GNSS 0 32 32 1 3 16 16 0 0

!UBX CFG-GNSS 0 32 32 1 6 16 16 0 1

!UBX CFG-MSG 2 21 0 0 0 1 0 0

!UBX CFG-MSG 2 19 0 0 0 1 0 0

!UBX CFG-PRT 1 0 0 2256 115200 7 7 0

!UBX CFG-RATE 100 1 1

@
!UBX CFG-MSG 2 21 0 0 0 0 0 0

!UBX CFG-MSG 2 19 0 0 0 0 0 0

!UBX CFG-RATE 100 1 1
-----------------------------------

Rtkrcv, per il post processing, si deve essere sicuri di impostare il corretto valore del passo di campionamento



Questi sono i risultati di due prove di DGPS con rover e stazione entrambi con Ublox M8T. Le condizioni di misure non erano ottimali data la presenza di palazzi ed ambiente urbano ma si ottiene comunque un fix piuttosto stabile 

Prova a 5Hz
Prova a 10Hz




mercoledì 13 aprile 2016

Orange Pi Pc

Mi sono interessato a questo microcomputer basato su armhf H3 con 1Gb di Ram, piu' che altro per il costo di 22 euro compreso il case (una Raspberry costa piu' del doppio)


Si tratta di un dispositivo sostanzialmente molto simile a Raspberry Model B con tre porte USB + 1 MicroUsb OTG, microfono, infrarossi (una Raspberry agli steroidi)

La differenza principale risiede nel modo in cui creare la microSD con il sistema operativo (ho ovviamente scelto l'immagine di Debian 8 con XFCE (link per immagini di numerosi OS)

Dopo aver creato la SD c'e' un ulteriore passo da eseguire. Sul disco esiste una partizione in formato FAT denominata BOOT nella quale devono essere inseriti i file  uImage_OPI-2 e si deve rinominare il file script.bin.OPI-PC_1080p60_hdmi in script.bin

Le impressioni di uso sono generalmente buone anche perche' si tratta di una Debian vera anche se ho riscontrato qualche problema nella compilazione con Eclipse. Sicuramente la scheda scalda come una stufetta anche dopo pochi minuti di accesione e l'accesso al disco (SDCard) e' molto lento (ma in questo caso potrebbe essere anche colpa del tipo di sdcard che ho usato per la prova, una SanDisk Ultra HC I)




venerdì 8 aprile 2016

Unire file Rinex

Accade spesso di dover utilizzare dati di stazioni base GPS che sono distributi in file Rinex con i dati divisi per giorno o per fascia oraria. Ovviamente,come dice Murphy, la misura che noi stiamo effettuando andra' a cavallo tra due file ed e' quindi necessario trovare il sistema per unire due o piu' file Rinex. La soluzione risiede nel programma teqc compreso nel pacchetto RTKLib (anche se e' sviluppato esternamente alla libreria)

Per prima cosa se i file RINEX sono in formato compresso devono essere scompattati con crx2rnx

RTKLIB-rtklib_2.4.3\bin>crx2rnx.exe fipr098i.16d

poi si possono unire i vari Rinex per crearne uno di unione

RTKLIB-rtklib_2.4.3\bin>teqc.exe fipr098i.16o fipr098j.16o fipr098k.16o > unione.16o

si puo' procedere allo stesso modo per i file .nav e .gnav

Ublox M8T : sensibilita' in DGPS con RTKLib

Premessa : come in qualunque caso conoscere la  riposta aiuta nel risolvere una domanda. In un caso reale non conoscendo l'ora e l'entita' dello spostamento diventa difficile estrapolare i reali movimenti nascosti all'interno del rumore della misura


Ho voluto provare a vedere quale fosse il minimo  spostamento che e' possibile registrare usando il modulo Ublox M8T in modalita' differenziale usando RTK-Lib in modalita' cinematica (usando come base sia una Ublox M8T che un Leica 1200)

(allargare le immagini per vedere il dettaglio)
Prova 1:
in questo caso il sensore e' stato spostato di 9 cm. Lo spostamento calcolato e' di circa 6.9 cm (76% dello spostamento reale)



Prova 2:
Lo spostamento reale e' stato di 8 cm. Lo spostamento calcolato e' di circa 6.2 cm (77% dello spostamento reale)

Prova 3: 
Qui lo spostamento reale e' stato di 4 cm. Dopo l'elaborazione dei dati GPS lo spostamento e' calcolabile in 3.1 cm (77% dello spostamento reale)


Lo spostamento calcolato e' sempre sottostimato (circa 76-77%) ma si nota che e' possibile avere misure sostanzialmente affidabili fino ai 4 cm

Red Hat Developer Program

RedHat ha iniziato un nuovo programma per sviluppatori per cui viene licenziata gratuitamente una copia di RHEL 7  (quale miglior occasione di tornare ad usare RedHat che non usavo dalla versione 7.2 agli inizi del 2000)

Ovviamente la licenza non permette di usare RedHat in server di produzione ma permette l'accesso alla documentazione

Ed ovviamente, essendo una distribuzione commerciale, non mi aspettavo nessun problema in fase di installazione...mi sbagliavo.
Ho scaricato la iso ed ho creato come al solito la chiavetta USB di avvio con dd, come fatto decine di volte. Il test dell'immagine era corretto ma in fase di installazione ho ricevuto l'errore
Error populating transaction


Arrivato a 10/10 l'installazione si e' bloccata con
Error populating transaction after 10 retrieves. Failure....No more mirrors to try

Sul blog di supporto indicano che questo errore e' generato da una immagine corrotta. Ho provato a scaricare di nuovo la iso, ho creato la penna USB sia sotto Mac e Linux con dd e Windows con Unetbootin,  ho usato due diverse penne USB, ho collegato il pc via cavo o via WiFi ma sempre il solito errore

A questo punto, un po' sfrustrato, ho preso la solita immagine iso e la ho montata su VirtualBox....ovviamente nessun errore ed installazione perfetta



Sto ancora cercando di capire il motivo












giovedì 7 aprile 2016

Reset to factory default Ublox M8T

L'UBlox, come molti altri dispositivi complessi. e' dotato di una memoria non-volatile. Per questo motivo e' abbastanza semplice, provando e riprovando, mandarlo in uno stato non desiderato
Per riportare i settaggi ai valori di default si usi U-Center nella finestra Messages/UBX->CFG/Revert to default configuration. Non e' necessario, anzi e' sconsigliato, riflashare il firmware


Per vedere il firmware dell'Ublox da UCenter si  va nella finestra Messages/UBX->MON->VER


Un altro interessante settaggio e' in UBX->CFG->RXM che permette di impostare la modalita' Power Save







Ollama e Jetson Nano 4G

Ancora nel tentativo di utilizzare in modo serio la Jetson Nano ho provato ad usarla per Ollama seguendo le istruzioni da https://dev.to/aje...