0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

CUDA-NDT的定义与使用实例

NVIDIA英伟达企业解决方案 来源:NVIDIA英伟达企业解决方案 作者:NVIDIA英伟达企业解 2022-07-08 09:11 次阅读

随着自主机器的发展,我们可以在生活中经常看到自主机器的应用。有传统应用的仓库工厂 AMR、机械臂、银行酒店里面的服务机器人、家庭机器人、无人物流车、自主矿卡等等。不同的自主机器,软件架构的方案也不一样,但核心的模块定位、导航、感知、控制等都是相通的。

定位模块是自主机器最核心的模块之一,定位又包括全局定位和局部定位,对于自主机器,其精度需要达到厘米级别。

本文我们将讨论全局定位,即确定自主机器在全局下的位置。传统的低速自主机器,类似于 AMR 等,其采用的定位方式通常以 SLAM(Simultaneous Localization and Mapping)的方法进行同时建图和定位,但是该方法实现代价高、难度大,并不适用于室外自主机器——类似于无人物流车、园区接驳车等的实时高精度定位需求。这些室外自主机器行驶速度快、距离远、环境复杂,使得 SLAM 的精度下降,同时远距离的行驶将导致实时构建的地图偏移过大。因此,如果在已有高精度的全局地图的情况下进行自主机器的定位,将极大的简化该问题。

因此,将问题分为独立的两部分:建图 Mapping 和定位 Matching。NDT 是一种点云配准算法,可同时用于点云的建图和定位。

CUDA-NDT

正态分布变换算法(NormalDistributions Transform, NDT)ICP 算法的功能一致,即,用于计算两帧点云数据之间的坐标变换矩阵,从而能够使不同的坐标下的点云数据合并到同一个坐标系统中。不同的是 NDT 算法对初值不敏感,且不需要进行对应点的特征计算,所以速度较快。NDT 算法使用应用于 3D 点统计模型的标准优化技术来确定两个点云之间最可能的配准。

NDT 算法和 ICP 算法可以结合使用,以提高配准精度和速度。首先,NDT 算法可用于粗配准,得到转换参数;然后使用 ICP 算法结合参数进行精细配准。为了改进 NDT 算法在 NVIDIA Jetson 上的性能,我们推荐使用基于 CUDA 加速的 CUDA-NDT。

使用CUDA-NDT

以下是 CUDA-NDT 的使用实例。我们需要初始化相关的类对象,设置相关的参数,并调用接口函数。

cudaNDT ndtTest(nPCountM, nQCountM, stream);ndtTest.setInputSource(source);ndtTest.setInputTarget(target);ndtTest.setResolution(resolution);ndtTest.setMaximumIterations(nr_iterations);ndtTest.setTransformationEpsilon(epsilon);ndtTest.setStepSize(step_size);    ndtTest.ndt(cloud_source, nPCount,               cloud_target, nQCount, guess,transformation_matrix,stream);

CUDA-NDT 计算的输出是 transformation_matrix,代表的含义如下:

  • 源点云 (P)* transformation_matrix = 目标坐标系的点云 (Q)


因为激光类型的输出点云的数量为固定值,所以 CUDA-NDT 在输出化的时候,要求输入两帧点云的最大数量,从而分配计算资源。

class cudaNDT{public:    /*       nPCountM and nQCountM are the maximum of count for input clouds       They are used to pre-allocate memory.    */    cudaNDT(int nPCountM, int nQCountM, cudaStream_t stream = 0);    ~cudaNDT(void);void setInputSource (void *source);void setInpuTarget (void *target);void setResolution (float resolution);void setMaximumIterations (int nr_iterations);void setTransformationEpsilon (double epsilon);void setStepSize (double step_size);    /*    cloud_target = transformation_matrix * cloud_source    When the Epsilon of transformation_matrix is less than threshold,    the function will return transformation_matrix.    Input:        cloud_source, cloud_target: data pointer for points cloud        nPCount: the points number of cloud_source        nQCount: the points number of cloud_target        guess: initial guess of transformation_matrix        stream: CUDA stream    Output:        transformation_matrix: rigid transformation matrix    */
    void ndt(float *cloud_source, int nPCount,            float *cloud_target, int nQCount,            float *guess, void *transformation_matrix,            cudaStream_t stream = 0);    void *m_handle = NULL;};

经过 CUDA 加速的 NDT 速度对比微加速版本提升了 4 倍左右,请参考下表的性能对比,经过 NDT 匹配的点云效果对比请参考图 1 和图 2。

CUDA-NDT

PCL-NDT

count of

pointscloud

7000

7000

cost time(ms)

34.7789

136.858

fitness_score

0.538

0.540

CUDA-NDT 与 PCL-NDT 的性能对比

开始使用CUDA-NDT

我们希望通过本文介绍使用 CUDA-NDT 从而获得更好的点云注册性能。

因为 NDT 在 NVIDIA Jetson 上无法使用 CUDA 进行点云的加速处理,所以我们开发了基于 CUDA 的 CUDA-NDT。

复制链接,获得相关库和实例代码。

https://github.com/NVIDIA-AI-IOT/cuda-pcl/tree/main/cuda-ndt

审核编辑:汤梓红


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • NVIDIA
    +关注

    关注

    14

    文章

    4595

    浏览量

    101747
  • NDT
    NDT
    +关注

    关注

    0

    文章

    25

    浏览量

    14854
  • CUDA
    +关注

    关注

    0

    文章

    119

    浏览量

    13462

原文标题:基于CUDA加速的自主机器SLAM技术——CUDA-NDT

