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

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

3天内不再提示

基于CUDA加速的自主机器SLAM 技术–CUDA NDT

星星科技指导员 来源:NVIDIA 作者:NVIDIA 2022-10-10 11:54 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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

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

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

CUDA-NDT

正态分布变换算法(Normal Distributions 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倍左右,请参考以下Table2性能对比,经过NDT匹配的点云效果对比请参考Figure1和2。

关于作者

Lily Li 正在为 NVIDIA 的机器人团队处理开发人员关系。她目前正在 Jetson 生态系统中开发机器人技术解决方案,以帮助创建最佳实践。

Haoyu Deng 是 NVIDIA 的CUDA开发工程师。目前,他正与 TSE 中国团队合作,通过CUDA开发优化软件性能的解决方案。

审核编辑:郭婷

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

    关注

    213

    文章

    30580

    浏览量

    219565
  • AMR
    AMR
    +关注

    关注

    3

    文章

    476

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

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

    什么是激光雷达 3D SLAM技术

    在智能移动设备自主运行的赛道上,激光雷达3DSLAM技术正成为破局关键,但多数人对其认知仍停留在表层。要读懂这一核心技术,不妨先回溯“SLAM”的本质——
    的头像 发表于 12-02 19:23 74次阅读
    什么是激光雷达 3D <b class='flag-5'>SLAM</b><b class='flag-5'>技术</b>?

    首款全国产训推一体AI芯片发布,兼容CUDA生态

    CUDA生态体系。该芯片支持从单机多卡到千卡级集群的灵活扩展,能效比达3.41 TFLOPS/W——在同等功
    的头像 发表于 11-30 07:20 8772次阅读
    首款全国产训推一体AI芯片发布,兼容<b class='flag-5'>CUDA</b>生态

    FPGA和GPU加速的视觉SLAM系统中特征检测器研究

    特征检测是SLAM系统中常见但耗时的模块,随着SLAM技术日益广泛应用于无人机等功耗受限平台,其效率优化尤为重要。本文首次针对视觉SLAM流程开展硬件
    的头像 发表于 10-31 09:30 302次阅读
    FPGA和GPU<b class='flag-5'>加速</b>的视觉<b class='flag-5'>SLAM</b>系统中特征检测器研究

    自主生产:制造业的未来

    生产过程。 什么是自主生产?自主生产是指能够自我调节、灵活适应和独立优化的生产过程。机器机器人和生产单元等工作单元在技术上越来越灵活,它
    发表于 09-15 15:08

    NVIDIA在Hot Chips 2025大会展示创新技术

    本周在加利福尼亚州帕洛阿尔托(Palo Alto)举行的 Hot Chips 大会上,NVIDIA 专家详细介绍了 NVIDIA NVLink 和Spectrum-X 以太网技术、Blackwell 以及 CUDA 如何为全球数百万的 AI 工作流
    的头像 发表于 08-27 12:52 1616次阅读

    英伟达:CUDA 已经开始移植到 RISC-V 架构上

    ,着重介绍了将 CUDA 移植到 RISC-V 架构的相关工作和计划,展现了对 RISC-V 架构的高度重视与积极布局。   Frans Sijstermanns 首先回顾了英伟达与 RISC-V 之间
    发表于 07-17 16:30 3836次阅读

    借助NVIDIA技术加速半导体芯片制造

    NVIDIA Blackwell GPU、NVIDIA Grace CPU、高速 NVIDIA NVLink 网络架构和交换机,以及诸如 NVIDIA cuDSS 和 NVIDIA cuLitho 等特定领域的 NVIDIA CUDA-X 库,正帮助改进高级芯片制造领域的计算光刻和设备仿真。
    的头像 发表于 05-27 13:59 883次阅读

    【「# ROS 2智能机器人开发实践」阅读体验】视觉实现的基础算法的应用

    阅读心得体会:ROS2机器人视觉与地图构建技术 通过对本书第7章(ROS2视觉应用)和第8章(ROS2地图构建)的学习,我对机器人视觉感知和自主导航的核心
    发表于 05-03 19:41

    【「# ROS 2智能机器人开发实践」阅读体验】+ROS2应用案例

    这一部分内容,我掌握了如何在ROS 2中实现SLAM,这对于提高机器人的自主导航能力具有重要意义。 其他内容概述 除了二维码识别和SLAM技术
    发表于 04-27 11:42

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

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

    研华科技加速智能自主系统与机器人应用发展

    研华科技近日举办“智能自主系统与机器人应用伙伴高峰论坛”,将携手生态伙伴,打造灵活且ROS兼容的机器人解决方案。
    的头像 发表于 03-11 13:46 690次阅读

    【「具身智能机器人系统」阅读体验】2.具身智能机器人的基础模块

    具身智能机器人的基础模块,这个是本书的第二部分内容,主要分为四个部分:机器人计算系统,自主机器人的感知系统,自主机器人的定位系统,自主机器
    发表于 01-04 19:22

    【「具身智能机器人系统」阅读体验】1.初步理解具身智能

    重要。 书中还详细介绍了支持具身智能机器人的核心技术系统,包括自主机器人计算系统、感知系统、定位系统及规划和控制系统。 本书共分5个部分。 第1部分(第1章和第2章)介绍具身智能机器
    发表于 12-28 21:12

    《CST Studio Suite 2024 GPU加速计算指南》

    的GPU不能在单个主机系统中组合使用。 - AMD GPU:目前只有时域求解器(FIT)支持AMD GPU,如Instinct MI 210、Radeon VII等,并给出了相关规格和主机系统要求
    发表于 12-16 14:25