Main Content

copy

LIDAR SLAM オブジェクトをコピー

R2019b 以降

説明

newSlamObj = copy(slamObj) は、slamObj のディープ コピーを同じプロパティで作成します。newSlamObj に加えられた変更は、いずれも slamObj には反映されません。

すべて折りたたむ

lidarSLAM オブジェクトを作成します。

slamObj = lidarSLAM
slamObj = 
  lidarSLAM with properties:

                  PoseGraph: [1x1 poseGraph]
              MapResolution: 20
              MaxLidarRange: 8
            OptimizationFcn: @optimizePoseGraph
       LoopClosureThreshold: 100
    LoopClosureSearchRadius: 8
     LoopClosureMaxAttempts: 1
    LoopClosureAutoRollback: 1
       OptimizationInterval: 1
          MovementThreshold: [0 0]
     ScanRegistrationMethod: 'BranchAndBound'
     TranslationSearchRange: [4 4]
        RotationSearchRange: 1.5708

LIDAR SLAM オブジェクトのコピーを作成します。

slamObjNew = copy(slamObj)
slamObjNew = 
  lidarSLAM with properties:

                  PoseGraph: [1x1 poseGraph]
              MapResolution: 20
              MaxLidarRange: 8
            OptimizationFcn: @optimizePoseGraph
       LoopClosureThreshold: 100
    LoopClosureSearchRadius: 8
     LoopClosureMaxAttempts: 1
    LoopClosureAutoRollback: 1
       OptimizationInterval: 1
          MovementThreshold: [0 0]
     ScanRegistrationMethod: 'BranchAndBound'
     TranslationSearchRange: [4 4]
        RotationSearchRange: 1.5708

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

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 アルゴリズム パラメーター、センサー データ、基となる姿勢グラフが格納されています。

出力引数

すべて折りたたむ

LIDAR SLAM オブジェクト。lidarSLAM オブジェクトとして返されます。

拡張機能

バージョン履歴

R2019b で導入