ускорить mplotlib при построении последовательных данных в реальном времени - PullRequest
0 голосов
/ 14 мая 2018

Я использую Arduino для создания трехмерного лидарного сканирования области вокруг него и отправляю координаты x, y, z по последовательному каналу в скрипт python для визуализации данных в реальном времени. Проблема, с которой я столкнулся, заключается в том, что mplotlib слишком медленен, чтобы не отставать от потока. У меня такое ощущение, что это связано с полным перерисовыванием сюжета, но я не нашел решения. Я пишу s1000 через последовательный порт, чтобы запустить сканирование лидара, и отправляю координаты x, y, z один раз в секунду.

import serial
import numpy
import matplotlib.pyplot as plt #import matplotlib library
from mpl_toolkits.mplot3d import Axes3D
from drawnow import *
from matplotlib import animation
import time

ser = serial.Serial('COM7',9600,timeout=5)
ser.flushInput()
time.sleep(5)
ser.write(bytes(b's1000'))

plt.ion()
fig = plt.figure(figsize=(16,12))
ax = fig.add_subplot(111, projection="3d")
ax.set_xlim3d(-255, 255)
ax.set_ylim3d(-255, 255)
ax.set_zlim3d(-255, 255)

x=list()
y=list()
z=list()


while True:
    try:
        ser_bytes = ser.readline()
        data = str(ser_bytes[0:len(ser_bytes)-2].decode("utf-8"))
        xyz = data.split(", ")
        dx = float(xyz[0])
        dy = float(xyz[1])
        dz = float(xyz[2].replace(";",""))
        x.append(dx);
        y.append(dy);
        z.append(dz);

        ax.scatter(x,y,z, c='r',marker='o')
        plt.draw()
        plt.pause(0.0001)

    except:
        print("Keyboard Interrupt")
        ser.close()
        break
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...