Giter VIP home page Giter VIP logo

yevgeniyengineer / lidar-processing Goto Github PK

View Code? Open in Web Editor NEW
20.0 1.0 3.0 243.71 MB

LiDAR Processing Pipeline. Segmentation: "Fast Segmentation of 3D Point Clouds: A Paradigm on LiDAR Data for Autonomous Vehicle Applications". Clustering: "Fast Euclidean Clustering for Point Cloud Segmentation". Polygonization: "Efficient Generation of Simple Polygons for Characterizing the Shape of a Set of Points in the Plane".

License: GNU General Public License v3.0

CMake 1.73% C++ 97.78% Shell 0.49%

lidar-processing's Introduction

LiDAR Processing Pipeline

Overview

The LiDAR Processing Pipeline showcases classical point cloud data processing techniques, leveraging libraries such as PCL and ROS2 (Humble). While PCL data structures are extensively utilized throughout the pipeline stages, efforts have been made to minimize reliance on third-party algorithms by developing most of the required data structures in-house. However, a complex algorithm like Delaunay triangulation is integrated using the Delaunator library, which has been modified to enable the construction of a concave hull from the triangulation. This pipeline efficiently performs ground segmentation, obstacle clustering, and polygonization, and it presents the results through real-time visualization in RViz2. The Dataloader node publishes sensor_msgs::msg::PointCloud2 data at regular intervals (10 Hz), thereby constraining the processing pipeline to a 100 ms processing window to simulate real-time operation.

pipeline

complete_pipeline

Pipeline Stages

Ground Segmentation

The algorithm is based on the research paper "Fast Segmentation of 3D Point Clouds: A Paradigm on LiDAR Data for Autonomous Vehicle Applications". It begins by subdividing the point cloud into multiple segments along the x-direction. Initially, seed points are randomly chosen to estimate the ground plane within each segment. This process involves an iterative procedure where the ground plane fit is refined within each segment through successive iterations.

segmentation

Obstacle Clustering

To perform clustering on segmented LiDAR points I used the adaptation of Fast Euclidean Clustering. This is a hierarchical clustering algorithm designed for efficient clustering of cartesian point cloud data. The algorithm starts by partitioning the dataset into smaller subsets. These subsets are then progressively merged based on a predefined threshold distance, which determines if two subsets are close enough to be considered part of the same cluster.

clustering

Polygonization

The obstacle cloud clusters are post-processed further, finding simplified polygon shapes around 3D point clusters. Polygonization is based on finding the concave hull simplification. The method relies on the efficient construction of concave polygons outlined in Duckham et.al "Efficient generation of simple polygons for characterizing the shape of a set of points in the plane". The concave algorithm begins with Delaunay triangulation, using it as a foundational step for refining the perimeter of the convex outline to better conform to the actual spread of points, preserving the 2.5D flattened cluster shape.

polygonization

Setup

Dependencies:

  • ROS2 (Humble or compatible versions of ROS2)
  • PCL
  • Eigen3
  • TBB

To build the project, navigate to the project directory and run ./build.sh to compile.

Run ./launch.sh to start the processing nodes and visualization tools.

Usage

Data from the data/ directory is read and published on the pointcloud topic at a frequency of 10 Hz in sensor frame (without applying coordinate transforms). The processing node subscribes to the topic and performs processing steps within the same thread, publishing visualizable messages on several topics, including ground_pointcloud, obstacle_pointcloud, clustered_pointcloud, and polygonization.

lidar-processing's People

Contributors

yevgeniyengineer avatar ysimonov avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

lidar-processing's Issues

Kitti Dataset Data Loader

Want to be able to load standard Kitti dataset, including camera, lidar and gnss, imu sensor data to be able to start working on camera - lidar fusion pipeline.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.