文档帮助中心文档
估计两个激光扫描之间的姿势
构成= matchScans (currScan refScan)
构成= matchScans (currRanges currAngles、refRanges refAngles)
(姿势,统计)= matchScans (___)
[___) = matchScans (___、名称、值)
例子
构成= matchScans (currScan,refScan)查找引用之间的相对位姿lidarScan和一个电流lidarScan对象使用正态分布变换(NDT)。
构成= matchScans (currScan,refScan)
构成
currScan
refScan
lidarScan
构成= matchScans (currRanges,currAngles,refRanges,refAngles)找到指定为范围和角度的两个激光扫描之间的相对姿态。
构成= matchScans (currRanges,currAngles,refRanges,refAngles)
currRanges
currAngles
refRanges
refAngles
[构成,统计数据) = matchScans (___)使用前面的输入参数返回关于扫描匹配结果的额外统计信息。
[构成,统计数据) = matchScans (___)
统计数据
[___) = matchScans (___、名称、值)指定由一个或多个指定的附加选项名称,值对参数。
名称,值
全部折叠
创建参考激光雷达扫描使用lidarScan.指定范围和角度为向量。
refRanges = 5 * 1 (1300);refAngles = linspace(-π/ 2π/ 2300);refScan = lidarScan (refRanges refAngles);
使用transformScan(机器人系统工具箱)函数,生成第二次激光雷达扫描x, y偏置的(0.5, 0.2).
transformScan
x, y
(0.5, 0.2)
currScan = transformScan(refScan,[0.5 0.2 0]);
匹配参考扫描和第二次扫描,估计它们之间的位姿差异。
构成= matchScans (currScan refScan);
使用transformScan函数通过使用相对位姿差将第二次扫描转换为第一次扫描的帧来对齐扫描。绘制原始扫描和对齐扫描。
currScan2 = transformScan (currScan,姿势);次要情节(2,1,1);持有在情节(currScan)情节(refScan)标题(“原始扫描”)举行从次要情节(2,1,2);持有在情节(currScan2)情节(refScan)标题(“对齐扫描”) xlim([0 5])保持从
这个示例使用:
本示例使用“fminunc”求解算法执行扫描匹配。此求解器算法需要一个Optimization Toolbox™许可证。
“fminunc”
指定参考激光扫描作为范围和角度。
refRanges = 5 * 1 (1300);refAngles = linspace(-π/ 2π/ 2300);
使用transformScan(机器人系统工具箱)函数,产生第二次激光扫描x, y偏置的(0.5, 0.2).
[currRanges,currAngles] = transformScan(refRanges,refAngles,[0.5 0.2 0]);
构成= matchScans (currRanges currAngles、refRanges refAngles,“SolverAlgorithm”,“fminunc”);
通过给出初始姿态估计来改进估计。
构成= matchScans (currRanges currAngles、refRanges refAngles,…“SolverAlgorithm”,“fminunc”,“InitialPose”-0.4 - -0.1 [0]);
[currRanges2, currAngles2] = transformScan (currRanges currAngles,姿势);[x1, y1] = pol2cart(refAngles, reranges); / /刷新图片[x2, y2] = pol2cart(currAngles,currRanges);[x3, y3] = pol2cart(currAngles2,currRanges2);次要情节(1、2、1)情节(x1, y1,“o”x2, y2,“* r”)标题(“原始扫描”次要情节(1、2、2)情节(x1, y1,“o”x3 y3,“* r”)标题(“对齐扫描”)
当前激光雷达扫描读数,指定为lidarScan对象。
你的激光雷达扫描可以包含正和南值,但算法会忽略它们。
正
南
参考激光雷达扫描读数,指定为lidarScan对象。
当前激光扫描范围,指定为矢量。距离是指从激光传感器测量到的物体的距离。
你的激光扫描范围可以包含正和南值,但算法会忽略它们。
当前激光扫描角度,指定为弧度矢量。角度是作为相应距离测量的方向给出的。
参考激光扫描范围,指定为以米为单位的矢量。距离是指从激光传感器测量到的物体的距离。
参考激光扫描角度,指定为弧度矢量。角度是作为相应距离测量的方向给出的。
指定可选的逗号分隔的对名称,值参数。的名字参数名和价值为对应值。的名字必须出现在引号内。可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家.
的名字
价值
Name1, Value1,…,的家
“InitialPose”,[1 1π/ 2]
SolverAlgorithm
“信赖域”
优化算法,指定为“信赖域”或“fminunc”.使用“fminunc”需要一个Optimization Toolbox™许可证。
InitialPose
(x yθ)
相对于参考激光扫描的当前位姿的初始猜想,指定为逗号分隔对组成“InitialPose”和一个(x yθ)向量。(x, y)平移单位是米和吗θ是以弧度为单位的旋转。
“InitialPose”
(x, y)
θ
CellSize
单元格边的长度,单位为米,指定为逗号分隔对,由“CellSize”和一个数字标量。matchScans使用单元格大小离散NDT算法的空间。
“CellSize”
matchScans
调整单元格大小对于正确使用NDT算法非常重要。最佳单元格大小取决于输入扫描和机器人的环境。更大的细胞尺寸可能导致较不准确的匹配,采样较差的区域。更小的单元需要更多的内存和更少的后续扫描差异。传感器噪声也会对小单元的算法产生影响。选择适当的单元格大小取决于环境和输入数据的规模。
MaxIterations
最大迭代次数,由逗号分隔对组成“MaxIterations”和一个标量整数。更多的迭代会导致更精确的姿态估计,但代价是更长的执行时间。
“MaxIterations”
ScoreTolerance
1 e-6
NDT评分变化的下界,指定为逗号分隔对,由“ScoreTolerance”和一个数字标量。NDT评分存储在分数输出场统计数据结构。在迭代之间,如果分数的变化小于这个公差,算法将收敛到一个解决方案。容忍度越小,姿态估计越准确,但执行时间越长。
“ScoreTolerance”
分数
当前扫描相对于参考扫描的姿态,返回为(x yθ),在那里(x, y)平移单位是米和吗θ是以弧度为单位的旋转。
扫描匹配统计信息,返回如下字段的结构:
分数-数字标量表示扫描匹配时的NDT评分。这个分数是对转换后的当前扫描与参考扫描匹配的可能性的估计。分数总是非负。分数越大表示匹配越好。
黑森-3 × 3矩阵表示NDT代价函数在给定处的Hessian构成解决方案。Hessian被用作与姿态估计相关的不确定性的指标。
黑森
P.比伯和W.斯特拉瑟。正态分布变换:激光扫描匹配的新方法。智能机器人与系统论文集.2003.
[2] Magnusson,马丁。三维正态分布变换——配准、表面分析和环路检测的有效表示。博士学位论文。Örebro大学科技学院,2009。
默认情况下支持代码生成万博1manbetxSolverAlgorithm,“信赖域”.你不能使用“fminunc”代码生成中的算法。
matchScansGrid
matchScansLine
occupancyMap
monteCarloLocalization
您有这个示例的修改版本。您想打开这个示例与您的编辑吗?
你点击一个链接对应于这个MATLAB命令:
通过在MATLAB命令窗口中输入命令来运行命令。Web浏览器不支持MATLAB命令。万博1manbetx
选择一个网站,在那里获得翻译的内容,并看到当地的活动和优惠。根据您的位置,我们建议您选择:.
你也可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。
与当地办事处联系