Main Content

Cette page a été traduite par traduction automatique. Cliquez ici pour voir la dernière version en anglais.

copy

Copier l'objet SLAM lidar

Depuis R2019b

Description

exemple

newSlamObj = copy(slamObj) crée une copie complète de slamObj avec les mêmes propriétés. Toutes les modifications apportées à newSlamObj ne sont pas reflétées dans slamObj.

Exemples

réduire tout

Créez un objet 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

Créez une copie de l'objet 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

Chargez les données de numérisation laser à partir d'un fichier.

load("offlineSlamData.mat");

Pour configurer l'algorithme SLAM :

  1. Spécifiez la plage lidar, la résolution de la carte, le seuil de fermeture de boucle et le rayon de recherche.

  2. Ajustez ces paramètres pour votre robot et votre environnement spécifiques.

  3. Créez l'objet lidarSLAM avec ces paramètres.

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

Ajoutez des analyses de manière itérative à l'objet SLAM.

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

Créez une copie de l'objet SLAM. Affichez le graphique de pose sous-jacent de l'objet 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]

Supprimez les deux premières fermetures de boucle en spécifiant leurs ID de bord.

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

Tracez les graphiques de pose de l'objet SLAM avant et après la suppression des fermetures de boucle.

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

Arguments d'entrée

réduire tout

Objet Lidar SLAM, spécifié comme objet lidarSLAM . L'objet contient les paramètres de l'algorithme SLAM, les données du capteur et le graphique de pose sous-jacent utilisé pour créer la carte.

Arguments de sortie

réduire tout

Objet Lidar SLAM, renvoyé sous la forme d'un objet lidarSLAM .

Capacités étendues

Historique des versions

Introduit dans R2019b