Nuscenes LiDAR数据格式 与读取显示

本文介绍如何读取 Nuscenes 数据集中的 Lidar 数据,并利用 Python 的 open3d 库进行三维点云可视化。文章提供了从二进制文件中解析 Lidar 数据的具体代码示例,展示了如何将解析后的数据转换为点云并可视化。

nuscenes lidar数据存储格式 :(x,y,z,intensity,ring index)

 

读取 Nuscenes 数据并显示:

import os
import numpy as np
import struct
import open3d

def read_bin_velodyne(path):
    pc_list=[]
    with open(path,'rb') as f:
        content=f.read()
        pc_iter=struct.iter_unpack('fffff',content)
        for idx,point in enumerate(pc_iter):
            pc_list.append([point[0],point[1],point[2]])
    return np.asarray(pc_list,dtype=np.float32)

def main():
    root_dir='data/'
    filename=os.listdir(root_dir)
    file_number=len(filename)

    pcd=open3d.open3d.geometry.PointCloud()

    for i in range(file_number):
        path=os.path.join(root_dir, filename[i])
        print(path)
        example=read_bin_velodyne(path)
        # From numpy to Open3D
        pcd.points= open3d.open3d.utility.Vector3dVector(example)
        open3d.open3d.visualization.draw_geometries([pcd])

if __name__=="__main__":
    main()

 

 

读取Nuscenes一个文件,具体使用方案参考官网及其他材料:

from nuscenes.nuscenes import NuScenes
nusc = NuScenes(version='v1.0-mini', dataroot='/media/guoan/Elements/nuscenes/v1.0-mini', verbose=True)
my_scene = nusc.scene[0]
first_sample_token = my_scene['first_sample_token']
my_sample = nusc.get('sample', first_sample_token)
sensor = 'LIDAR_TOP'
lidar_top_data = nusc.get('sample_data', my_sample['data'][sensor])
print(lidar_top_data)
str='/media/guoan/Elements/nuscenes/v1.0-mini/'+lidar_top_data['filename']
f = open(str, "rb")
data = f.read() #每次输出一个字节
print(data)

 

### 如何使用 Python 读取 nuScenes 数据集的 PCD 文件 为了读取 nuScenes 数据集中存储的点云数据,可以利用 `nuscenes-devkit` 提供的功能来加载特定版本的数据集并访问其中包含的传感器记录。对于具体的 PCD (Point Cloud Data) 文件,则可以通过 NumPy 和其他辅助库来进行解析。 #### 使用 nuscenes-devkit 初始化数据集对象 通过 pip 安装好开发套件之后,初始化一个代表指定版本 nuScenes 数据集合的对象实例是必要的前置条件之一[^1]: ```python from nuscenes.nuscenes import NuScenes # 创建 NuScenes 类的一个实例 nus = NuScenes(version='v1.0-mini', dataroot='/path/to/v1.0-mini', verbose=True) ``` 这里需要注意路径 `/path/to/v1.0-mini` 应替换为实际存放 mini 版本数据的位置。 #### 解析单个 PCD 文件内容 针对单独存在的 .pcd 或者 .bin 格式的 Lidar 扫描结果文件,可以直接打开该文件并将字节流转换成结构化的数组形式以便后续处理。下面给出了一段示范代码用于说明如何完成这一过程[^2]: ```python import numpy as np def read_pcd_bin(file_path): """ 将给定路径下的 pcd/bin 文件转化为numpy array. 参数: file_path (str): 输入PCD/BIN文件的绝对路径 返回: ndarray: 形状为(N,4),每一行为[x,y,z,intensity]. """ # 对于二进制格式(.bin), 直接按照 float32 类型读入整个文件作为连续内存视图, # 并重塑为每五行一组(对应xyzir五个属性), # 只保留前四个分量(xyz坐标加强度). pc = np.frombuffer(open(file_path, "rb").read(), dtype=np.float32).reshape(-1, 5)[:,:4] return pc if __name__ == "__main__": sample_file = "/media/xx/workspace/workspace/nuScenes-mini/samples/LIDAR_TOP/n008-2018-08-01-15-16-36-0400__LIDAR_TOP__1533151607048933.pcd.bin" point_cloud_data = read_pcd_bin(sample_file) print(f"Loaded {point_cloud_data.shape[0]} points.") ``` 上述函数定义了一个简单的接口用来接收任意有效的 lidar 点云文件名,并返回由这些离散采样组成的四维向量列表——即三维空间位置加上反射率信息。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值