类似于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.其他试验表明存在差异(差异并非固定)。
所以,我的问题是:
答案 0 :(得分:0)
是的,系统时间基于GPS。
你在里面进行测试吗? GPS模块一起计算位置,速度和时间。如果没有良好的锁定,可能不会产生好时机。
我认为SYSTEM_TIME_UTC
消息已被弃用。