Итак, я использую FuncAnimation из matplotlib, поэтому динамически рисую некоторые данные по мере их поступления из последовательного порта (в моем проекте это класс транспортного средства из dronekit, который отображается зеленой точкой), в основном у меня есть анимация, называемая которой каждый цикл получает новый класс транспортного средства с измененными данными, чтобы его можно было отобразить, но по какой-то причине он рисует, но через пару секунд после потока миссии (что позволяет «обновить» данные о транспортном средстве он выскакивает и убивает питона (Колесо смерти), вот что получаю:
Я поместил несколько отслеживающих отпечатков в функцию, которая вызывается при запуске 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.figure(), droneScatter — это просто точка разброса, транспортное средство — это класс транспортного средства, содержащий данные, которые динамически обновляются, а поток MissionStart — это просто поток для изменения класса транспортного средства с течением времени.
Так же хочу отметить, что фига в интерактивном режиме включена, и ограничения по осям выставлены хорошо (видел, что при динамическом изменении данных, но без масштабирования осей могут быть проблемы) также, пробуя разные комбинации plt .draw() и plt.plot(block = False) приводят меня к тому, что я вообще не рисую или просто вижу пустой график.
Поскольку я понятия не имею, что вызывает это, я добавлю к этому тэг dronekit и треды, чтобы узнать, есть ли у кого-нибудь идеи!