python - 使用 pyqtgraph 和 LiDAR 快速、实时地绘制点

标签 python real-time point pyqtgraph

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

我到处查看并尝试了无数的 pyqtgraph 代码片段,但它要么崩溃,要么 super 慢,要么根本不工作。

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

感谢任何形式的帮助

最佳答案

我不清楚你到底想做什么,所以我假设你想制作一个散点图,其中有 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()

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

关于python - 使用 pyqtgraph 和 LiDAR 快速、实时地绘制点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46488204/

相关文章:

r - 将形状文件从多边形转换为点?

c++ - 为什么存储整数的内存块的值会反复变化?

python - 将 report_tensor_allocations_upon_oom 添加到 cifar10_estimator 示例

python - 在 Python 3 Pythonic 中使用 map(...) (与循环相比)

python - 我有一个 PNG 图像,想知道如何在 python 中有效地将其转换为 PBM

python - 我如何告诉 [G]vim 去哪里寻找 python26.dll?

c# - 在线多人游戏基础

actionscript-3 - 多个应用程序的同步和计时

php - 如何使用文本文件中获得的数据绘制实时图形(直方图)

math - 点近线铺设