如需要写好可以直接使用的软件,可以去公众号下载las 工具软件,如需转换或者提取 大疆 L1 数据文件,请直接微信联系 394467238

个人公众号“代码就是生产力”,发布更多有用的工具

根据大疆的协议解析的LVX文件,并用open3d 显示出来,LVX文件是从大疆官网下载的地平线雷达的数据,其他雷达的数据应该也可以解析。

直接放效果和代码吧

20210602_131722

lonlon ago的视频
· 7 播放

代码写的很直接简单,打开文件,解析,显示,没有什么其他的步骤,有问题可以留言。

#coding:utf-8
import structimport open3d as o3d  # 0.9版本
import numpy as np# 读取雷达数据头部分:path = r'..\livox\Horizon1.lvx'   # 这里替换成你的数据路径
f = open(path, 'rb')
data = f.read()
total_len = len(data)
f.close()f = open(path, 'rb')print("size LvxFilePublicHeader ", struct.calcsize(LvxFilePublicHeader))
data = f.read(struct.calcsize(LvxFilePublicHeader))  #24
print(data)
data_tuple = struct.unpack(LvxFilePublicHeader, data)
print(data_tuple)data = f.read(struct.calcsize(LvxFilePrivateHeader))  #24+5
print("size LvxFilePrivateHeader ",struct.calcsize(LvxFilePrivateHeader))
data_tuple = struct.unpack(LvxFilePrivateHeader, data)
print(data_tuple)data = f.read(struct.calcsize(LvxDeviceInfo))  #24+5+59=88
print("size LvxDeviceInfo ",struct.calcsize(LvxDeviceInfo))
data_tuple = struct.unpack(LvxDeviceInfo, data)
print(data_tuple)
print(data_tuple[33])  # device_type is 3 Horizon#----------------------------------------------------------------------------------
# 读取雷达数据帧部分:point_list = []
frame_list = []
idx = 0
print(struct.calcsize(LvxFilePublicHeader) + struct.calcsize(LvxFilePrivateHeader)+ struct.calcsize(LvxDeviceInfo))
current_offset = struct.calcsize(LvxFilePublicHeader) + struct.calcsize(LvxFilePrivateHeader)+ struct.calcsize(LvxDeviceInfo)vis = o3d.visualization.Visualizer()
vis.create_window(window_name='map', width=1000, height=720)
vis.get_render_option().background_color = np.asarray([0, 0, 0])  # 背景颜色
point_cloud = o3d.geometry.PointCloud()
vis.add_geometry(point_cloud)
to_reset = Truewhile (current_offset < total_len):current_frame_offset = 0data = f.read(struct.calcsize(FrameHeader))data_tuple = struct.unpack(FrameHeader, data)  # 原始格式是元祖,为什么要转array,元祖不能索引assert (current_offset == data_tuple[0])next_offset = data_tuple[1]current_frame_offset += struct.calcsize(FrameHeader)while (current_offset + current_frame_offset < next_offset):data = f.read(struct.calcsize(LvxBasePackHeader))current_frame_offset += struct.calcsize(LvxBasePackHeader)data_tuple = struct.unpack(LvxBasePackHeader, data)  # 原始格式是元祖,为什么要转array,元祖不能索引data_type = data_tuple[7]data_size = size_map[data_type]data = f.read(data_size)current_frame_offset += data_sizeif data_type == 2:idx += 1data_tuple = struct.unpack(LivoxExtendRawPoint, data)  # 96*5data_unpack = np.array(data_tuple, dtype=int).reshape(-1, 5)  # np.array会多耗时15毫秒point_list.append(data_unpack)elif data_type == 6:# data_tuple = struct.unpack(LivoxImuPoint, data)  #IMUpass  # 暂时不需要IMU数据else:pass  # 只解析这2种数据,其他的丢弃if idx == 250:  # 每250个数据包为一帧point_list = np.vstack(point_list)point_list = point_list[:, :3] / 1000print("point_list", point_list.shape)point_cloud.points = o3d.utility.Vector3dVector(point_list)# time.sleep(3)vis.update_geometry(point_cloud)  # 0.8版本之后才可以这样用# vis.update_geometry()if to_reset:vis.reset_view_point(True)to_reset = Falsevis.poll_events()vis.update_renderer()point_list = []idx = 0current_offset += current_frame_offsetassert (current_offset == next_offset)

