ndt_omp

repository·master·Indexed 21 days ago

https://github.com/koide3/ndt_omp

A high-performance, multi-threaded, and SSE-optimized implementation of the Normal Distributions Transform (NDT) and Generalized Iterative Closest Point (GICP) algorithms derived from the Point Cloud Library (PCL). Designed for ROS1, it offers multiple neighbor voxel search methods including KDTREE, DIRECT7, and DIRECT1 to balance accuracy and speed.

Tokens
736
Snippets
1
Records
3
Agent score
25%

What's inside ndt_omp

  1. Overview of ndt_omp

    master

    ndt_omp is an OpenMP-boosted implementation of the Normal Distributions Transform (NDT) and Generalized Iterative Closest Point (GICP) algorithms, derived from the Point Cloud Library (PCL).

    Key features include:

    • Performance: Modified to be SSE-friendly and multi-threaded, capable of running up to 10 times faster than the original pcl::NDT.
    • Compatibility: This specific repository is designed for ROS1. For ROS2 or non-ROS projects, use the following forks:
  2. Choose a neighbor voxel search method in ndt_omp

    master

    The package implements several methods for neighbor voxel search. Choosing the right method depends on your requirements for accuracy versus speed:

    MethodDescriptionRecommendation
    pclomp::KDTREEProduces results identical to the original pcl::NDT.Use for maximum compatibility with PCL.
    pclomp::DIRECT7Faster and stable.Recommended for general use.
    pclomp::DIRECT1Extremely fast registration but potentially unstable.Use only when speed is the absolute priority.
  3. Benchmark results for ndt_omp

    master

    Performance benchmarks conducted on a Core i7-6700K comparing pcl::NDT against various pclomp::NDT configurations. Results show significant speedups when using multi-threading and the DIRECT search methods.

    $ roscd ndt_omp/data
    $ rosrun ndt_omp align 251370668.pcd 251371071.pcd
    --- pcl::NDT ---
    single : 282.222[msec]
    10times: 2921.92[msec]
    fitness: 0.213937
    
    --- pclomp::NDT (KDTREE, 1 threads) ---
    single : 207.697[msec]
    10times: 2059.19[msec]
    fitness: 0.213937
    
    --- pclomp::NDT (DIRECT7, 1 threads) ---
    single : 139.433[msec]
    10times: 1356.79[msec]
    fitness: 0.214205
    
    --- pclomp::NDT (DIRECT1, 1 threads) ---
    single : 34.6418[msec]
    10times: 317.03[msec]
    fitness: 0.208511
    
    --- pclomp::NDT (KDTREE, 8 threads) ---
    single : 54.9903[msec]
    10times: 500.51[msec]
    fitness: 0.213937
    
    --- pclomp::NDT (DIRECT7, 8 threads) ---
    single : 63.1442[msec]
    10times: 343.336[msec]
    fitness: 0.214205
    
    --- pclomp::NDT (DIRECT1, 8 threads) ---
    single : 17.2353[msec]
    10times: 100.025[msec]
    fitness: 0.208511