pcl ndt,koide3/ndt_omp, autoware ndt_gpu的效率对比


转载自,防止链接失效做个备份:https://zhuanlan.zhihu.com/p/48853182

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
  1. 在.cpp文件中需要有支持PCL ndt的头文件包含(同pcl ndt),并需增加以下头文件包含
#include <pclomp/ndt_omp.h>
  1. 声明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中增加以下代码

f

ind_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 ()
  1. 在.cpp文件中增加以下头文件包含
#ifdef CUDA_FOUND

#include <ndt_gpu/NormalDistributionsTransform.h>

#endif
  1. 声明gpu_ndt对象,并用它来执行align(),具体可参照样例程序 CPFL/Autoware

参数设置:

普通参数配置 resolution epsilon maxIterations stepSize都和pcl ndt相同。

测试数据:

同pcl ndt。

测试结果:

配准时间:190毫秒。

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值