В настоящее время я пытаюсь написать скрипт python (2.7), основанный на библиотеке GPSd, для предоставления данных о скорости GPS с частотой обновления 10 Гц с использованием Raspberry Pi Hat adafruit Ultimate GPS (https://www.adafruit.com/product/2324) с отметками времени, которые также сообщаются как 0,1 с.
Сам модуль способен поддерживать частоту обновления до 10 Гц, однако при настройке по умолчанию используется 1 Гц, и в настоящее время я не могу успешно увеличить ее. Я пробовал выдавать команды PMTK (https://cdn-shop.adafruit.com/datasheets/PMTK_A11.pdf), чтобы увеличить скорость обновления, однако не может заставить это работать (PMTK220), и включил установку скорости передачи на максимальное значение 115200.
Я искал способ увеличить скорость обновления, но не могу понять, в чем проблема. Код ниже и выводит ответы со скоростью выше 10 Гц, однако значения обновляются только каждые 1 с.
import os
import serial
from gps import *
import datetime
import time
import threading
import subprocess
#### CURRENTLY TRYING TO INCREASE GPS POLLING UPDATE RATE FROM DEFAULT 1Hz to 10Hz
subprocess.call(["stty","-F","/dev/serial0","raw","115200","cs8","clocal","-cstopb"])
subprocess.call(["sudo","systemctl","stop","gpsd.socket"])
subprocess.call(["sudo","systemctl","disable","gpsd.socket"])
subprocess.call(["sudo","gpsd","/dev/ttyS0","-F","/var/run/gpsd.sock"])
subprocess.call(["echo","-e","$PMTK251,115200*27\r\n","/dev/ttyS0"]) # command to set baudrate of serial port
subprocess.call(["echo","-e","$PMTK220,100*2F\r\n","/dev/ttyS0"]) #command to set GPS Update Rate
gpsd = None #seting the global variable
os.system('clear') #clear the terminal (optional)
class GpsPoller(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
global gpsd #bring it in scope
gpsd = gps(mode=WATCH_ENABLE) #starting the stream of info
self.current_value = None
self.running = True #setting the thread running to true
def run(self):
global gpsd
while gpsp.running:
gpsd.next() #this will continue to loop and grab EACH set of gpsd info to clear the buffer
gpsp = GpsPoller() # create the thread
gpsp.start() # start it up
os.system('clear')
x = 0
while x < 20: # infinite loop- use ctrl + c to end
print gpsd.utc # print timestamp
print gpsd.fix.speed # print gps speed
print '-----------------'
time.sleep(0.025) # Set print rate much higher than maximum possible of 10 Hz update rate