用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

    上一篇: changing update rate with gpsd and python

    下一篇: Type safe lookup on heterogeneous lists in Haskell