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

    文章

    5496

    浏览量

    109085
  • NDT
    NDT
    +关注

    关注

    0

    文章

    26

    浏览量

    15204
  • CUDA
    +关注

    关注

    0

    文章

    125

    浏览量

    14402

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    RV生态又一里程碑:英伟达官宣CUDA将兼容RISC-V架构!

    电子发烧友网报道(文/梁浩斌)英伟达生态护城河CUDA,从最初支持x86、Power CPU架构,到2019年宣布支持Arm CPU,不断拓展在数据中心的应用生态。 在2019年至今的六年
    的头像 发表于 07-19 00:04 6147次阅读
    RV生态又一里程碑:英伟达官宣<b class='flag-5'>CUDA</b>将兼容RISC-V架构!

    如何在e203 SOC中添加自定义外设

    外设的基地址和连接e203_soc_top信号使用,并将自定义的外设正确实例化在此对外接口口模块中。 3、在e203_soc_top中正确实例化第2步中的对外接口模块 4、在system顶层模块中正确
    发表于 10-20 10:38

    低漂移霍尔元件的应用实例

    此章节中将介绍低漂移霍尔元件(砷化镓 (GaAs))的应用实例
    的头像 发表于 07-10 14:27 583次阅读
    低漂移霍尔元件的应用<b class='flag-5'>实例</b>

    KiCad 中的自定义规则(KiCon 演讲)

    “  Seth Hillbrand 在 KiCon US 2025 上为大家介绍了 KiCad 的规则系统,并详细讲解了自定义规则的设计与实例。  ”   演讲主要围绕 加强 KiCad 中的自定义
    的头像 发表于 06-16 11:17 1460次阅读
    KiCad 中的自<b class='flag-5'>定义</b>规则(KiCon 演讲)

    单片机实例项目:485与CAN总线运用实例

    单片机实例项目:485与CAN总线运用实例,推荐下载!
    发表于 06-03 20:48

    Nordic测距介绍

    的多天线设计,系统资源要求非常高 两者共同的缺点是: 不是标准的功能,没有定义和使用蓝牙标准 基于此,SIG在2022年11月就公开草案Channel Sounding(简称CS),并计划在2024
    发表于 05-28 16:49

    请问CCyUSBDevice如何同时实例化2个?

    官方的控制台程序和C++ CYAPI编程手册中,CCyUSBDevice都只实例化了一次即CCyUSBDevice *USBDevice = new CCyUSBDevice(NULL);按照C++
    发表于 05-19 07:27

    UIAbility组件启动模式:实例在启动时的不同呈现状态

    请求的UIAbility实例。在EntryAbility中,调用startAbility()方法时,可以在want参数中增加一个自定义参数,例如instanceKey,以此来区分
    发表于 05-16 06:10

    使用NVIDIA CUDA-X库加速科学和工程发展

    NVIDIA GTC 全球 AI 大会上宣布,开发者现在可以通过 CUDA-X 与新一代超级芯片架构的协同,实现 CPU 和 GPU 资源间深度自动化整合与调度,相较于传统加速计算架构,该技术可使计算工程工具运行速度提升至原来的 11 倍,计算规模增加至 5 倍。
    的头像 发表于 03-25 15:11 1203次阅读

    如何添加自定义单板

    在开发过程中,用户有时需要创建自定义板配置。本节将通过一个实例讲解用户如何创建属于自己的machine,下面以g2l-test.conf为例进行说明。
    的头像 发表于 03-12 14:43 1082次阅读

    马达的基本定义

    马达,即电动机、发动机的俗称,以下是几个关于马达的定义 ‌: ‌ 基本定义 ‌: 马达是英语motor的音译,是一种能够将电能、流体动能、压缩空气的内能转化为机械能的装置‌12。 ‌ 电磁装置定义
    的头像 发表于 02-24 11:16 8546次阅读

    云服务器 Flexus X 实例:one-api 部署,支持众多大模型

    、开发测试环境、游戏服务器、音视频服务等中低负载场景。相较于 Flexus 应用服务器 L 实例,Flexus 云服务器 X 实例的优势包含:提供丰富的公共镜像、可灵活自定义 vCPU 内存配比、智能感知业务动态升降配,负载范围
    的头像 发表于 02-06 17:35 1179次阅读
    云服务器 Flexus X <b class='flag-5'>实例</b>:one-api 部署,支持众多大模型

    VSCode应用实例

    电子发烧友网站提供《VSCode应用实例.pdf》资料免费下载
    发表于 01-16 15:17 0次下载
    VSCode应用<b class='flag-5'>实例</b>

    云服务器 Flexus X 实例:RAG 开源项目 FastGPT 部署,玩转大模型

    倍性能,旗舰体验,覆盖高科技、零售、金融、游戏等行业大多数通用工作负载场景,完全可以支持 FastGPT 的部署、运行和使用,而且,Flexus 云服务器 X 实例 能够提供完备的产品能力,可以基于业务诉求灵活自定义拓扑组网,支持灵活自
    的头像 发表于 01-08 11:49 1972次阅读
    云服务器 Flexus X <b class='flag-5'>实例</b>:RAG 开源项目 FastGPT 部署,玩转大模型

    Flexus X 实例 C#/.Net Core 结合(git 代码管理、docker 自定义镜像)快速发布部署 - 让你的项目飞起来~

    前言 ���云端部署新体验,C# Web API 遇上 Git Docker,828 B2B 企业节特惠来袭!Flexus X 实例,为您的 C#应用提供强大支撑,结合 Git 版本控制
    的头像 发表于 12-25 21:15 1014次阅读
    Flexus X <b class='flag-5'>实例</b> C#/.Net Core 结合(git 代码管理、docker 自<b class='flag-5'>定义</b>镜像)快速发布部署 - 让你的项目飞起来~