• 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毫秒。

  • 相关阅读:
    urllib模块常用方法
    python Apscheduler持久化
    Java 递归(深度优先)寻找迷宫最短路径
    Java 访问修饰符
    Java 多态的一道例题
    性能测试基础(二)
    Update DataReader
    VS.Php Beta 4
    Free ASP.NET Web Development Tool
    使用 Microsoft .NET 的企业解决方案模式
  • 原文地址:https://www.cnblogs.com/long5683/p/13739454.html
Copyright © 2020-2023  润新知