文章出处:【微信号:NVIDIA-Enterprise,微信公众号:NVIDIA英伟达企业解决方案】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Keil使用AC6编译提示CUDA版本过高怎么解决?

    \' ArmClang: warning: Unknown CUDA version 10.2. Assuming the latest supported version 10.1
    发表于 04-11 07:56

    深入浅出理解PagedAttention CUDA实现

    vLLM 中,LLM 推理的 prefill 阶段 attention 计算使用第三方库 xformers 的优化实现,decoding 阶段 attention 计算则使用项目编译 CUDA 代码实现。
    的头像 发表于 01-09 11:43 587次阅读
    深入浅出理解PagedAttention <b class='flag-5'>CUDA</b>实现

    什么是CUDA?谁能打破CUDA的护城河?

    在最近的一场“AI Everywhere”发布会上,Intel的CEO Pat Gelsinger炮轰Nvidia的CUDA生态护城河并不深,而且已经成为行业的众矢之的。
    的头像 发表于 12-28 10:26 1893次阅读
    什么是<b class='flag-5'>CUDA</b>?谁能打破<b class='flag-5'>CUDA</b>的护城河?

    OpenCV4.8 CUDA编程代码教程

    OpenCV4支持通过GPU实现CUDA加速执行,实现对OpenCV图像处理程序的加速运行,当前支持加速的模块包括如下。
    的头像 发表于 12-05 09:56 453次阅读
    OpenCV4.8 <b class='flag-5'>CUDA</b>编程代码教程

    OpenCV4.8+CUDA+扩展模块支持编译指南

    OpenCV4.8+CUDA+扩展模块支持编译指南
    的头像 发表于 11-30 16:45 373次阅读
    OpenCV4.8+<b class='flag-5'>CUDA</b>+扩展模块支持编译指南

    PID算法详解及实例分析

    PID算法详解及实例分析#include using namespace std;struct _pid{   float SetSpeed; //定义设定值   float ActualSpeed
    发表于 11-09 16:33 0次下载

    CSON使用实例定义数据模型

    CSON使用实例 声明结构体: /** 项目结构体 */ struct project{ int id ; char *name;}; /** 仓库结构体 */ struct hub{ int id
    的头像 发表于 10-07 11:10 1075次阅读

    CUDA核心是什么?CUDA核心的工作原理

    CUDA核心(Compute Unified Device Architecture Core)是NVIDIA图形处理器(GPU)上的计算单元,用于执行并行计算任务。每个CUDA核心可以执行单个线程的指令,包括算术运算、逻辑操作和内存访问等。
    发表于 09-27 09:38 4892次阅读
    <b class='flag-5'>CUDA</b>核心是什么?<b class='flag-5'>CUDA</b>核心的工作原理

    在线研讨会 | 专家中文解读:即将上市的 CUDA Toolkit 新特性、新功能

    基于 NVIDIA CUDA 架构师 Stephen Jones 近期的 CUDA 技术简报(Accelerated Computing / CUDA Technical Briefing),开发者
    的头像 发表于 09-22 18:45 332次阅读
    在线研讨会 | 专家中文解读:即将上市的 <b class='flag-5'>CUDA</b> Toolkit 新特性、新功能

    解析优化的调度逻辑和cuda实现

    的梯度上,所有这些都在一个操作中完成,可以避免多次访问global memory提升算子的带宽。下面解析一下这个优化的调度逻辑和cuda实现。 https://github.com/BBuf
    的头像 发表于 08-24 11:15 715次阅读

    算力芯片的cuda有何难点和优点

    CUDA之所以会成为算力芯片硬件厂商必须要认真考虑的一个选择,最直接的原因,是其已经实现了与算法客户的强绑定。众多算法工程师已经习惯了CUDA提供的工具库及其编程语言,向外迁移总是会存在不习惯的问题。
    发表于 08-16 12:35 589次阅读
    算力芯片的<b class='flag-5'>cuda</b>有何难点和优点

    CUDA与Jetson Nano:并行Pollard Rho测试

    电子发烧友网站提供《CUDA与Jetson Nano:并行Pollard Rho测试.zip》资料免费下载
    发表于 06-15 09:30 0次下载
    <b class='flag-5'>CUDA</b>与Jetson Nano:并行Pollard Rho测试

    周三研讨会预告 | 从 CUDA 到 CV-CUDA:如何为自己定制高效的 CV 任务算子

    CUDA (Compute Unified Device Architecture)编程模型 ,利用 GPU 强大的并行计算能力,为计算机视觉任务带来了前所未有的加速效果。 为了能让 CV
    的头像 发表于 06-13 20:55 284次阅读
    周三研讨会预告 | 从 <b class='flag-5'>CUDA</b> 到 CV-<b class='flag-5'>CUDA</b>:如何为自己定制高效的 CV 任务算子

    介绍CUDA编程模型及CUDA线程体系

    CUDA 编程模型主要有三个关键抽象:层级的线程组,共享内存和栅同步(barrier synchronization)。
    的头像 发表于 05-19 11:32 1144次阅读
    介绍<b class='flag-5'>CUDA</b>编程模型及<b class='flag-5'>CUDA</b>线程体系

    GPU平台生态,英伟达CUDA和AMD ROCm对比分析

    CUDA 除了是并行计算架构外,还是 CPU 和 GPU 协调工作的通用语言。在CUDA 编程模型中,主要有 Host(主机)和 Device(设备)两个概念,Host 包含 CPU 和主机内存,Device 包含 GPU 和显存
    的头像 发表于 05-18 09:57 1695次阅读
    GPU平台生态,英伟达<b class='flag-5'>CUDA</b>和AMD ROCm对比分析