NDT的提出与原理:

ICP配准方法前提是环境大部分是不变的,但是完全不变的环境其实也是很少的,比如一辆车飞驰而过,一个人走过等。更多应该考虑的是允许小部分差异的配准,这时候点对点匹配比如ICP就会出现一些问题,而NDT则可以很好地解决细微差别,因为NDT是通过近似正态分布概率来完成匹配的(概率吗就具有了兼容性)。主要步骤为:

一个三维空间的正态分布如图所示:

简单理解就是将每一个划分出的网格近似为一个专属的概率分布然后与地图对应网格内的分布求解相似程度(这就是匹配的过程)。

找到了一张很好的示意图:

对比两种概率的分布,常用方法是利用贝叶斯分布,即:求解后验概率的问题可以转变为最大化先验*似然估计的问题,先验是相同的所以也就等价于最大化似然估计,为了计算方便可等价于最小化负对数似然估计,然后对此式进行牛顿法迭代优化。只要涉及到就牛顿法优化一定会涉及到初值的给定,所以理论上NDT程序中会有一个超参数调整优化初值,该超参数也会影响定位精度。

另外一个问题是,点云配准问题是一个非凸优化问题NDTICP算法的本质是局部搜索,通过对目标函数的迭代求解求得一个初值附近的局部最优解,而正确的空间转换可以理解成对目标函数的全局最优解。但目标函数是非凸的,在整个参数空间上有许多局部最优解,如果初值不在全局最优解附近,就可能收敛于其他次优解,导致找不到正确的转换结果。换句话说点云对于局部特征的描述较好,但对于全局特征的描述能力表现较弱,所以对点云定位的第一步——定位初始化要求较高。通过当前点云帧和全局地图匹配进而得到当前位置不太可能实现,也就是说初始化一定是要选择正确对应的各自或者相邻的格子才会运行成功,所以在实际应用中会有一个“令初始化成功的范围”。

TODOs:

NDT-GPU库:https://github.com/zju-sclab/NDT-library

有一个超参数可调节hdl准确率与匹配速度,我们可以进一步提升准确率并由GPU加速。或许就不必额外使用EKF,也就不必给定协方差矩阵(协方差矩阵是个很不容易求解的东西)。

以下是一个机器人中应用的方案举例

基于NDT的三维点云匹配定位方案

基于三维激光雷达进行定位的主流方法主要有两种:一是直接使用SLAM(即时定位与地图构建)技术;二是将SLAM中的“L”与“M”进行解耦,使用单独的二维或三维定位方法替换其中的“L”部分。一般来说在实际工程应用中后者的定位精度较高故采用后者解耦方式完成定位任务。单独的二维定位方法中比较有代表性的是自适应蒙特卡洛定位方法(adaptive Monte Carlo Localization,AMCL),将三维地图投影到二维预估会丧失很多本就稀疏的信息,故而计划直接采用单独的三维定位方法。这其中比较有代表性或者说实际工程中常用方法为NDT(normal distribution transformation)方法。NDT算法对环境进行概率建模更符合实际情况,其对匹配初值要求低,能容忍一定程度的环境变化且匹配速度较快。

NDT的实现:hdl_localization

NDT算法的定位精度相对较高,但从零实现过程中需要考虑初始值选择、正态分布超参数选择等问题。hdl_localization是用于使用三维激光雷达(例如velodyne的 HDL32e或者VLP16)进行实时3D本地化的ROS软件包,由日本丰桥工业大学有源智能系统实验室进行维护。hdl_localization以NDT匹配为主体,配合Unscented Kalman滤波器进行姿势估计,稳定性较高。本方案计划基于hdl_localization程序包进行优化改进并用于爬壁机器人定位任务。

hdl_localization定位方案

工程结构:主要分为两个并行的流程。流程1:维护地图服务节点; 维护定位节点。

流程2:维护状态估计节点; 维护UKF的实现节点

初始位姿的给定:仿真环境中验证算法时初始位姿可通过rviz中的 “2D Pose Estimate” 来给定。实体机器人运行时可直接初始化时设定参数,但需注意比如爬壁机器人工作表面垂直于地面,基于机器人坐标系进行工作时则不需修改。而基于地面坐标系(如任务需求装配地面喷涂工具)进行定位工作则需要调整对应的初始化坐标参照。

全局匹配地图的给定:由基于三维激光雷达建图的算法(如LOAM算法或者Cartoprapher算法)生成Pcd格式的全局地图。地图服务模块初始化时读取全局地图并进行降采样操作然后发布到全局定位话题,定位节点收到后将该地图设置为NDT匹配的目标。

IMU数据的处理:IMU数据为可选项,如存在IMU数据可将其通过状态估计节点直接存入内存。本方案中计划使用IMU,通过卡尔曼滤波将IMU数据与三维激光雷达数据融合进行定位可有效提升定位精度,此外仍需注意IMU的坐标参考系。使用前应单独对IMU的安装调试进行评估,确保IMU与建图算法参考坐标系一致。

使用NDT对全局地图进行离散:定位节点接收全局点云后使用NDT将空间点云离散为数个立方体,这样就可以将采样的点云划分到不同的网格中,可以很方便的描述点云的局部特性,例如点云局部的形状(直线、平面或者球体)、方向(平面法向、直线方向等)。

实时激光数据的处理:对于每一帧点云,都会进入状态估计节点。节点内进行点云转PCL并降采样,同时检测有无IMU数据,如有IMU数据则遍历积累的所有IMU数据,读取IMU的加速度与角速度并校正。

NDT匹配:将处理后的实时激光点云投票到各个划分网格,之后计算格子的正态分布PDF参数,与离散后的全局点云各个网格中的PDF参数通过遍历进行匹配以确定机器人所属位置。

