Я использую 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