【问题标题】:Fast, Real-time plotting of points using pyqtgraph and a LiDAR使用 pyqtgraph 和 LiDAR 快速、实时地绘制点
【发布时间】:2018-03-11 07:44:08
【问题描述】:

我想创建一个实时的点绘图 GUI。我正在使用 Scanse Sweep LiDAR,并且在此 LiDAR 的每次扫描(工作频率在 1 - 10Hz 之间)时,我都会收到大约 1000 个点 (x, y) 来描述周围的 LiDAR。这是一个二维激光雷达。

我到处寻找并尝试了无数用于 pyqtgraph 的代码 sn-ps,但要么崩溃,要么超级慢,要么根本不起作用。

是否有一种直接的方式来创建绘图仪窗口,并在每次新的扫描/数据传输时,将这些 推送到绘图仪窗口?

感谢任何帮助

【问题讨论】:

  • MatplotLib 对于这种类型的绘图来说太慢了
  • 嗯,是的。如果你想以 10Hz 绘制 1000 个点。我想是的 - 如果任何基于 Python 的东西足够快,我会感到惊讶,TBH

标签: python real-time point pyqtgraph


【解决方案1】:

我不清楚你到底想做什么,所以我假设你想制作一个 1000 个点的散点图,每秒刷新 10 次。下次请包含您的代码,以便我们重现您的问题并查看您想要实现的目标。

根据我的经验,PyQtGraph 是 Python 中最快的选项。它可以轻松地以 10 Hz 绘制 1000 个点。请参阅下面的示例。

#!/usr/bin/env python

from PyQt5 import QtCore, QtWidgets
import pyqtgraph as pg
import numpy as np


class MyWidget(pg.GraphicsWindow):

    def __init__(self, parent=None):
        super().__init__(parent=parent)

        self.mainLayout = QtWidgets.QVBoxLayout()
        self.setLayout(self.mainLayout)

        self.timer = QtCore.QTimer(self)
        self.timer.setInterval(100) # in milliseconds
        self.timer.start()
        self.timer.timeout.connect(self.onNewData)

        self.plotItem = self.addPlot(title="Lidar points")

        self.plotDataItem = self.plotItem.plot([], pen=None, 
            symbolBrush=(255,0,0), symbolSize=5, symbolPen=None)


    def setData(self, x, y):
        self.plotDataItem.setData(x, y)


    def onNewData(self):
        numPoints = 1000  
        x = np.random.normal(size=numPoints)
        y = np.random.normal(size=numPoints)
        self.setData(x, y)


def main():
    app = QtWidgets.QApplication([])

    pg.setConfigOptions(antialias=False) # True seems to work as well

    win = MyWidget()
    win.show()
    win.resize(800,600) 
    win.raise_()
    app.exec_()

if __name__ == "__main__":
    main()

它的工作方式如下。通过绘制一个空列表,会创建一个 PlotDataItem。这表示点的集合。当新的数据点到达时,使用setData 方法将它们设置为PlotDataItem 的数据,从而移除旧的点。

【讨论】:

  • 游戏晚了,但是如果您还禁用轴的自动缩放,则在此示例中性能可以显着提高。只需为每个设置一个固定的比例。我今天偶然发现了这一点。
猜你喜欢
  • 2015-06-21
  • 2021-07-14
  • 2018-03-05
  • 2019-04-01
  • 2012-10-22
  • 2019-10-02
  • 2019-02-02
  • 2019-07-24
  • 2017-12-16
相关资源
最近更新 更多