python读取大疆激光雷达LVX数据并显示相关推荐

  1. C++读取大疆激光雷达LVX数据并显示

    实现了一个完全依靠 C++ 解析lvx数据的代码,不算复杂,不依赖任何其他的库包括官方的sdk. 并且以时间戳作为强度值,所以看上去颜色会和正常的不太一样: std::vector<int> ...

  2. python读取大文件-python如何读取大文件以及分析时的性能优化小技巧

    在二代.三代测序背景下,分析人员难免会遇到解析超过1G.或者10G以上的文件.这里将给大家简单介绍下如何用python读取大文件,并给大家提两个优化代码的小建议. 首先,python 读取GB级大文件 ...

  3. python读取大文件-使用Python读取大文件的方法

    背景 最近处理文本文档时(文件约2GB大小),出现memoryError错误和文件读取太慢的问题,后来找到了两种比较快Large File Reading 的方法,本文将介绍这两种读取方法. 准备工作 ...

  4. PHP 与Python 读取大文件的区别

    php读取大文件的方法 <?php function readFile($file) {# 打开文件$handle = fopen($file, 'rb');while (feof($handl ...

  5. python读取大文件的某行_python 大文件以行为单位读取方式比对

    先前需要做一个使用python读取大文件(大于1G),并逐条存入内存进行处理的工作.做了很多的尝试,最终看到了如下的文章. 该文章实际上提供了集中读取大文件的方式,先经过测试总结如下 1. for l ...

  6. 使用Python读取和处理安卓传感器数据与CSV读取

    使用Python读取和处理安卓传感器数据与CSV读取 计算机通过从标准输入.文件和传感器中读取数据,然后将其存储在内存中进行处理.数据处理可以是在线的,也可以是离线的,这取决于用户的喜好. 数据处理是 ...

  7. 使用python读取大文件

    读取文件时,如果文件过大,则一次读取全部内容到内存,容易造成内存不足,所以要对大文件进行批量的读取内容. python读取大文件通常两种方法:第一种是利用yield生成器读取:第二种是:利用open( ...

  8. python 读取大文件

    python 读取大文件 python读取文件一般情况是利用open()函数以及read()函数来完成: f = open(filename,'r') f.read() 这种方法读取小文件,即读取大小 ...

  9. Python读取大文件的坑与内存占用检测

    Python读取大文件的"坑"与内存占用检测 1.read()与readlines() with open(file_path, 'rb') as f:sha1Obj.update ...

最新文章

  1. 四种常见的 POST 提交数据方式
  2. python怎么读取列表-Python如何获取列表(List)的中位数
  3. 为电商而生的知识图谱,如何感应用户需求
  4. Hibernate - DetachedCriteria 的完整用法
  5. java10---点餐系统
  6. 机器学习-决策树--基础知识总结
  7. 最好用的10款手机库存管理软件,我来教你怎么选
  8. matlab的otdr仿真,otdr测试曲线生成软件-OTDR测试曲线图仿真软件TrcView 4.0 官方免费版 - 河东下载站...
  9. SSD1306 OLED驱动芯片 详细介绍
  10. Openwrt:创建编译IPK软件包
  11. linux etc xdg,Xdg-menu (简体中文)
  12. 关于unity打包apk在手机上安装失败(-108)
  13. 数学笔记10——拉格朗日中值定理
  14. 操作系统基础:内存管理逻辑思维导图,简单看懂内存管理的逻辑
  15. STM32学习笔记---OLED页寻址方式
  16. 剑指offer 学习笔记 和为s的数字
  17. 微信开发者工具source看不了代码_微信开发者工具和开发
  18. 计算机图形学实验一 《MFC绘图基础》
  19. 解决双屏同时只能一个工作,另一个黑屏问题
  20. html向下的三角符号怎么打,哪些字符可用于上/下三角形(无茎的箭头)以HTML显示?...

热门文章

  1. Jquery miniUI开发教程(1):概述
  2. scrapy——7 scrapy-redis分布式爬虫,用药助手实战,Boss直聘实战,阿布云代理设置...
  3. Unity中英文混排的空格换行问题
  4. 白话 贝叶斯公式_白话贝叶斯理论及在足球比赛结果预测中的应用和C#实现
  5. Webpack面试题超全面【吐血整理】
  6. Centos7 悟空crm安装部署
  7. 目标检测比赛之YOLOV4方法
  8. 协商缓存与状态码304
  9. Azure云服务基础知识
  10. 2021--微信小程序流量主开通 (如何赚钱)