Skip to main content

Analyze large datasets of point clouds recorded over time in an efficient way

Project description

Analyze large datasets of point clouds recorded over time in an efficient way.

test status test coverage https://github.com/virtual-vehicle/pointcloudset/actions/workflows/doc.yml/badge.svg Docker PyPi badge PyPi badge JOSS badge code style black

Code | Documentation

Features

  • Handles point clouds over time

  • Building complex pipelines with a clean and maintainable code

newpointcloud = pointcloud.limit("x",-5,5).filter("quantile","reflectivity", ">",0.5)
  • Apply arbitrary functions to datasets of point clouds

def isolate_target(frame: PointCloud) -> PointCloud:
   return frame.limit("x",0,1).limit("y",0,1)

def diff_to_pointcloud(pointcloud: PointCloud, to_compare: PointCloud) -> PointCloud:
   return pointcloud.diff("pointcloud", to_compare)

result = dataset.apply(isolate_target).apply(diff_to_pointcloud, to_compare=dataset[0])
  • Includes powerful aggregation method agg similar to pandas

dataset.agg(["min","max","mean","std"])
  • Support for large files with lazy evaluation and parallel processing

https://raw.githubusercontent.com/virtual-vehicle/pointcloudset/master/images/dask.gif
  • Support for numerical data per point (intensity, range, noise …)

  • Interactive 3D visualisation

https://raw.githubusercontent.com/virtual-vehicle/pointcloudset/master/images/tree.gif
  • High level processing based on dask, pandas, open3D and pyntcloud

  • Docker image is available

  • Optimised - but not limited to - automotive lidar

  • Directly read ROS files and many pointcloud file formats

  • A command line tool to convert ROS 1 & 2 files

Use case examples

  • Post processing and analytics of a lidar dataset recorded by ROS

  • A collection of multiple lidar scans from a terrestrial laser scanner

  • Comparison of multiple point clouds to a ground truth

  • Analytics of point clouds over time

  • Developing algorithms on a single frame and then applying them to huge datasets

Installation with pip

Install python package with pip:

pip install pointcloudset

Installation with Docker

The easiest way to get started is to use the pre-build docker tgoelles/pointcloudset or use tgoelles/pointcloudset_base to get a container with all dependencies and install pointcloudset there.

Quickstart

from pointcloudset import Dataset, PointCloud
from pathlib import Path
import urllib.request

urllib.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.

CLI to convert ROS1 and ROS2 files: pointcloudset convert

The 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.bag
https://raw.githubusercontent.com/virtual-vehicle/pointcloudset/master/images/cli_demo.gif

You can view PointCloud2 messages with

pointcloudset topics test.bag

Citation and contact

orcid Thomas Gölles email: thomas.goelles@v2c2.at

Please cite our JOSS paper if 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}
}

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pointcloudset-0.9.0.tar.gz (34.8 kB view hashes)

Uploaded Source

Built Distribution

pointcloudset-0.9.0-py3-none-any.whl (42.1 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page