python读取大疆激光雷达LVX数据并显示
如需要写好可以直接使用的软件,可以去公众号下载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数据并显示相关推荐
- C++读取大疆激光雷达LVX数据并显示
实现了一个完全依靠 C++ 解析lvx数据的代码,不算复杂,不依赖任何其他的库包括官方的sdk. 并且以时间戳作为强度值,所以看上去颜色会和正常的不太一样: std::vector<int> ...
- python读取大文件-python如何读取大文件以及分析时的性能优化小技巧
在二代.三代测序背景下,分析人员难免会遇到解析超过1G.或者10G以上的文件.这里将给大家简单介绍下如何用python读取大文件,并给大家提两个优化代码的小建议. 首先,python 读取GB级大文件 ...
- python读取大文件-使用Python读取大文件的方法
背景 最近处理文本文档时(文件约2GB大小),出现memoryError错误和文件读取太慢的问题,后来找到了两种比较快Large File Reading 的方法,本文将介绍这两种读取方法. 准备工作 ...
- PHP 与Python 读取大文件的区别
php读取大文件的方法 <?php function readFile($file) {# 打开文件$handle = fopen($file, 'rb');while (feof($handl ...
- python读取大文件的某行_python 大文件以行为单位读取方式比对
先前需要做一个使用python读取大文件(大于1G),并逐条存入内存进行处理的工作.做了很多的尝试,最终看到了如下的文章. 该文章实际上提供了集中读取大文件的方式,先经过测试总结如下 1. for l ...
- 使用Python读取和处理安卓传感器数据与CSV读取
使用Python读取和处理安卓传感器数据与CSV读取 计算机通过从标准输入.文件和传感器中读取数据,然后将其存储在内存中进行处理.数据处理可以是在线的,也可以是离线的,这取决于用户的喜好. 数据处理是 ...
- 使用python读取大文件
读取文件时,如果文件过大,则一次读取全部内容到内存,容易造成内存不足,所以要对大文件进行批量的读取内容. python读取大文件通常两种方法:第一种是利用yield生成器读取:第二种是:利用open( ...
- python 读取大文件
python 读取大文件 python读取文件一般情况是利用open()函数以及read()函数来完成: f = open(filename,'r') f.read() 这种方法读取小文件,即读取大小 ...
- Python读取大文件的坑与内存占用检测
Python读取大文件的"坑"与内存占用检测 1.read()与readlines() with open(file_path, 'rb') as f:sha1Obj.update ...
最新文章
- 四种常见的 POST 提交数据方式
- python怎么读取列表-Python如何获取列表(List)的中位数
- 为电商而生的知识图谱,如何感应用户需求
- Hibernate - DetachedCriteria 的完整用法
- java10---点餐系统
- 机器学习-决策树--基础知识总结
- 最好用的10款手机库存管理软件,我来教你怎么选
- matlab的otdr仿真,otdr测试曲线生成软件-OTDR测试曲线图仿真软件TrcView 4.0 官方免费版 - 河东下载站...
- SSD1306 OLED驱动芯片 详细介绍
- Openwrt:创建编译IPK软件包
- linux etc xdg,Xdg-menu (简体中文)
- 关于unity打包apk在手机上安装失败(-108)
- 数学笔记10——拉格朗日中值定理
- 操作系统基础:内存管理逻辑思维导图,简单看懂内存管理的逻辑
- STM32学习笔记---OLED页寻址方式
- 剑指offer 学习笔记 和为s的数字
- 微信开发者工具source看不了代码_微信开发者工具和开发
- 计算机图形学实验一 《MFC绘图基础》
- 解决双屏同时只能一个工作,另一个黑屏问题
- html向下的三角符号怎么打,哪些字符可用于上/下三角形(无茎的箭头)以HTML显示?...