文档

matchScans

估计两次激光扫描之间的姿势

描述

例子

构成= matchScans (currScanrefScan查找引用之间的相对位姿lidarScan还有电流lidarScan对象使用正态分布变换(NDT)。

例子

构成= matchScans (currRangescurrAnglesrefRangesrefAngles查找指定为范围和角度的两个激光扫描之间的相对位置。

构成统计数据= matchScans(___使用前面的输入参数返回有关扫描匹配结果的其他统计信息。

___= matchScans(___、名称、值)指定一个或多个指定的其他选项名称,值对参数。

例子

全部折叠

创建一个参考激光雷达扫描使用lidarScan.指定范围和角度为向量。

refRanges = 5*ones(1300);refAngles = linspace(-pi/2,pi/ 2300);refScan = lidarScan(refRanges,refAngles);

使用transformScan函数,生成第二个激光雷达扫描在x, y偏置的(0.5, 0.2)

currScan = transformScan(refScan,[0.5 0.2 0]);

匹配参考扫描和第二扫描,估计它们之间的位姿差异。

pose = matchScans(currScan,refScan);

使用transformScan函数通过使用相对位姿差将第二个扫描转换为第一个扫描的帧来对齐扫描。绘制原始扫描和对齐扫描。

currScan2 = transformScan(currScan,pose);次要情节(2,1,1);持有图(currScan)“原始扫描”)举行次要情节(2,1,2);持有图(currScan2)“对齐扫描”xlim([0 5]

本例使用“fminunc”求解算法执行扫描匹配。此求解器算法需要“优化工具箱”许可证。

指定参考激光扫描的范围和角度。

refRanges = 5*ones(1300);refAngles = linspace(-pi/2,pi/ 2300);

使用transformScan函数,生成第二次激光扫描x, y偏置的(0.5, 0.2)

[currRanges,currAngles] = transformScan(refRanges,refAngles,[0.5 0.2 0]);

匹配参考扫描和第二扫描,估计它们之间的位姿差异。

姿态=匹配扫描(currRanges,currAngles,refRanges,refAngles,“SolverAlgorithm”“fminunc”);

通过给出初始姿态估计来改进估计。

姿态=匹配扫描(currRanges,currAngles,refRanges,refAngles,...“SolverAlgorithm”“fminunc”“InitialPose”,[-0.4 -0.1 0]);

使用transformScan函数通过使用相对位姿差将第二个扫描转换为第一个扫描的帧来对齐扫描。绘制原始扫描和对齐扫描。

[currRanges2,currAngles2] = transformScan(currRanges, curranges,pose);[x1, y1] = pol2cart(refAngles, refrangles);[x2, y2] = pol2cart(currAngles,currRanges);[x3, y3] = pol2cart(currAngles2,currRanges2);次要情节(1、2、1)情节(x1, y1,“o”x2, y2,“* r”)标题(“原始扫描”) subplot(1,2,2) plot(x1,y1,“o”x3 y3,“* r”)标题(“对齐扫描”

输入参数

全部折叠

当前激光雷达扫描读数,指定为alidarScan对象。

你的激光雷达扫描可以包含而且值,但算法忽略它们。

参考激光雷达扫描读数,指定为alidarScan对象。

你的激光雷达扫描可以包含而且值,但算法忽略它们。

当前激光扫描范围,指定为矢量。距离是指从激光传感器测量到物体的距离。

您的激光扫描范围可以包含而且值,但算法忽略它们。

当前激光扫描角度,指定为弧度矢量。角被给出作为相应范围测量的方向。

参考激光扫描范围,以米为单位的矢量指定。距离是指从激光传感器测量到物体的距离。

您的激光扫描范围可以包含而且值,但算法忽略它们。

参考激光扫描角度,以弧度为单位的矢量。角被给出作为相应范围测量的方向。

名称-值对参数

的可选逗号分隔对名称,值参数。的名字参数名称和价值对应的值。的名字必须出现在引号内。您可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家

例子:"InitialPose",[11 1 pi/2]

优化算法,指定为任意一种“信赖域”“fminunc”.使用“fminunc”需要“优化工具箱”许可证。

相对于参考激光扫描的当前姿态的初始猜测,指定为由逗号分隔的对组成“InitialPose”和一个[x y theta]向量。(x, y)平移的单位是米和吗θ是以弧度为单位的旋转。

单元格边的长度,以米为单位,由逗号分隔的对组成“CellSize”和一个数值标量。matchScans使用细胞大小离散空间的NDT算法。

调整单元大小对于正确使用无损检测算法是很重要的。最佳的单元大小取决于输入扫描和机器人的环境。较大的细胞尺寸会导致与采样较差的区域匹配不准确。较小的单元需要更多的内存,并且后续扫描之间的差异较小。传感器噪声也会影响较小的单元尺寸的算法。选择合适的单元格大小取决于您的环境和输入数据的规模。

最大迭代次数,指定为由逗号分隔的对组成的“MaxIterations”一个标量整数。大量的迭代会导致更准确的姿态估计,但代价是更长的执行时间。

NDT评分变化的下界,由逗号分隔的对组成“ScoreTolerance”和一个数值标量。无损检测分数存储在分数输出字段统计数据结构。在迭代之间,如果分数的变化小于这个容差,算法就会收敛到一个解决方案。公差越小,姿态估计就越准确,但需要更长的执行时间。

输出参数

全部折叠

当前扫描相对于参考扫描的姿态,返回为[x y theta],在那里(x, y)平移的单位是米和吗θ是以弧度为单位的旋转。

扫描匹配的统计信息,以结构形式返回,包含以下字段:

  • 分数—扫描匹配时无损检测评分的数字标量。这个分数是转换后的当前扫描与参考扫描匹配的可能性的估计值。分数总是非负的。分数越大说明比赛越好。

  • 黑森-3 × 3矩阵,表示给定NDT代价函数的Hessian构成解决方案。黑森被用作与姿态估计相关的不确定性的指标。

参考文献

[1]比伯,P.和W.斯特拉瑟。正态分布变换:激光扫描匹配的一种新方法智能机器人与系统论文集.2003.

马格努松,马丁。三维正态分布变换——配准、表面分析和环路检测的有效表示博士学位论文。Örebro大学,科学技术学院,2009。

扩展功能

R2019b引入