Package: pointcloudset
Analyze large datasets of point clouds recorded over time in an efficient way.Code|DocumentationFeaturesHandles point clouds over timeBuilding complex pipelines with a clean and maintainable codenewpointcloud=pointcloud.limit("x",-5,5).filter("quantile","reflectivity",">",0.5)Apply arbitrary functions to datasets of point cloudsdefisolate_target(frame:PointCloud)->PointCloud:returnframe.limit("x",0,1).limit("y",0,1)defdiff_to_pointcloud(pointcloud:PointCloud,to_compare:PointCloud)->PointCloud:returnpointcloud.diff("pointcloud",to_compare)result=dataset.apply(isolate_target).apply(diff_to_pointcloud,to_compare=dataset[0])Includes powerful aggregation methodaggsimilar to pandasdataset.agg(["min","max","mean","std"])Support for large files with lazy evaluation and parallel processingSupport for numerical data per point (intensity, range, noise …)Interactive 3D visualisationHigh level processing based on dask, pandas, open3D and pyntcloudDocker image is availableOptimised - but not limited to - automotive lidarDirectly read ROS files and many pointcloud file formatsA command line tool to convert ROS 1 & 2 filesUse case examplesPost processing and analytics of a lidar dataset recorded by ROSA collection of multiple lidar scans from a terrestrial laser scannerComparison of multiple point clouds to a ground truthAnalytics of point clouds over timeDeveloping algorithms on a single frame and then applying them to huge datasetsInstallation with pipInstall python package with pip:pip install pointcloudsetInstallation with DockerThe easiest way to get started is to use the pre-build dockertgoelles/pointcloudsetor usetgoelles/pointcloudset_baseto get a container with all dependencies and install pointcloudset there.QuickstartfrompointcloudsetimportDataset,PointCloudfrompathlibimportPathimporturllib.requesturllib.request.urlretrieve("https://github.com/virtual-vehicle/pointcloudset/raw/master/tests/testdata/test.bag","test.bag")urllib.request.urlretrieve("https://github.com/virtual-vehicle/pointcloudset/raw/master/tests/testdata/las_files/test_tree.las","test_tree.las")dataset=Dataset.from_file(Path("test.bag"),topic="/os1_cloud_node/points",keep_zeros=False)pointcloud=dataset[1]tree=PointCloud.from_file(Path("test_tree.las"))tree.plot("x",hover_data=True)This produces the plot from the animation above.Read thehtml documentation.Have a look at thetutorial notebooksin the documentation folderFor even more usage examples you can have a look at the testsCLI to convert ROS1 and ROS2 files: pointcloudset convertThe package includes a powerful CLI to convert pointclouds in ROS1 & 2 files into many formats like pointcloudset, csv, las and many more.
It is capable of handling both mcap and db3 ROS files.pointcloudset convert --output-format csv --output-dir converted_csv test.bagYou can view PointCloud2 messages withpointcloudset topics test.bagComparison to related packagesROS-  bagfiles can contain many point clouds from different sensors.
The downside of the format is that it is only suitable for serial access and not well suited for data analytics and post processing.pyntcloud- Only for single point clouds. This package is used as the basis for the
PointCloud object.open3d- Only for single point clouds. Excellent package, which is used for some
methods on the PointCloud.pdal- Works also with pipelines on point clouds but is mostly focused on single point cloud processing.
Pointcloudset is purely in python and based on pandas DataFrames. In addition pointcloudset works in parallel to process large datasets.Citation and contactThomas Göllesemail:thomas.goelles@v2c2.atPlease cite ourJOSS paperif you use pointcloudset.@article{Goelles2021,doi={10.21105/joss.03471},url={https://doi.org/10.21105/joss.03471},year={2021},publisher={The Open Journal},volume={6},number={65},pages={3471},author={Thomas Goelles and Birgit Schlager and Stefan Muckenhuber and Sarah Haas and Tobias Hammer},title={`pointcloudset`: Efficient Analysis of Large Datasets of Point Clouds Recorded Over Time},journal={Journal of Open Source Software}}