我正在使用python2.7.9,GPSD和python-gps软件包在Raspberry Pi 2中使用adafruit最终GPS突破。我已成功通过串行端口以1Hz的频率获取gps更新。

据称该设备能够进行10Hz更新,我想启用该更新。根据数据表(请参见下面的代码段),可以通过串行命令进行设置。

python - 使用gpsd和python更改更新率-LMLPHP

我的问题是我找不到有关python-gps模块或GPSD的足够文档,该文档将告诉我如何使用python脚本通过串口向GPS发送命令。有人可以指出我正确的方向吗?

最佳答案

我刚刚从与您相同的家庭那里获得了GPS。 (MTK)他们使用$PMTK控制字符串。对PMTK protocol的任何搜索都会提供无穷的资源。限制是gps本身。

对于一次性转换,标准方法是从根终端执行echo -e "\$PMTK220,200*2C\r\n" > /dev/ttyAMA0或连接设备的任何位置,以实现5Hz响应。这

  • -e标志允许解析反斜杠
  • $ NMEA句子
  • 的开头
  • P专有消息
  • MTK NMEA数据类型
  • 220数据包类型
  • 200分组数据
  • *数据结束
  • 2C校验和
  • \r\n NMEA句子
  • 的结尾

    也有scriptsother projects可用,但是都要求gpsd不能控制gps。 gpsd将阻止向gps发送控制字符串。

    此外,如果-b中包含/etc/default/gpsd标志,则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也不会在断电之间停留在更高频率的更新中。我必须重新发出命令。可能是电池电量不足,运算符(operator)失误,或者我不知道此缺陷是无法将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设备报告刷新按键的two Python gpsd client demonstration scripts可以为您提供帮助,(单击d可以刷新并查看新设置中的数字。)

    它们用于Python 2.7-3.5 gpsd python client,当函数在演示脚本中找到主页时,它将类似于以下内容:
    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]))
    

    关于python - 使用gpsd和python更改更新率,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37354512/

    10-11 19:27