用gpsd和python改变更新率
我使用python2.7.9,GPSD和python-gps软件包,与我的Raspberry Pi 2一起使用adafruit ultimate GPS breakout。 我在串口上以1Hz的速度成功获得gps更新。
这个设备据说能够实现10Hz的更新,我希望启用它。 根据数据表(见下面的片段),这可以通过串行命令设置。
我的问题是,我找不到足够的文档来说明python-gps模块或GPSD,它会告诉我应该如何使用我的python脚本通过串行发送命令到GPS。 有人能指引我朝着正确的方向吗?
我刚刚从你的家里拿到了一个gps。 (MTK)他们使用$PMTK
控制字符串。 任何搜索PMTK protocol
都会提供无尽的资源。 限制是gps本身。
对于一次性转换,标准方法是从根端执行echo -e "$PMTK220,200*2Crn" > /dev/ttyAMA0
或设备连接的任何位置,以获得5Hz的响应。 该
-e
标志允许解析反斜杠(s) $
NMEA句子的开始 P
专有消息 MTK
NMEA数据类型 220
数据包类型 200
分组数据 *
数据结束 2C
校验和 rn
NMEA句子的结尾 还有脚本和其他项目可用,但都需要gpsd不能控制gps。 gpsd将阻止向gps发送控制字符串。
另外,如果/etc/default/gpsd
有-b
标志, /etc/default/gpsd
在连接时不会写入设备。 它将选择一个通用的NMEA驱动程序,并且不会向gps写入任何控制字符串。
您可以放在后面,并使用shell中的控制字符串处理速率。 GPS将发送数据,但gpsd不会确认速率。
看起来,gpsd更喜欢1秒的时间。 即使gps具有更快的循环周期,即使您已经使用其他方法重新设置速度,并且这样做,也需要告诉gpsd速率已经改变。
这是gpsctl -c 0.2
(没有sudo)进场的地方。 它捆绑在gpsd软件包中。
如果只有一个设备连接到gpsd,在本例中,gpsctl会将该设备更改为0.2秒的时间周期并将其传送给gpsd。 时间以秒为单位。 是的,它可以设置得很慢/很快,但没有伪造能力。 如果它不能这样做,它就不会这样做,也不会告诉你它没有/不能,除非有一个致命的错误。
只要有能力,港口速度不是问题。 有人曾经说过4800波特就足以在发送数据所需的一秒钟内读取一次数据。 它取决于有效载荷,但它适用于经验法则。 10Hz可能会使许多系统的38400波特率默认。 我试了一下,没有任何损失。
以防万一,你只是想确保gpsd没有协商到9600波特率,然后才能提高速度。 gpsctl -s XXXX
(设置GPS发送数据包的波特率)为我返回一个错误。
即使没有gpsd默认设置中的-b
标志,这个新的gps也不会锁定在断电之间的更高频率更新中。 我必须重新发布命令。 这可能是一个不好的电池,操作员错误,或者我不明白这个缺陷是一个功能,不锁定其他系统无法触及的gps。 ( -b
的原因)
这是你如何改变使用gpsd的gps的响应,或者我是怎么做的。
然而,在回答你的问题时,要用Python改变通过gpsd的gps响应速率
import subprocess
subprocess.call(['gpsctl', '-c', '0.2']) # Digits are the time in seconds.
试试看看。 使用gpsctl -c 0.25
返回四分之一秒GPS读数等。
为了帮助我刚刚添加了gpsd设备报告刷新按键的两个Python gpsd客户端演示脚本(点击d
刷新并查看新设置中的数字)。
它们适用于Python 2.7-3.5 gpsd python客户端,当函数在演示脚本中找到一个主目录时,它将如下所示:
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]))
链接地址: http://www.djcxy.com/p/91805.html