Python GPS模块:读取最新的GPS数据 [英] Python GPS Module: Reading latest GPS Data

查看:1946
本文介绍了Python GPS模块:读取最新的GPS数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直试图在python 2.6中使用标准的 GPS(gps.py)模块。这应该是作为客户端,并从Ubuntu中运行的gpsd读取GPS数据。

根据客户端设计的GPSD网页文档( GPSD客户端指南),我应该可以使用下面的代码(从示例中稍作修改)获取最新的GPS读数(lat long是我主要感兴趣的内容)

  from gps import * 
session = gps()#假设gpsd在端口2947上使用默认选项运行
session.stream (WATCH_ENABLE | WATCH_NEWSTYLE)
report = session.next()
打印报告

如果我重复使用next(),它会给出队列底部的缓冲值(从会话开始时开始),而不是最新的Gps读数。有没有办法使用这个库获得更新的值?在某种程度上,寻找流的最新值?



有没有人有一个代码示例使用这个库来轮询GPS和获得我正在寻找的价值?



以下是我正在尝试做的事:


  1. 开始会话

  2. 等待用户调用我的代码中的gps_poll()方法
  3. 在此方法内部,读取最新的TPV返回等待用户调用gps_poll()


解决方案

你需要做的是定期轮询'session.next()' - 这里的问题是你正在处理一个串行接口 - 你按照它们的顺序得到结果已收到。它取决于您维护具有最新检索值的'current_value'。

如果您不轮询会话对象,最终您的UART FIFO将填满并无论如何你都不会得到任何新的价值。考虑为此使用一个线程,不要等待用户调用gps_poll(),你应该进行轮询,并且当用户想要一个新值时,他们使用'''' get_current_value()'返回current_value。



关闭我的头顶,它可能就像这样简单:

 导入线程
导入时间
从gps导入*

class GpsPoller(threading.Thread):

def __init __(self):
threading.Thread .__ init __(self)
self.session = gps(mode = WATCH_ENABLE)
self.current_value = None

def get_current_value(self):
return self.current_value

def run(self):
try:
而True:
self.current_value = self.session.next()
time.sleep(0.2)#调整这一点,您可能无法快速获得值
,除了StopIteration:
传递

if __name__ =='__main__ :

gpsp = GpsPoller()
gpsp.start()
#gpsp现在每隔0.2秒轮询新数据,将其存储在self.current_value
while 1:
#在主线程中,每5秒打印当前值
time.sleep(5)
打印gpsp.get_current_value()


I have been trying to work with the standard GPS (gps.py) module in python 2.6. This is supposed to act as a client and read GPS Data from gpsd running in Ubuntu.

According to the documentation from GPSD webpage on client design (GPSD Client Howto), I should be able to use the following code (slightly modified from the example) for getting latest GPS Readings (lat long is what I am mainly interested in)

from gps import *
session = gps() # assuming gpsd running with default options on port 2947
session.stream(WATCH_ENABLE|WATCH_NEWSTYLE)
report = session.next()
print report

If I repeatedly use the next() it gives me buffered values from the bottom of the queue (from when the session was started), and not the LATEST Gps reading. Is there a way to get more recent values using this library? In a Way, seek the Stream to the latest values?

Has anyone got a code example using this library to poll the gps and get the value i am looking for ?

Here is what I am trying to do:

  1. start the session
  2. Wait for user to call the gps_poll() method in my code
  3. Inside this method read the latest TPV (Time Position Velocity) report and return lat long
  4. Go back to waiting for user to call gps_poll()

解决方案

What you need to do is regularly poll 'session.next()' - the issue here is that you're dealing with a serial interface - you get results in the order they were received. Its up to you to maintain a 'current_value' that has the latest retrieved value.

If you don't poll the session object, eventually your UART FIFO will fill up and you won't get any new values anyway.

Consider using a thread for this, don't wait for the user to call gps_poll(), you should be polling and when the user wants a new value they use 'get_current_value()' which returns current_value.

Off the top of my head it could be something as simple as this:

import threading
import time
from gps import *

class GpsPoller(threading.Thread):

   def __init__(self):
       threading.Thread.__init__(self)
       self.session = gps(mode=WATCH_ENABLE)
       self.current_value = None

   def get_current_value(self):
       return self.current_value

   def run(self):
       try:
            while True:
                self.current_value = self.session.next()
                time.sleep(0.2) # tune this, you might not get values that quickly
       except StopIteration:
            pass

if __name__ == '__main__':

   gpsp = GpsPoller()
   gpsp.start()
   # gpsp now polls every .2 seconds for new data, storing it in self.current_value
   while 1:
       # In the main thread, every 5 seconds print the current value
       time.sleep(5)
       print gpsp.get_current_value() 

这篇关于Python GPS模块:读取最新的GPS数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