Ho appena preso un gps dalla stessa famiglia del tuo. (MTK) Usano le stringhe di controllo $PMTK
. Qualsiasi ricerca di PMTK protocol
dà risorse infinite. Il limite è il gps stesso.
Per una conversione una tantum, il metodo standard proviene da un terminale root eseguito echo -e "\$PMTK220,200*2C\r\n" > /dev/ttyAMA0
o da qualsiasi dispositivo collegato, per una risposta a 5Hz. La bandiera
È possibile scivolare dietro e manipolare la velocità con le stringhe di controllo dalla shell. I gps genereranno i dati, ma il gpsd non riconoscerà la velocità.
Appare, gpsd preferisce il tempo di 1 secondo. Anche se il GPS è capace di cicli più veloci, anche se hai già usato un altro metodo per reimpostare la velocità, e così facendo, è necessario dire al gpsd che la velocità è cambiata.
Questo è il punto in cui gpsctl -c 0.2
(nessun sudo) entra in gioco. È fornito in bundle nel pacchetto gpsd.
Se c'è un solo dispositivo collegato al gpsd, nell'esempio, gpsctl cambierà quel dispositivo in cicli di temporizzazione di 0,2 secondi e lo trasmetterà al gpsd. Il tempo è in secondi. Sì, può essere impostato piuttosto lento/veloce, ma non c'è capacità di fingere. Se non può farlo, non lo farà, né dirà che non ha/non può, a meno che non ci sia un errore fatale.
La velocità della porta non è un problema, purché ci sia capacità. Qualcuno che ha contato una volta ha detto 4800 baud è sufficiente per una lettura dei dati nell'un secondo necessario per inviare i dati. Dipende dal carico utile, ma funziona per una regola empirica. 10Hz potrebbe rendere il 38400 baud predefinito su molti sistemi. L'ho provato e non è venuto a mancare nulla.
Devi solo assicurarti che gpsd non abbia negoziato fino a 9600 baud prima di poter aumentare la velocità, per ogni evenienza. gpsctl -s XXXX
(per impostare la velocità di trasmissione a cui il GPS emette i pacchetti) restituisce un errore per me.
Anche senza la bandiera -b
nell'impostazione predefinita DSGP, questo nuove gps miei non rimane agganciato negli aggiornamenti più alta frequenza tra impoverisce. Devo ri-emettere il comando. Potrebbe essere una batteria difettosa, un errore dell'operatore o non capisco che questo difetto è una caratteristica che non consente di bloccare il GPS fuori dalla portata di altri sistemi. (Un motivo per il -b
)
Ecco come si modifica la risposta da un gps che utilizza il gpsd o come ho fatto.
Nel rispondere alla tua domanda, però, per cambiare la velocità di una risposta gps attraverso DSGP con Python
import subprocess
subprocess.call(['gpsctl', '-c', '0.2']) # Digits are the time in seconds.
provare e vedere. Utilizzando gpsctl -c 0.25
rendimenti trimestre letture secondo GPS, ecc ..
Per aiutare sono two Python gpsdclient demonstration scripts a cui ho appena aggiunto un gpsd rapporto dispositivo di aggiornamento battitura, (Hit d
per rinfrescare e vedere i numeri dalla nuova impostazione.)
sono per un Python 2.7-3.5 gpsd python client, quando la funzione trova una casa negli script demo che sarà simile a questa:
def hertz(hz):
"""Change or enumerate a Faster/Slower gps refresh rate if device is able"""
from subprocess import call
inverse = str(1/hz)
call((['gpsctl', '-c', inverse]))
Forse il modulo [pySerial] (https://pythonhosted.org/pyserial/) potrebbe essere d'aiuto? – mzhaase
Dovrei provarlo. Supponevo che il GPSD prendesse il controllo sulla porta seriale. – kjgregory