所以我使用matplotlib的FuncAnimation,所以当一些数据从串口到达时,动态地绘制一些数据(在我的项目中是来自dronekit的车辆类,用绿点显示),我基本上是调用的动画,每一次循环都是接收一个新的车辆类,数据发生变化,所以可以绘制。但由于某些原因,它绘图,但几秒钟后,任务的线程(允许 "刷新 "车辆数据,它弹出并杀死python(死亡之轮),这是我得到的。
我在FuncAnimation开始运行时被调用的函数里放了一些跟踪打印,看起来是这样的。
def droneAnimation(i, vehicle, droneScatter):
time.sleep(1)
lat = [vehicle.location.global_relative_frame.lat]
lon = [vehicle.location.global_relative_frame.lon]
alt = [vehicle.location.global_relative_frame.alt]
print("Alt received: " + str(alt))
droneScatter._offsets3d = (lat,lon,alt)
print("Changed pos")
正如你所看到的,这些指纹在前几秒被触发,但在反复几次之后还是会崩溃。 FuncAnimation的调用是这样的:
fig,droneScatter = plotLiveSimpleFacade(vehicle,w,2)
ani = FuncAnimation(fig,droneAnimation, fargs = (vehicle,droneScatter))
plt.draw()
plt.pause(0.1)
m = threading.Thread(target=MissionStart(vehicle,hmax) , name = "MISSION")
m.start()
参考: fig是一个plt.fig(),droneScatter只是一个散点,vehicle是车辆类,包含动态更新的数据,MissionStart线程只是一个线程,使车辆类随时间变化。
我还想说的是,fig是在交互模式下开启的,轴的限制设置得很好(我看到当你动态改变数据但不缩放轴可能会有问题)另外,尝试plt.draw()和plt.plot.plot(block = False)的不同组合,导致我根本没有绘制或只是空白图。
由于我不知道是什么原因造成的,所以我将把 dronekit 标签放在这个和线程上,看看是否有人有任何想法!所以我使用 FuncAnalysis(FuncAnalysis)来解决这个问题。
我看了一下matplotlib的线程,看起来用这个库的线程并不是最好的,因为它不是线程安全的,最好的办法是看一下用python的多处理,或者用不同的方式来处理这个问题。岗位