主要内容

findPose

使用正常分布变换(NDT)算法,本地化地图中的点云

描述

例子

curr=心探(ndtmap.ptCloudinitPose定位点云的姿势ptCloud在NDT图中ndtmap.使用NDT算法。函数将搜索空间限制为子映射,由SelectedSubmap财产的财产ndtmap.对象。

curr=心探(___名称,值除了前面语法中的输入参数外,还使用一个或多个名称-值参数指定选项。例如,“MaxIterations',30.设置函数停止NDT算法之前的最大迭代次数。

例子

全部收缩

从MAT文件加载正态分布转换(NDT)映射。

data =负载(“ndtMapParkingLot.mat”);ndtmap = data.ndtmapparkinglot;

加载点云扫描和来自第二个垫文件的姿势估计。

data =负载(“parkingLotData.mat”);ptCloudScans = data.parkingLotData.ptCloudScans;initPoseEsts = data.parkingLotData.initPoseEsts;

显示NDT地图。

展示(ndtmap)

将视角改为俯视图。

视图(2)

选择以第一次估算为中心的子地图。

中心=初始化(1).Translation;SZ = [70 50 20];ndtmap = selectsubmap(ndtmap,center,sz);

设置用于可视化当前位置的半径和距离阈值以更新子图。

半径= 0.5;distThresh = 15;

在点云上循环,在地图中定位它们,并根据需要更新选定的子地图。

numscans = numel(ptcloudscans);n = 1:numscans ptcloud = ptcloudscans(n);敏感= inituteests(n);posetranslation =敏感。翻译;[Isinside,DistOdege] = IsInsidesubMap(NDTMAP,POSetranslation);submapneedsupdate =〜Isinside...当前姿势在子映射之外|| any(distToEdge(1:2) < distThresh);当前姿势接近子地图边缘如果submapneedsupdate ndtmap = selectsubmap(ndtmap,posetranslation,sz);结束%本地化地图中的点云扫描。currPose = findPose (ndtMap ptCloud initPose);%显示估计的位置为一个圆。pos = [currpos . translation (1:2) radius];showShape (“圆”、pos、'颜色'“r”);%暂停以查看更改。暂停(0.05)结束

图中包含一个轴对象。axis对象包含一个散点类型的对象。

输入参数

全部收缩

NDT图,指定为apcmapndt.对象。

点云在传感器坐标系中,指定为pointcloud.对象。

对地图中传感器姿态的初步估计,指定为rigid3d对象。

名称-值参数

指定可选的逗号分隔的对名称,值论点。的名字参数名和价值是相应的价值。的名字必须出现在引号内。您可以以任何顺序指定多个名称和值对参数name1,value1,...,namen,valuen

例子:“MaxIterations”,30岁在30次迭代后停止NDT算法。

相对于一个正态分布的异常值的预期百分比,指定为范围[0,1)内的标量。NDT算法假设一个点是由嵌线的正态分布和异常值的均匀分布混合生成的。较大的值“OutlierRatio”减少异常值的影响。

数据类型:|双倍的

NDT算法停止前的最大迭代次数,指定为非负整数。

数据类型:|双倍的

连续NDT迭代之间的公差,指定为具有非负值的2元素向量。矢量,[TdiffRDIFF.,分别表示在连续的NDT迭代中估计的平移和旋转绝对差的公差。Tdiff测量两种平移载体之间的欧几里德距离。RDIFF.测量角度的角度差异。当最近连续迭代中的估计刚性变换之间的差异低于指定的公差值时,算法停止。

数据类型:|双倍的

显示进度信息,指定为逻辑0) 或者1真的).集'verbose'真的显示进度信息。

数据类型:逻辑

输出参数

全部收缩

传感器在地图上的姿态,返回为arigid3d对象。函数将搜索空间限制为子映射,由SelectedSubmap的属性ndtmap.

提示

  • 为了提高定位精度和效率,考虑对点云进行下采样pcdownsample在使用此函数之前。

参考

比伯,P.和W.斯特拉瑟。正态分布变换:激光扫描匹配的新方法。在IEEE/RSJ智能机器人与系统国际会议(IROS 2003) (Cat。No.03CH37453)3卷,2743 - 48。拉斯维加斯,内华达州,美国:IEEE, 2003。https://doi.org/10.1109/IROS.2003.1249285。

[1] Magnusson,Martin。“三维正常分布变换:高效表示重构,表面分析和环路检测。”博士论文,ÖrebroUniversitet,2009。http://urn.kb.se/resolve?urn=urn :nbn:soor:diva-8458 urn:nbn:se:oru:diva-8458。

扩展功能

C / C ++代码生成
使用MATLAB®Coder™生成C和C ++代码。

在R2021A介绍