Частота обновления GPS Python Raspberry PI

В настоящее время я пытаюсь написать скрипт 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

Вывод сценария GPS


person Keiron Morris    schedule 21.02.2018    source источник


Ответы (1)


Возможно, это немного поздно для этого, но модуль по умолчанию настроен на скорость 9600, iirc. Попробуйте сначала установить скорость 9600 на Pi, а затем отправьте строку $ PMTK251,115200. Теперь измените скорость на Pi на 115200 и отправьте часть 10 Гц ($ PMTK 220 100 * 2F \ r \ n)

person FoxGT58    schedule 20.07.2020