在Dronekit中SYSTEM_TIME和伴随计算机时间之间的累积错误

时间:2017-01-07 02:35:14

标签: dronekit-python gps-time

类似于this guy,我一直试图从Pixhawk到Raspberry Pi配套计算机获得GPS时间。

在尝试@vehicle.on_message('SYSTEM_TIME')方法之前,我使用通配符捕获所有消息并将结果转储到文件中。检查文件,我看到我从GPS获得的唯一消息类型是 GPS_RAW_INT 。最重要的是,我没有收到 SYSTEM_TIME_UTC 消息,根据the documentation,该消息从GPS获取UTC时间。

现在,使用@vehicle.on_message('SYSTEM_TIME')工作正常,我得到了一些东西。但是,那是什么东西?文件声称它是:

  

系统时间是主时钟的时间,通常是   主要车载电脑的电脑时钟。

好吧,我认为“主要的机载电脑”是Pixhawk。但是,如果没有包含它的GPS消息,它如何获得时间。 GPS_RAW_INT 不带任何时间信息。

进一步调查,我编写了以下处理程序:

@vehicle.on_message('SYSTEM_TIME')
def listener(self, name, message):
    rpi_time = time.time()
    mavlink_time = float(message.time_unix_usec)/1000000
    print( str(rpi_time) + " - " + str(mavlink_time) + " = " + str(rpi_time-mavlink_time) )

rpi_time 来自Raspberry Pi并且是正确的,因为它是在启动时由NTP设置的。我想验证 mavlink_time (我认为必须是基于GPS的时间)将非常接近。我错了。

多次运行,我注意到,首先,GPS时间总是提前两秒。随着时间的推移,它落后了。样本输出:

1483754011.89 - 1483754014.72 = -2.83385300636
1483754012.16 - 1483754014.96 = -2.79546308517
1483754012.44 - 1483754015.2 = -2.75652289391
...
1483754154.69 - 1483754044.5 = 110.186414957
1483754173.72 - 1483754044.76 = 128.95413518
1483754184.04 - 1483754045.02 = 139.016195059

在这种情况下,rpi_time(正确),表示已经过了172秒,mavlink_time仅声称为30.其他试验表明存在差异(差异并非固定)。

所以,我的问题是:

  1. 什么是基于的 SYSTEM_TIME 消息?实际上,它只能是GPS(这是Pixhawk唯一可用的数据)但是,如果是这样的话......
  2. 为什么这么不准确?为什么我也不能收到 SYSTEM_TIME_UTC 消息?

1 个答案:

答案 0 :(得分:0)

  1. 是的,系统时间基于GPS。

  2. 你在里面进行测试吗? GPS模块一起计算位置,速度和时间。如果没有良好的锁定,可能不会产生好时机。

  3. 我认为SYSTEM_TIME_UTC消息已被弃用。