1. pcl ndt

簡介:

pcl官方提供的ndt。

環境需求:

1) 需要編譯安裝pcl-1.8.1或以上版本。

使用方法:

參照官方樣常式序 Point Cloud Library (PCL)

參數設置:

普通參數配置

resolution=1.0 // ndt網格大小為1立方米

epsilon=0.01 // 精度為1釐米

maxIterations=100 // 最大迭代次數

stepSize=0.1 // 步長

測試數據:

2幀點雲,降採樣後都是1萬個點。

測試結果:

配準時間:3.98秒。

2. ndt_omp

簡介:

koide3/ndt_omp。繼承自pcl ndt,並做了多線程等優化。參考:koide3/ndt_omp

環境需求:

1) 需要編譯安裝pcl-1.8.1或以上版本。因為ndt_omp是繼承自pcl ndt的。

使用方法:

1) 將include/pclomp目錄複製到你的include目錄下,將src/pclomp目錄複製到你的src目錄下。

2) 在CMakeLists.txt中需要有支持PCL的代碼(同pcl ndt),並需增加以下代碼

find_package(OpenMP)

if (OPENMP_FOUND)

set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")

set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")

endif()

include_directories(include)

add_library(ndt_omp src/pclomp/voxel_grid_covariance_omp.cpp src/pclomp/ndt_omp.cpp src/pclomp/gicp_omp.cpp)

add_dependencies(align ndt_omp) #這裡的align改成你的app

target_link_libraries(align ${PCL_LIBRARIES} ndt_omp) #這裡的align改成你的app

3) 在.cpp文件中需要有支持PCL ndt的頭文件包含(同pcl ndt),並需增加以下頭文件包含

#include <pclomp/ndt_omp.h>

4) 聲明ndt_omp對象,並用它來執行align(),具體可參照官方樣常式序align.cpp。

pclomp::NormalDistributionsTransform<pcl::PointXYZ, pcl::PointXYZ>::Ptr ndt_omp(new pclomp::NormalDistributionsTransform<pcl::PointXYZ, pcl::PointXYZ>());

參數設置:

普通參數配置 resolution epsilon maxIterations stepSize都和pcl ndt相同。

注意:stepSize=0.1不要變它。改成0.4會在直線行駛時加快匹配速度,但在轉彎時容易匹配錯誤。

獨特參數配置

sear_methods=pclomp::DIRECT7 // 這個最快最好(其他的參數都是有特殊場景的用途)

setNumTreads(omp_get_max_threads()) // 使用能使用到的最多的線程(線程越多越快)

測試數據:

同pcl ndt。

測試結果:

配準時間:112毫秒。

3. ndt_gpu

簡介:

CPFL/Autoware中間的一個獨立子模塊。參考:CPFL/Autoware

環境需求:

1) 需要編譯安裝cuda9.0

注意,用下列方法檢測自己安裝的是否正確:

查看GPU型號 lspci | grep -i nvidia

查看NVIDIA驅動版本 sudo dpkg --list | grep nvidia-*

產看CUDA版本號 nvcc --version 得到9.0

使用方法:

1) 先下載Autoware,並將ndt_gpu這個獨立模塊編譯通過(注意要編譯release的版本)。得到lib_ndt_gpu.so(release版本1.1MB)。

2) 將ndt_gpu/inlude目錄複製到你的include目錄下,將lib_ndt_gpu.so複製到你的lib目錄下。

3) 在CMakeLists.txt中增加以下代碼

find_package(CUDA)

if (CUDA_FOUND)

add_definitions(-DCUDA_FOUND)

include_directories(include)

link_directories(lib)

endif ()

...

if (CUDA_FOUND)

target_link_libraries(align ndt_gpu) #這裡的align改成你的app

endif ()

3) 在.cpp文件中增加以下頭文件包含

#ifdef CUDA_FOUND

#include <ndt_gpu/NormalDistributionsTransform.h>

#endif

4) 聲明gpu_ndt對象,並用它來執行align(),具體可參照樣常式序 CPFL/Autoware

參數設置:

普通參數配置 resolution epsilon maxIterations stepSize都和pcl ndt相同。

測試數據:

同pcl ndt。

測試結果:

配準時間:190毫秒。

推薦閱讀:

相關文章