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开发优化软件性能的解决方案。

审核编辑:郭婷

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

    关注

    210

    文章

    28212

    浏览量

    206549
  • AMR
    AMR
    +关注

    关注

    3

    文章

    423

    浏览量

    30187
收藏 人收藏

    评论

    相关推荐

    有没有大佬知道NI vision 有没有办法通过gpu和cuda加速图像处理

    有没有大佬知道NI vision 有没有办法通过gpu和cuda加速图像处理
    发表于 10-20 09:14

    怎么在TMDSEVM6678: 6678自带的FFT接口和CUDA提供CUFFT函数库选择?

    请教一下gpgpu上包括4个Riscv cpu和一个DPU, 没有6678,要替换原来信号处理用的6678,该怎么在6678自带的FFT接口和CUDA提供CUFFT函数库选择?
    发表于 09-27 07:20

    打破英伟达CUDA壁垒?AMD显卡现在也能无缝适配CUDA

    电子发烧友网报道(文/梁浩斌)一直以来,围绕CUDA打造的软件生态,是英伟达在GPU领域最大的护城河,尤其是随着目前AI领域的发展加速,市场火爆,英伟达GPU+CUDA的开发生态则更加稳固,AMD
    的头像 发表于 07-19 00:16 4533次阅读

    软件生态上超越CUDA,究竟有多难?

    神坛的,还是围绕CUDA打造的一系列软件生态。   英伟达——CUDA的绝对统治   相信对GPU有过一定了解的都知道,英伟达的最大护城河就是CUDACUDA在后端架构上处于绝对的统
    的头像 发表于 06-20 00:09 3508次阅读

    机器人高效导航定位背后SLAM专用芯片的崛起

    。   SLAM技术是定位与地图构建技术,其重要的理论与应用价值被认为是实现自动驾驶和全自主移动机器人的关键
    的头像 发表于 05-28 00:20 3363次阅读

    借助NVIDIA Aerial CUDA增强5G/6G的DU性能和工作负载整合

    Aerial CUDA 加速无线接入网 (RAN)可加速电信工作负载,使用 CPU、GPU 和 DPU 在云原生加速计算平台上提供更高水平的频谱效率 (SE)。
    的头像 发表于 05-24 11:10 534次阅读
    借助NVIDIA Aerial <b class='flag-5'>CUDA</b>增强5G/6G的DU性能和工作负载整合

    NVIDIA 通过 CUDA-Q 平台为全球各地的量子计算中心提供加速

    德国、日本和波兰的超级计算机利用 Grace-Hopper 和量子-经典加速超算平台推进量子计算研究     德国汉堡 —— 国际超算大会(ISC)—— 2024 年 5 月 13 日
    发表于 05-13 15:21 183次阅读
    NVIDIA 通过 <b class='flag-5'>CUDA</b>-Q 平台为全球各地的量子计算中心提供<b class='flag-5'>加速</b>

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

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

    英伟达AI霸主地位遭巨头联手挑战,CUDA垄断遭破局

    据最新外媒报道,科技界的巨头们——高通、谷歌和英特尔等,已经联手向英伟达发起了一场挑战,意图打破其在CUDA平台上的垄断局面。
    的头像 发表于 03-28 14:39 934次阅读

    摩尔线程MUSA/MUSIFY与英伟达CUDA无依赖,开发者无忧

    首先,摩尔线程MUSA/MUSIFY并不受到英伟达CUDA这项条款的限制,使用者可以放心地使用其相关内容。MUSA即摩尔线程自行研发,享有高度自主知识产权的全功能GPU先进计算统一系统架构;
    的头像 发表于 03-06 09:22 1223次阅读

    深入浅出理解PagedAttention CUDA实现

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

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

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

    英特尔:让我们一起消灭CUDA

    基尔辛格认为:"由于推理的发生,一旦你训练了模型......就不会依赖CUDA。"关键在于,你能否很好地运行该模型?他表示,英特尔将利用今日首次在舞台上展示的 Gaudi3 迎接挑战,并利用至强和边缘PC实现这一目标
    的头像 发表于 12-15 17:12 970次阅读

    OpenCV4.8 CUDA编程代码教程

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

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

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