主要内容

pcregisterndt

注册两个点云使用无损检测算法

描述

例子

tform= pcregisterndt (移动,固定,gridStep)返回注册移动点云的刚性变换的不动点云。固定的点云voxelized成立方体的大小gridStep

注册算法是基于正态分布变换(无损检测)算法[1][2]。这种迭代过程的最佳性能需要调整你的数据的属性。提高准确性和效率的登记,可以考虑将采样点云通过使用移动pcdownsample使用前pcregisterndt

(tform,movingReg)= pcregisterndt (___)返回转换后的点云,与固定的点云。

(tform,movingReg,rmse)= pcregisterndt (___)还返回均方根误差之间的欧几里得距离对齐的点云。

(___)= pcregisterndt (___,名称=值)指定选项使用一个或多个名称参数除了参数从以前的语法的任意组合。例如,MaxIterations = 20经过20迭代停止无损检测算法。

例子

全部折叠

加载点云数据。

ld =负载(“livingRoom.mat”);移动= ld.livingRoomData {1};固定= ld.livingRoomData {2};图pcshowpair(移动、固定VerticalAxis =“Y”VerticalAxisDir =“下来”)

提高无损检测注册算法的效率和准确性,downsample动点云。

movingDownsampled = pcdownsample(移动,“gridAverage”,0.1);

Voxelize sidelength 0.5的点云到多维数据集。应用严格的登记使用无损检测算法。

gridStep = 0.5;tform = pcregisterndt (movingDownsampled、固定、gridStep);

可视化对齐。

movingReg = pctransform(移动,tform);图pcshowpair (movingReg、固定VerticalAxis =“Y”VerticalAxisDir =“下来”)

构造一个velodyneFileReader对象。

veloReader = velodyneFileReader (“lidarData_ConstructionRoad.pcap”,“HDL32E”);

阅读和可视化两个激光雷达点云。

frameNumber = 1;skipFrame = 5;固定= readFrame (veloReader frameNumber);移动= readFrame (veloReader frameNumber + skipFrame);

分割地平面,将其移出固定的点云。

groundPtsIdxFixed = segmentGroundFromLidarData(固定);fixedSeg =选择(固定、~ groundPtsIdxFixed OutputSize =“全部”);

分割地平面,将其移出移动的点云。

groundPtsIdxMoving = segmentGroundFromLidarData(移动);movingSeg =选择(移动,~ groundPtsIdxMoving OutputSize =“全部”);

Downsample动点云来提高精度和效率的处理点。

movingDownsampled = pcdownsample (movingSeg gridAverage = 0.2);

注册移动点云对固定的点云。

gridStep = 5;tform = pcregisterndt (movingDownsampled fixedSeg gridStep);

变换运动点云估计使用刚性变换。

movingReg = pctransform(移动,tform);

可视化的对齐点云。

图pcshowpair (movingReg、固定)

输入参数

全部折叠

移动的点云,指定为一个pointCloud对象。

固定的点云,指定为一个pointCloud对象。

大小的三维立方体voxelizes定点云,指定为一个积极的标量。

数据类型:|

名称-值参数

指定可选的双参数作为Name1 = Value1,…,以=家,在那里的名字参数名称和吗价值相应的价值。名称-值参数必须出现在其他参数,但对的顺序无关紧要。

例子:MaxIterations = 20经过20迭代停止无损检测算法。

最初的刚性变换,指定为一个rigidtform3d对象。设置初始转换到一个粗略的估计。如果你不提供课程或初始估计,函数使用一个rigidtform3d对象包含了一个翻译,移动点的中心移动到固定的中心观点。

预期对正态分布比例的异常值,指定为一个标量范围在[0,1)。无损检测算法假定一个点是由内围层的混合正态分布和均匀分布的离群值。更大的价值OutlierRatio减少异常值的影响。

数据类型:|

最大数量的迭代无损检测停止之前,指定为一个正整数。

数据类型:|

公差之间连续无损检测迭代,用负的值指定为一个2-element向量。向量,TdiffRdiff),代表了绝对差的公差在平移和旋转估计连续无损检测的迭代。Tdiff措施两个翻译之间的欧几里得距离向量。Rdiff测量角度的差异度。估计算法停止时区别刚性转换在最近连续迭代低于指定的公差值。

数据类型:|

显示进度信息,指定为一个数字或逻辑0()或1(真正的)。显示进度信息,设置详细的真正的

输出参数

全部折叠

刚性变换,作为一个返回rigidtform3d对象。tform描述了刚性三维变换注册移动的点云,移动固定的点云,固定

将点云,作为一个返回pointCloud对象。转换后的点云与不动点云对齐,固定

均方根误差,返回一个正数。rmse之间的欧几里得距离对齐的点云。一个低rmse值表示一个更准确的登记。

数据类型:|

算法

全部折叠

提示

  • 对于地面车辆点云,可以提高性能和精度通过消除地面使用pcfitplanesegmentGroundFromLidarData之前注册。有关如何做到这一点的详细信息,请参阅helper函数,helperProcessPointCloud从激光雷达数据建立一个映射(自动驾驶工具箱)的例子。

  • 合并两个以上的点云,你可以使用pccat函数而不是pcmerge函数。

  • 在注册之前,pcregisterndt使用指定的函数voxelizes固定的点云gridStep。减少网格步捕捉不同的点云结构。然而,降低这个值会导致增加了传感器的局部噪声的影响。使用pcdownsample函数来确定图形的影响这个语法:

    pcdownsample(固定,“gridAverage”gridStep)

无损检测注册概述

无损检测登记是基于正态分布,而不是其他类型的注册匹配点或线为了找到两个点云之间的转换。无损检测方法使用统计模型与三维框,称为压。

注册两个点云,一个移动的点云,一个固定的点云,使用无损检测方法,该算法执行以下:

  1. 的正态分布计算固定的点云覆盖面积除以通过点云扫描成三维常数大小的盒子,被称为“压”。每个立体像素包含一组点。该算法计算的均值和协方差矩阵每个立体像素点。

  2. 从转换的初始猜测,该算法将移动固定的点云的点云。然后发现的和统计的可能性每一个对齐点位于周围的体素点(点云),基于正态分布的固定的点云。

  3. 提高注册,该算法最大化的概率得分点云移动的正态分布固定的点云。这是通过迭代优化角和平动估计。

  4. 重复移动与固定的点云对齐的离散点云从上一步使用新的转换,然后重复优化。

  5. 算法停止一旦最大迭代或公差参数,得到满足。公差是多少角和转化估计改变从一个迭代到另一个。

引用

[1]Biber, P。,and W. Straßer. “The Normal Distributions Transform: A New Approach to Laser Scan Matching.”学报IEEE / RSJ智能机器人和系统国际会议(——)。拉斯维加斯,NV。3卷,2003年11月,页2743 - 2748。

[2]Magnusson, m .”——一种有效的三维正态分布变换表示注册、表面分析,和循环检测。“博士论文。据英国大学,据英国,瑞典,2013年。

扩展功能

C / c++代码生成
生成C和c++代码使用MATLAB®编码器™。

GPU的代码生成
生成NVIDIA的CUDA®代码®GPU使用GPU编码器™。

版本历史

介绍了R2018a

全部展开