Main Content

removeLoopClosures

姿勢グラフからのループ閉じ込みの削除

R2019b 以降

説明

removeLoopClosures(slamObj) は、slamObj の基となる姿勢グラフからすべてのループ閉じ込みを削除します。

removeLoopClosures(slamObj,lcEdgeIDs) は、指定された ID をもつループ閉じ込みエッジを slamObj の基となる姿勢グラフから削除します。

すべて折りたたむ

ファイルからレーザー スキャン データを読み込みます。

load("offlineSlamData.mat");

SLAM アルゴリズムを設定するには、以下のようにします。

  1. LiDAR の範囲、マップの分解能、ループ閉じ込みのしきい値および探索半径を指定します。

  2. これらのパラメーターを、実際のロボットと環境に合わせて調整します。

  3. 次のパラメーターを指定して lidarSLAM オブジェクトを作成します。

maxLidarRange = 8;
mapResolution = 20;
slamObj = lidarSLAM(mapResolution,maxLidarRange);
slamObj.LoopClosureThreshold = 210;  
slamObj.LoopClosureSearchRadius = 8;

SLAM オブジェクトにスキャンを反復的に追加します。

for i = 1:numel(scans)
    addScan(slamObj,scans{i});
end

SLAM オブジェクトのコピーを作成します。SLAM オブジェクトの基となる姿勢グラフを表示します。

slamObj2 = copy(slamObj);
slamObj2.PoseGraph
ans = 
  poseGraph with properties:

               NumNodes: 71
               NumEdges: 83
    NumLoopClosureEdges: 13
     LoopClosureEdgeIDs: [31 36 63 65 67 69 71 73 75 77 79 81 83]
        LandmarkNodeIDs: [1x0 double]

エッジ ID を指定して最初の 2 つのループ閉じ込みを削除します。

lcEdgeIDs = slamObj2.PoseGraph.LoopClosureEdgeIDs(1:2);
removeLoopClosures(slamObj2,lcEdgeIDs)

ループ閉じ込みを削除する前と削除した後に、SLAM オブジェクトの姿勢グラフをプロットします。

subplot(2,1,1)
show(slamObj.PoseGraph);
subplot(2,1,2)
show(slamObj2.PoseGraph);

Figure contains 2 axes objects. Axes object 1 with xlabel X, ylabel Y contains 42 objects of type line, text. One or more of the lines displays its values using only markers Axes object 2 with xlabel X, ylabel Y contains 36 objects of type line, text. One or more of the lines displays its values using only markers

入力引数

すべて折りたたむ

LIDAR SLAM オブジェクト。lidarSLAM オブジェクトとして指定します。このオブジェクトには、マップの作成に使用される、SLAM アルゴリズム パラメーター、センサー データ、基となる姿勢グラフが格納されています。

ループ閉じ込みエッジ ID。正の整数のベクトルとして指定します。特定のエッジ ID を検索するには、slamObj で定義されている基となる poseGraph オブジェクトに対して findEdgeID を使用します。

拡張機能

バージョン履歴

R2019b で導入