方案输入输出强调

输入:

3D Lidar的实时点云信息

由上一级系统即建图算法生成的pcd格式的地图,作为NDT匹配的参照

初始化参数,包括初始位姿,下采样的比例参数以及匹配速度等级

可选IMU数据

输出:

进行NDT匹配后单独的位姿话题,该话题作为其他多传感器融合算法(如robot_localization)的输入,也可单独利用用以评价NDT匹配效果

以move_base导航算法为例,需要定位算法提供TF信息,hdl_localization程序包也预留了相应接口。

备注

NDT-OMP是一种加速版的NDT算法,计算速度比pcl原始版本快10倍,主要是对ndt中计算梯度以及hessian矩阵进行了多线程优化,hdl_localization中应用这个版本的NDT。

友情链接:

http://xchu.net/2019/09/14/NDT%E5%8E%9F%E7%90%86%E6%8E%A8%E5%AF%BC/#more

LidarSLAM(一):NDT相关推荐

  1. 一文详解NDT算法实现

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨paopaoslam 来源丨 泡泡机器人SLAM .PCL源码 编辑丨玉玺.lionheart ...

  2. ndtmapping建图_自动驾驶系列:激光雷达建图和定位(NDT)

    该系列主要为对前期工作进行梳理,以后所进行的工作也会部分在此记录. 使用NDT(正态分布变换)进行点云建图和定位 前言 定位模块是自动驾驶最核心的模块之一,定位又包括全局定位和局部定位,对于自动驾驶, ...

  3. 3d激光雷达开发(ndt匹配)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 除了icp匹配之外,ndt匹配也是使用比较多的一种方法.相比较icp而言,ndt匹配花的时间要少 ...

  4. 基于贪婪的高效Lidar-SLAM特征选择(ICRA2021)

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨paopaoslam 来源丨泡泡机器人SLAM 标题:Greedy-Based Feature ...

  5. 点云配准方法原理(NDT、ICP)

    配准是点云处理中的一个基础问题,众多学者此问题进行了广泛而深入的研究,也出现了一系列优秀成熟的算法,在三维建模.自动驾驶等领域发挥着重要的作用. 本文主要介绍粗配准NDT (Normal Distri ...

  6. NDT(正态分布变换)算法学习

    NDT(正态分布变换)算法学习 近期阅读NICP. Dense Normal Based Point Cloud Registration论文,其中的点云配准算法:ICP.NDT.GICP.NICP较 ...

  7. 点云配准之NDT算法

    1.算法原理 已知有两幅点云,分别为源点云P和目标云Q. 1)将源点云P所在空间划分为一个一个的单元网格,(即三维空间在二维空间上的投影). 2)根据所划分单元网格内点的分布情况,计算单元网格的正态分 ...

  8. NDT方法总结与公式推导

    目录 参考 摘要 方法 参考 NDT论文下载:https://www.researchgate.net/publication/4045903_The_Normal_Distributions_Tra ...

  9. 点云配准NDT+ICP

    点云配准NDT+ICP #include <iostream> #include <pcl/io/pcd_io.h> #include <pcl/point_types. ...

  10. 基于已知点云地图的NDT的激光SLAM定位

    概述 对于L4级自动驾驶系统而言,定位模块通常会融合GNSS.IMU.轮速计(车辆底盘).摄像头以及激光雷达odometry多种测量,使用滤波算法(EKF.UKF等)以获得平滑.厘米级别的绝对定位,其 ...

最新文章

  1. C++:随笔7---运算符重载
  2. 【H.265】H.265(HEVC)编码过程和名词解释
  3. 都996了,需求还是没法按时交付,怎么办?
  4. MPB:扬大林淼组-​瘤胃混合细菌连续传代培养技术
  5. SecureCRT连接Linux终端中文乱码解决方法
  6. 程序包android.support.annotation不存在_我不知道我不了解的Redis知识
  7. c# mongodb or查询_C# MongoDB 查询方法
  8. 动态规划--Leetcode64.最小路径和
  9. jq追加html属性,jQuery 操作 HTML 元素和属性的方法
  10. 横向导出excel_万能转换:R图和统计表转成发表级的Word、PPT、Excel、HTML、Latex、矢量图等...
  11. js实现无刷新表单提交文件,将ajax请求转换为form请求方法
  12. SIM868使用笔记
  13. html5游戏 做广告联盟怎么样,几个比较好的国外广告联盟推荐
  14. vue-element-admin 框架结构粗解
  15. FFmpeg将视频提取成帧
  16. grub加密 bios加密 linux
  17. PTA 快速排序 (25分)
  18. 浏览器兼容性测试怎么做?系统测试工具及方案推荐
  19. 如何读一篇优秀的计算机论文?
  20. 未明学院:找实习是门“玄学”?学姐这份券商、咨询、500强企业实习经验收藏好!

热门文章

  1. 360一直把oracle当成病毒,为什么360一直把软件程序当做木马?
  2. 常见排序算法02之插入排序与希尔排序
  3. 计算机硬件与哪些部分组成部分,计算机硬件组成及各部分功能有哪些?
  4. 使用phpword替换模板内容 在模板追加内容
  5. nginx ajax 错误500,聊聊nginx报错499问题
  6. 领导力21法则自测题
  7. 计算机 就业率低,大学里“最坑人”的4个专业,热门只是假象,实则就业率很低...
  8. 铁路标准 EN 50126
  9. 中国联通沃商-上海大学生手机应用创意、开发大赛活动
  10. 一文读懂卷积神经网络中的1x1卷积核