Main Content

Esta página se ha traducido mediante traducción automática. Haga clic aquí para ver la última versión en inglés.

copy

Copiar objeto lidar SLAM

Desde R2019b

Descripción

ejemplo

newSlamObj = copy(slamObj) crea una copia profunda de slamObj con las mismas propiedades. Cualquier cambio realizado en newSlamObj no se refleja en slamObj.

Ejemplos

contraer todo

Cree un objeto 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

Cree una copia del objeto 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

Cargue datos de escaneo láser desde un archivo.

load("offlineSlamData.mat");

Para configurar el algoritmo SLAM:

  1. Especifique el rango lidar, la resolución del mapa, el umbral de cierre del bucle y el radio de búsqueda.

  2. Ajuste estos parámetros para su robot y entorno específicos.

  3. Cree el objeto lidarSLAM con estos parámetros.

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

Agregue escaneos de forma iterativa al objeto SLAM.

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

Crea una copia del objeto SLAM. Muestra el gráfico de pose subyacente del objeto 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]

Elimine los dos primeros cierres de bucle especificando sus ID de borde.

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

Trace los gráficos de pose del objeto SLAM antes y después de eliminar los cierres de bucle.

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

Argumentos de entrada

contraer todo

Objeto Lidar SLAM, especificado como un objeto lidarSLAM . El objeto contiene los parámetros del algoritmo SLAM, los datos del sensor y el gráfico de pose subyacente utilizado para construir el mapa.

Argumentos de salida

contraer todo

Objeto Lidar SLAM, devuelto como un objeto lidarSLAM .

Capacidades ampliadas

Historial de versiones

Introducido en R2019b