首页 > 解决方案 > 绘制实时串行数据时加快 mplotlib

问题描述

我正在使用 Arduino 创建周围区域的 3d 激光雷达扫描,并通过串行将 x、y、z 坐标发送到 python 脚本以实时可视化数据。我遇到的问题是 mplotlib 太慢了,无法跟上流。我有一种感觉,这是由于完全重绘了情节,但我还没有找到解决办法。我通过串行写入 s1000 以启动激光雷达扫描,并每秒发送一次 ax、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

标签: pythonmatplotlibarduino

解决方案


推荐阅读