使用 pyqtgraph 和 LiDAR 快速实时绘制点

2024-03-21

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

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

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

感谢任何形式的帮助


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

根据我的经验,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()

其工作方式如下。通过绘制一个空列表绘图数据项 http://www.pyqtgraph.org/documentation/graphicsItems/plotdataitem.html被建造。这代表点的集合。当新的数据点到达时,setData方法用于将它们设置为 PlotDataItem 的数据,从而删除旧点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 pyqtgraph 和 LiDAR 快速实时绘制点 的相关文章

  • 尽管极其懒惰,但如何在 Python 中模拟 IMAP 服务器?

    我很好奇是否有一种简单的方法来模拟 IMAP 服务器 例如imaplib模块 在Python中 without做很多工作 是否有预先存在的解决方案 理想情况下 我可以连接到现有的 IMAP 服务器 进行转储 并让模拟服务器在真实的邮箱 电子
  • Django REST序列化器:创建对象而不保存

    我已经开始使用 Django REST 框架 我想做的是使用一些 JSON 发布请求 从中创建一个 Django 模型对象 然后使用该对象而不保存它 我的 Django 模型称为 SearchRequest 我所拥有的是 api view
  • 如何在python中读取多个文件中的文本

    我的文件夹中有许多文本文件 大约有 3000 个文件 每个文件中第 193 行是唯一包含重要信息的行 我如何使用 python 将所有这些文件读入 1 个文本文件 os 模块中有一个名为 list dir 的函数 该函数返回给定目录中所有文
  • 如何在刻度标签和轴之间添加空间

    我已成功增加刻度标签的字体 但现在它们距离轴太近了 我想在刻度标签和轴之间添加一点呼吸空间 如果您不想全局更改间距 通过编辑 rcParams 并且想要更简洁的方法 请尝试以下操作 ax tick params axis both whic
  • 将字符串转换为带有毫秒和时区的日期时间 - Python

    我有以下 python 片段 from datetime import datetime timestamp 05 Jan 2015 17 47 59 000 0800 datetime object datetime strptime t
  • 如何生成给定范围内的回文数列表?

    假设范围是 1 X 120 这是我尝试过的 gt gt gt def isPalindrome s check if a number is a Palindrome s str s return s s 1 gt gt gt def ge
  • DreamPie 不适用于 Python 3.2

    我最喜欢的 Python shell 是DreamPie http dreampie sourceforge net 我想将它与 Python 3 2 一起使用 我使用了 添加解释器 DreamPie 应用程序并添加了 Python 3 2
  • 如何在 Sublime Text 2 的 OSX 终端中显示构建结果

    我刚刚从 TextMate 切换到 Sublime Text 2 我非常喜欢它 让我困扰的一件事是默认的构建结果显示在 ST2 的底部 我的程序产生一些很长的结果 显示它的理想方式 如在 TM2 中 是并排查看它们 如何在 Mac 操作系统
  • 更改自动插入 tkinter 小部件的文本颜色

    我有一个文本框小部件 其中插入了三条消息 一条是开始消息 一条是结束消息 一条是在 单位 被摧毁时发出警报的消息 我希望开始和结束消息是黑色的 但被毁坏的消息 参见我在代码中评论的位置 插入小部件时颜色为红色 我不太确定如何去做这件事 我看
  • 如何使用 Scrapy 从网站获取所有纯文本?

    我希望在 HTML 呈现后 可以从网站上看到所有文本 我正在使用 Scrapy 框架使用 Python 工作 和xpath body text 我能够获取它 但是带有 HTML 标签 而且我只想要文本 有什么解决办法吗 最简单的选择是ext
  • Spark的distinct()函数是否仅对每个分区中的不同元组进行洗牌

    据我了解 distinct 哈希分区 RDD 来识别唯一键 但它是否针对仅移动每个分区的不同元组进行了优化 想象一个具有以下分区的 RDD 1 2 2 1 4 2 2 1 3 3 5 4 5 5 5 在此 RDD 上的不同键上 所有重复键
  • 运行多个 scrapy 蜘蛛的正确方法

    我只是尝试使用在同一进程中运行多个蜘蛛新的 scrapy 文档 http doc scrapy org en 1 0 topics practices html但我得到 AttributeError CrawlerProcess objec
  • Python 中的二进制缓冲区

    在Python中你可以使用StringIO https docs python org library struct html用于字符数据的类似文件的缓冲区 内存映射文件 https docs python org library mmap
  • NameError:名称“urllib”未定义”

    CODE import networkx as net from urllib request import urlopen def read lj friends g name fetch the friend list from Liv
  • Abaqus 将曲面转化为集合

    我一直试图在模型中找到两个表面的中心 参见照片 但未能成功 它们是元素表面 面 查询中没有选项可以查找元素表面的中心 只能查找元素集的中心 找到节点集的中心也很好 但是我的节点集没有出现在工具 gt 查询 gt 质量属性选项中 而且我找不到
  • ExpectedFailure 被计为错误而不是通过

    我在用着expectedFailure因为有一个我想记录的错误 我现在无法修复 但想将来再回来解决 我的理解expectedFailure是它会将测试计为通过 但在摘要中表示预期失败的数量为 x 类似于它如何处理跳过的 tets 但是 当我
  • Python - 在窗口最小化或隐藏时使用 pywinauto 控制窗口

    我正在尝试做的事情 我正在尝试使用 pywinauto 在 python 中创建一个脚本 以在后台自动安装 notepad 隐藏或最小化 notepad 只是一个示例 因为我将编辑它以与其他软件一起使用 Problem 问题是我想在安装程序
  • 如何改变Python中特定打印字母的颜色?

    我正在尝试做一个简短的测验 并且想将错误答案显示为红色 欢迎来到我的测验 您想开始吗 是的 祝你好运 法国的首都是哪里 法国 随机答案不正确的答案 我正在尝试将其显示为红色 我的代码是 print Welcome to my Quiz be
  • VSCode:调试配置中的 Python 路径无效

    对 Python 和 VSCode 以及 stackoverflow 非常陌生 直到最近 我已经使用了大约 3 个月 一切都很好 当尝试在调试器中运行任何基本的 Python 程序时 弹出窗口The Python path in your
  • 从 Python 中的类元信息对 __init__ 函数进行类型提示

    我想做的是复制什么SQLAlchemy确实 以其DeclarativeMeta班级 有了这段代码 from sqlalchemy import Column Integer String from sqlalchemy ext declar

