最近我正在开发一个基于raspberrypi 2b +的设备,它连接到mpu9250(我自己焊接)。
我可以正确读取9轴数据,但我注意到每个数据输入具有不同的时间差:
该图显示了每两个数据之间的时间差。 但我已经使用QTimer确保我的代码每隔10ms读一次mpu9250。
所以我在RaspberryPi 2b +上尝试了这个代码:
import time
import matplotlib.pyplot as plt
time_arr = []
for i in range(5000):
t0 = time.time()
print "K"
t1 = time.time() - t0
time_arr.append(t1)
plt.plot(time_arr)
plt.show()
结果:
即使这些简单的代码仍然在图表上显示高峰,它让我失望......
有人可以帮助我解决这些问题或解释发生了什么吗?
答案 0 :(得分:1)
在第一次测试中,您使用的是QTimer,它将计时器视为后台任务。 QT主要致力于提供响应式GUI。
在第二次测试中,循环中有一个print语句 - 打印中涉及的因素有很多,这可能会导致执行语句所需的时间发生变化。
查看threading.Timer
课程,了解更好的方法。
文档说:
此类表示仅在经过一定时间后才应运行的操作 - 计时器。 Timer是Thread的子类,因此也可以作为创建自定义线程的示例。
通过调用start()方法,启动定时器,就像使用线程一样。通过调用cancel()方法可以停止计时器(在其动作开始之前)。
请注意,它也说:
计时器在执行其操作之前等待的时间间隔可能与用户指定的时间间隔不完全相同。
换句话说,它不会是完美的,但它很可能比你现在看到的要好得多。
如果您对以更高精度测量时间而不是以更高精度调度任务感兴趣,请考虑使用Python 3中提供的time.perf_counter()
。