# cuPCL
**Repository Path**: superpig2021/cuPCL
## Basic Information
- **Project Name**: cuPCL
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-05-25
- **Last Updated**: 2025-05-25
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# cuPCL
cuPCL has some libraries used to process points cloud with CUDA and some samples for their usage.
There are several subfolders in the project and every subfolder has:
1. lib implemented by CUDA
2. Sample code showing the lib usage and checking the perf and accuracy by comparing its output with PCL's
To get started, follow the instructions below.
**Xavier, Orin, and Linux x86 are supported(For Jetpack 4.x, Jetpack 5.x, and Linux x86_64 library, please check the respective branch).**
If you run into any issues please [let us know](../../issues).
## Getting Started
To get started, follow these steps.
### Step 1 - Install Dependencies
Install PCL (Eigen included)
```
$sudo apt-get update
$sudo apt-get install libpcl-dev
```
### Step 2 - Build
Enter any subfolder and then
```
make
```
### Step 3 - Run
1. Please boost CPU and GPU firstly
```
sudo nvpmodel -m 0
sudo jetson_clocks
```
2. Usage:
```
./demo [*.pcd]
```
## How to check the Version of the Lib
```
$ strings lib* | grep version | grep lib
lib* version: 1.0 Jun 2 2019 09:30:19
```
## Test Enviroment
```
Jetson Xavier AGX 8GB
Jetpack 4.4.1
CUDA 10.2
PCL 1.8
Eigen 3
```
## Functions List
### cuICP
This project provides:
1. lib for Icp implemented by CUDA
2. Sample code showing the lib usage and checking the perf and accuracy by comparing its output with PCL's
3. two point clounds: test_P.pcd and test_Q.pcd that both having 7000 points
### cuFilter
The project provides:
1. lib for Filter implemented by CUDA
2. Sample code showing the lib usage and checking the perf and accuracy by comparing its output with PCL's
3. A point clound: sample.pcd which has 119978 points
NOTE: Now it supports two kinds of filters: PassThrough and VoxelGrid.
### cuSegmentation
This package provides:
1. lib for Segmentation implemented by CUDA
2. Sample code showing the lib usage and checking the perf and accuracy by comparing its output with PCL's
3. A point clound: sample.pcd which has 119978 points
NOTE: Now it just supports SAC_RANSAC + SACMODEL_PLANE.
### cuOctree
This package provides:
1. lib for Octree implemented by CUDA
2. Sample code showing the lib usage and checking the perf and accuracy by comparing its output with PCL's
3. A point clound: sample.pcd which has 119978 points
NOTE: Now it just supports Radius Search and Approx Nearest Search
### cuCluster
This package provides:
1. lib for Cluster implemented by CUDA
2. Sample code showing the lib usage and checking the perf and accuracy by comparing its output with PCL's
NOTE:
1. Cluster can be used to extract objects from points cloud after road plane was removed by Segmentation.
2. The sample will use a PCD(sample.pcd) file which had removed road plane.
### cuNDT
This package provides:
1. lib for NDT implemented by CUDA
2. Sample code showing the lib usage and checking the perf and accuracy by comparing its output with PCL's
3. two point clounds: test_P.pcd and test_Q.pcd that both having 7000 points
## Performance Comparison
### cuICP
||GPU|CPU-GICP|CPU-ICP|
|---|---|----|---|
|count of points cloud|7000|7000|7000|
|maximum of iterations|20|20|20|
|cost time(ms)|43.3|652.8|7746.0|
|fitness_score(the lower the better)|0.514|0.525|0.643|
### cuFilter
#### Pass Through
||GPU|CPU|
|-|-|-|
|count of points cloud|11w+|11w+|
|down,up FilterLimits|(-0.5, 0.5)|(-0.5, 0.5)|
|limitsNegative|false|false|
|Points selected|5110|5110|
|cost time(ms)|0.660954|2.97487|
#### VoxelGrid
||GPU|CPU|
|-|-|-|
|count of points cloud|11w+|11w+|
|LeafSize|(1,1,1)|(1,1,1)|
|Points selected|3440|3440|
|cost time(ms)|3.12895|7.26262|
### cuSegmentation
||GPU|CPU|
|-|-|-|
|segment by time(ms)|14.9346|69.6264|
|model coefficients|{-0.00273056, 0.0425288, 0.999092, 1.75528}|{-0.00273045, 0.0425287, 0.999092, 1.75528}|
|find points|9054|9054|
### cuOctree
||GPU|CPU|
|-|-|-|
|count of points cloud|119978|119978|
|down,up FilterLimits|(0.0,1.0)|(0.0,1.0)|
|limitsNegative|false|false|
|Points selected|16265|16265|
|cost time(ms)|0.589752|2.82811|
### cuCluster
||GPU|CPU|
|-|-|-|
|Count of points cloud|17w+|17w+|
|Cluster cost time(ms)|10.3122|4016.85|
### cuNDT
||GPU|CPU|
|-|-|-|
|count of points cloud|7000|7000|
|cost time(ms)|34.7789|136.858|
|fitness_score(the lower the better)|0.538|0.540|
## Official Blog