随机推荐

  • Swift 中迭代对象类属性

    Swift 中有没有一种简单的方法来迭代类的属性 即我有一个 Person 类 它有 3 个属性 姓名 姓氏 年龄 有没有类似的东西 for attribute in Person println attribute attribute v
  • 如何在 CQL3 中使复合键列具有空列值

    这听起来可能很愚蠢 因为 SQL 的复合主键中没有空值 但只是想确认我们是否可以在 CQL3 中拥有相同的功能 因此 我们有一个像这样的表来存储宽行 CREATE TABLE keyspace12 colFamily1 id text co
  • 如何安全地实现Java插件安全?

    我正在设计一个用于在 Java 应用程序中加载 处理和支持插件的系统 我认为在部署之前对此绝对至关重要的一个功能是能够建立一个安全的环境 在该环境中插件仅限于允许其执行的操作 我无法理解如何以编程方式使用策略文件而不在启动时运行 Djava
  • 在 php 中创建一个 .sql 文件

    我使用下面的代码来获取 wp option 值 function option value change global wpdb myrows wpdb gt get results SELECT FROM wp options forea
  • 有什么区别?

    我注意到的用法
  • 如何使用 ReactJS 重新加载 iframe?

    我的 ReactJS 组件包含一个 iframe 为了响应外部页面中的事件 我需要重新加载 iframe 如果用户已导航到 iframe 中的另一个页面 我需要将其重置为首次加载该页面时的 URL 该网址可用于this props 我尝试过
  • 如何清除先前绘制的 Matplotlib 文本框?

    我可以在其中制作文本框matplotlib美好的 但我不知道如何从渲染图中删除它们 好像没有figure text clear or figure text visible False 绘制文本框后 这是怎么做到的 与传说不同的是 您似乎无
  • 更改配置单元中的列类型

    我昨天刚开始学习 hive 我一直致力于更改 hive 中列的类型 我想问列类型的更改是否对它们有某种限制 因为我只能进行特定类型的更改 例如我可以将 int 转换为 double string 转换为 double double 转换为
  • type.__setattr__ 与 object.__setattr__ 有什么不同?

    type setattr 用于类 基本上是元类的实例 object setattr 另一方面 用于类的实例 这是完全可以理解的 我没有看到这两种方法之间有显着差异 至少在Python级别 我注意到这两种方法使用相同的属性分配过程 如果我错了
  • core-js 安装后脚本错误失败

    当我尝试在现有的节点中安装节点模块时 我遇到以下错误Angular project 我正在尝试在 Windows 计算机 Win32 X64 中安装节点模块 gt email protected cdn cgi l email protec
  • 如何增加 Android Google Play 服务排行榜上的玩家得分?

    我阅读了有关的所有文档排行榜 https developers google com games services common concepts leaderboards在Google Play服务中 当我调用GameClient的sub
  • 如何在spark-jdbc应用程序中给出表名以读取RDBMS数据库上的数据?

    我正在尝试使用 Spark 读取 greenplum 数据库上存在的表 如下所示 val execQuery s select allColumns 0 as flagCol from schema table where period y
  • 从终端在 xcode PhoneGap 项目中定义方案

    我正在编写一个脚本来存档phonegap 项目的iOS 部分 该脚本会擦除项目所在的目录 然后使用源代码管理中的最新代码重新填充该目录 然后我跑 phonegap local build ios为了构建该项目 然而 为了归档该项目 我需要定
  • 在 Node.js 中生成并终止进程

    我正在尝试在 javascript 中生成一个进程 并在一段时间后终止它 出于测试目的 最后 该进程将是一个无限循环 我需要在指定时间使用不同的参数重新启动 因此我认为生成进程并终止它是执行此操作的最佳方法 我的测试代码是 var spaw
  • 用户默认值/KeyedArchiver 挫败感

    我正在开发一个作业应用程序 该应用程序为每个作业使用自定义作业对象 我试图在 standardUserDefaults 中存储 NSMutableArray 通过 initWithArray 转换为 NSArray 但在保存和重新加载数组时
  • 如何将 subversion 树从 v1.7 降级到 v1.6?

    有没有办法将 subversion 工作副本从版本 1 7 降级到版本 1 6x 版本 1 7 使用单个 svn 根文件夹和 sqlite 来存储元数据 因此 tigris org 中的转换 python 脚本不起作用 您是否知道一种不涉及
  • 如何关闭 Android 应用程序?

    如何关闭 Android 应用程序 我没有找到应用程序对象的关闭命令 我想在出现某些严重错误时关闭并重新启动 如果存在某种 严重错误 那么您应该在代码中处理它 而不是尝试重新启动应用程序 您无法关闭 Android 中的应用程序 但是一旦所
  • 如何防止光标在退出 Vim 插入模式时向后移动一个字符?

    是否可以取消上述行为 额外学分的任务 想办法强制 Vim 在退出插入模式后立即刷新光标位置 虽然我不建议更改默认的光标机制 实现相关行为的一种方法是使用以下内容 插入模式映射 inoremap
  • 绕过表单身份验证自动重定向到登录,如何?

    我正在编写一个使用 asp net mvc 部署到 iis6 的应用程序 我正在使用表单身份验证 通常 当用户尝试在未经适当授权的情况下访问资源时 我希望他们被重定向到登录页面 FormsAuth 对我来说这件事很简单 问题 现在我有一个由
  • 使用 pyqtgraph 和 LiDAR 快速实时绘制点

    我想创建一个实时的点图 GUI 我正在使用 Scanse Sweep LiDAR 每次扫描该 LiDAR 工作频率为 1 10Hz 时 我都会收到大约 1000 个描述 LiDAR 周围环境的点 x y 这是一个 2D 激光雷达 我到处寻找