In [3]: pypcd.point_cloud_from_path("./1685500241500.pcd")
---------------------------------------------------------------------------
AssertionError Traceback (most recent call last)
Input In [3], in ()
----> 1 pypcd.point_cloud_from_path("./1685500241500.pcd")
File ~/.local/lib/python3.9/site-packages/pypcd/pypcd.py:295, in point_cloud_from_path(fname)
292 """ load point cloud in binary format
293 """
294 with open(fname, 'rb') as f:
--> 295 pc = point_cloud_from_fileobj(f)
296 return pc
File ~/.local/lib/python3.9/site-packages/pypcd/pypcd.py:288, in point_cloud_from_fileobj(f)
285 else:
286 print('DATA field is neither "ascii" or "binary" or\
287 "binary_compressed"')
--> 288 return PointCloud(metadata, pc_data)
File ~/.local/lib/python3.9/site-packages/pypcd/pypcd.py:612, in PointCloud.__init__(self, metadata, pc_data)
610 self.__dict__.update(metadata)
611 self.pc_data = pc_data
--> 612 self.check_sanity()
File ~/.local/lib/python3.9/site-packages/pypcd/pypcd.py:625, in PointCloud.check_sanity(self)
623 md = self.get_metadata()
624 assert(_metadata_is_consistent(md))
--> 625 assert(len(self.pc_data) == self.points)
626 assert(self.width*self.height == self.points)
627 assert(len(self.fields) == len(self.count))
AssertionError:
|
可以看到报错说是数和pc_data不一样.
我的点云格式是这样的.
显然, pc_data的长度不合理. 不应该是1.
接下来看一下pypcd里面的 self.pc_data和self.points是如何定义的.
而传进来的是从这里.
所以其实就是第255行的问题. 不该用 metadata[“width”]
因此这样改了之后就可以读了.
当然这个问题, 也可以直接把点云的header手动改一下, 即把 width和height的值互换一下. 这样就不用改pypcd的源码. 但是改源码更合适一些. 不同的点云, 有的是width等于点数,有的是height等于点数.