Binary 将二进制激光雷达数据(.bin)转换为点云数据(.pcd)格式

Binary 将二进制激光雷达数据(.bin)转换为点云数据(.pcd)格式,binary,point-clouds,lidar,Binary,Point Clouds,Lidar,我有一个用Velodyne-128以.bin格式收集的激光雷达数据。我需要把它转换成pcd格式。我使用NVIDIA Driveworks进行数据处理,但没有工具将激光雷达二进制数据转换为pcd 因此,有没有一种方法可以将二进制激光雷达数据转换为pcd格式?我从github找到一个代码(参考如下所示): 参考: 下面是一个将激光雷达数据(以.bin格式)转换为.pcd格式的代码片段 with open ("lidar_velodyne64.bin", "rb") as f: byte =

我有一个用Velodyne-128以.bin格式收集的激光雷达数据。我需要把它转换成pcd格式。我使用NVIDIA Driveworks进行数据处理,但没有工具将激光雷达二进制数据转换为pcd


因此,有没有一种方法可以将二进制激光雷达数据转换为pcd格式?

我从github找到一个代码(参考如下所示):

参考:


下面是一个将激光雷达数据(以.bin格式)转换为.pcd格式的代码片段

with open ("lidar_velodyne64.bin", "rb") as f:
    byte = f.read(size_float*4)
    while byte:
        x,y,z,intensity = struct.unpack("ffff", byte)
        list_pcd.append([x, y, z])
        byte = f.read(size_float*4)
np_pcd = np.asarray(list_pcd)
pcd = o3d.geometry.PointCloud()
v3d = o3d.utility.Vector3dVector
pcd.points = v3d(np_pcd)
根据示例,您可以将其保存到文件中,如下所示:

import open3d as o3d
o3d.io.write_point_cloud("copy_of_fragment.pcd", pcd)

尽管所有其他解决方案可能都是正确的,但我一直在寻找一个简单的仅限numpy的版本。这是:

import numpy as np
import open3d as o3d

# Load binary point cloud
bin_pcd = np.fromfile("lidar_velodyne64.bin", dtype=np.float32)

# Reshape and drop reflection values
points = bin_pcd.reshape((-1, 4))[:, 0:3]

# Convert to Open3D point cloud
o3d_pcd = o3d.geometry.PointCloud(o3d.utility.Vector3dVector(points))

# Save to whatever format you like
o3d.io.write_point_cloud("pointcloud.pcd", o3d_pcd)
import numpy as np
import open3d as o3d

# Load binary point cloud
bin_pcd = np.fromfile("lidar_velodyne64.bin", dtype=np.float32)

# Reshape and drop reflection values
points = bin_pcd.reshape((-1, 4))[:, 0:3]

# Convert to Open3D point cloud
o3d_pcd = o3d.geometry.PointCloud(o3d.utility.Vector3dVector(points))

# Save to whatever format you like
o3d.io.write_point_cloud("pointcloud.pcd", o3d_pcd)