与这个人类似,我一直在尝试将 GPS 时间从 Pixhawk 获取到 Raspberry Pi 配套计算机中。
在尝试该@vehicle.on_message('SYSTEM_TIME')
方法之前,我使用通配符来捕获所有消息并将结果转储到文件中。检查文件,我看到我从 GPS 获得的唯一类型的消息是GPS_RAW_INT。最重要的是,我没有收到SYSTEM_TIME_UTC消息,根据文档,该消息从 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 秒。其他试验显示出巨大的变化(差异绝不是固定的)。
所以,我的问题是:
- SYSTEM_TIME消息基于什么?实际上,它只能是 GPS(这是 Pixhawk 唯一可用的时间数据),但如果是这样的话......
- 为什么它如此不准确,为什么我也没有收到SYSTEM_TIME_UTC消息?