Contenido principal

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

factorGraph

Marco basado en gráficos para la estimación del estado de múltiples sensores

Desde R2022a

Descripción

Un objeto factorGraph almacena un gráfico bipartito que consta de factores conectados a nodos variables. Los nodos representan las variables aleatorias desconocidas en un problema de estimación, como las poses de los robots, y los factores representan restricciones probabilísticas en esos nodos, derivadas de mediciones o conocimientos previos. Durante la optimización, el gráfico de factores utiliza todos los factores y los estados actuales de los nodos para actualizar los estados de los nodos.

Para obtener más información sobre el gráfico de factores y cómo usarlo, consulte Gráfico de factores para SLAM.

Creación

Descripción

fg = factorGraph crea un objeto factorGraph vacío.

ejemplo

Propiedades

expandir todo

Esta propiedad o parámetro es de solo lectura.

Número de nodos en el gráfico de factores, especificado como un entero positivo. NumNodes tiene un valor de 0 cuando el gráfico de factores está vacío y NumNodes aumenta cada vez que agrega un factor que especifica nuevos ID de nodos al gráfico de factores.

Los nodos en el gráfico de factores pueden ser cualquiera de estos tipos:

  • "POSE_SE2" — Pose en el espacio de estados SE(2)

  • "POSE_SE3" — Pose en el espacio de estados SE(3)

  • "POSE_SE3_SCALE" — Escala de pose en el espacio de estados SE(3)

  • "TRANSFORM_SE3" — Transformación del sensor en el espacio de estados SE(3)

  • "VEL3" — Velocidad 3D

  • "POINT_XY" — Punto 2-D

  • "POINT_XYZ" — Punto 3D

  • "IMU_BIAS" — Sesgo del giroscopio y del acelerómetro de la IMU

Para comprobar el tipo de nodo de un nodo en el gráfico, utilice la función nodeType.

Nota

El gráfico de factores establece el tipo de nodo cuando agrega el objeto de factor que especifica ese nodo al gráfico de factores. No puede cambiar el tipo de nodo de un nodo después de agregarlo al gráfico.

Esta propiedad o parámetro es de solo lectura.

Número de factores en el gráfico de factores, especificado como un entero positivo. NumFactors tiene un valor de 0 cuando el gráfico de factores está vacío y NumFactors aumenta cada vez que se agrega un factor al gráfico de factores.

Puede utilizar addfactor para agregar cualquiera de estos objetos de factor al gráfico de factores:

Relacionar poses entre sí

  • factorTwoPoseSE2 — Conecta pares de nodos de pose SE(2) ("POSE_SE2") usando mediciones de pose relativas. Puede calcular la postura relativa utilizando el registro de escaneo LiDAR 2-D usando funciones como matchScans.

  • factorTwoPoseSE3 — Conecta pares de nodos de pose SE(3) ("POSE_SE3") usando mediciones de pose relativas. Puede calcular la postura relativa utilizando el registro de escaneo LiDAR 3D usando funciones como pcregistericp (Computer Vision Toolbox) y estrelpose (Computer Vision Toolbox).

  • factorTwoPoseSIM3 — Conecta pares de nodos de pose SIM(3) usando mediciones de pose relativas. Un nodo de pose SIM(3) se representa utilizando una combinación de un nodo de pose SE(3) ("POSE_SE3") y un nodo de escala de pose SE(3) ("POSE_SE3_SCALE"). Puede utilizar la función estgeotform3d (Computer Vision Toolbox) para calcular la medida de la pose relativa para este factor.

Relacionar poses con posiciones de punto de referencia

  • factorCameraSE3AndPointXYZ — Conecte el nodo de pose SE(3) de una cámara estenopeica ("POSE_SE3") a nodos de referencia 3D ("Point_XYZ"), o el nodo de pose SE(3) de una cámara estenopeica ("POSE_SE3"), nodos de referencia 3D ("Point_XYZ") y un nodo de transformación de sensor SE(3) ("TRANSFORM_SE3") utilizando las mediciones de puntos de imagen 2D de la cámara.

  • factorPoseSE2AndPointXY — Conecta un nodo de pose SE(2) ("POSE_SE2") a nodos de referencia 2-D ("POINT_XY") utilizando mediciones de posición 2-D en el marco de referencia del nodo de pose.

  • factorPoseSE3AndPointXYZ — Conecta un nodo de pose SE(3) ("POSE_SE3") a nodos de referencia 3D ("POINT_XYZ") utilizando mediciones de posición 3D en el marco de referencia del nodo de pose.

Relacionar poses con mediciones de sensores

  • factorGPS — Conecta un nodo de pose SE(3) ("POSE_SE3") a una medición GPS.

  • factorIMU — Conecte dos nodos de pose SE(3) ("POSE_SE3"), dos nodos de velocidad 3D ("VEL3") y dos nodos de sesgo IMU ("IMU_BIAS") usando mediciones IMU. Estas mediciones consisten en datos del acelerómetro y del giroscopio que capturan cambios en la postura y la velocidad.

Relacionar poses o velocidades con medidas conocidas anteriormente

Si una pose, un sesgo de IMU o una velocidad es una cantidad conocida, agregue uno de estos factores anteriores para fijar suavemente los estados del nodo, permitiendo ligeras variaciones solo si hacerlo reduce significativamente el costo general:

  • factorIMUBiasPrior — Conecta los nodos de pose SE(3) ("POSE_SE3"), los nodos de velocidad 3-D ("VEL3") y los nodos de sesgo de IMU ("IMU_BIAS") a mediciones de IMU conocidas previamente.

  • factorPoseSE3Prior — Conecta los nodos de pose SE(3) ("POSE_SE3") a las mediciones de pose SE(3) conocidas previamente.

  • factorVelocity3Prior — Conecta un nodo de velocidad 3-D ("VEL_3") a mediciones de velocidad SE(3) conocidas previamente.

Funciones del objeto

expandir todo

generateNodeIDGenerar nuevos ID de nodo
hasNodeCompruebe si el ID del nodo existe en el gráfico de factores
nodeIDsObtener ID de nodo en el gráfico de factores
nodeStateObtener o establecer el estado del nodo en el gráfico de factores
nodeTypeObtener el tipo de nodo en el gráfico de factores
fixNodeArreglar o liberar nodos en el gráfico de factores
isNodeFixedCompruebe si el nodo está arreglado
removeNodeEliminar nodo del gráfico factorial
addFactorAgregar factor al gráfico de factores
removeFactorEliminar factor del gráfico de factores
optimizeOptimizar gráfico de factores
marginalizeFactorMarginar factores del gráfico de factores en factor marginal
marginalizeNodeMarginar el nodo y los factores relacionados del gráfico de factores al factor marginal
isConnectedCompruebe si el gráfico de factores está conectado
nodeCovarianceObtener la covarianza de estado de los nodos en el gráfico factorial
showTrazar nodos de pose, bordes de nodos de pose y nodos de referencia del gráfico factorial

Ejemplos

contraer todo

Cree una matriz de posiciones de los puntos de referencia para usar en la localización y las poses reales del robot para comparar la estimación del gráfico de factores. Utilice la función auxiliar exampleHelperPlotGroundTruth para visualizar los puntos de referencia y la trayectoria real del robot.

gndtruth = [0 0 0; 
            2 0 pi/2; 
            2 2 pi; 
            0 2 pi];
landmarks = [3 0; 0 3];
exampleHelperPlotGroundTruth(gndtruth,landmarks)

Figure contains an axes object. The axes object contains 22 objects of type patch, line, text, scatter. These objects represent Ground Truth, Ground Truth Landmarks.

Utilice la función auxiliar exampleHelperSimpleFourPoseGraph para crear un gráfico de factores que contenga cuatro poses relacionadas por tres factores de dos poses en 2D. Para obtener más detalles, consulte la página del objeto factorTwoPoseSE2.

fg = exampleHelperSimpleFourPoseGraph(gndtruth);

Crear factores punto de referencia

Genere ID de nodo para crear dos ID de nodo para dos puntos de referencia. Los nodos de pose segunda y tercera observan el primer punto de referencia, por lo que deben conectarse a ese punto de referencia con un factor. Los nodos de pose tercero y cuarto observan el segundo punto de referencia.

lmIDs = generateNodeID(fg,2);
lmFIDs = [1 lmIDs(1);  % Pose Node 1 <-> Landmark 1 
          2 lmIDs(1);  % Pose Node 2 <-> Landmark 1
          2 lmIDs(2);  % Pose Node 2 <-> Landmark 2
          3 lmIDs(2)]; % Pose Node 3 <-> Landmark 2

Defina las medidas de posición relativa entre la posición de las poses y sus puntos de referencia en el marco de referencia del nodo de pose. Luego agrega algo de ruido.

lmFMeasure = [0  -1; % Landmark 1 in pose node 1 reference frame 
             -1   2; % Landmark 1 in pose node 2 reference frame
              2  -1; % Landmark 2 in pose node 2 reference frame
              0  -1]; % Landmark 2 in pose node 3 reference frame
lmFMeasure = lmFMeasure + 0.1*rand(4,2);

Cree los factores de referencia con esas medidas relativas y agréguelos al gráfico de factores.

lmFactor = factorPoseSE2AndPointXY(lmFIDs,Measurement=lmFMeasure);
addFactor(fg,lmFactor);

Establezca el estado inicial de los nodos de puntos de referencia en la posición real de los puntos de referencia con algo de ruido.

nodeState(fg,lmIDs,landmarks+0.1*rand(2));

Optimizar gráfico de factores

Optimice el gráfico de factores con las opciones de solver predeterminadas. La optimización actualiza los estados de todos los nodos en el gráfico de factores, por lo que se actualizan las posiciones del vehículo y los puntos de referencia.

rng default
optimize(fg)
ans = struct with fields:
             InitialCost: 0.0538
               FinalCost: 6.2053e-04
      NumSuccessfulSteps: 4
    NumUnsuccessfulSteps: 0
               TotalTime: 4.9480e-04
         TerminationType: 0
        IsSolutionUsable: 1
        OptimizedNodeIDs: [1 2 3 4 5]
            FixedNodeIDs: 0

Visualice y compare resultados

Obtenga y almacene los estados de nodo actualizados para el robot y los puntos de referencia. Luego, trace los resultados, comparando la estimación del gráfico de factores de la trayectoria del robot con ground-truth del robot.

poseIDs = nodeIDs(fg,NodeType="POSE_SE2")
poseIDs = 1×4

     0     1     2     3

poseStatesOpt = nodeState(fg,poseIDs)
poseStatesOpt = 4×3

         0         0         0
    2.0815    0.0913    1.5986
    1.9509    2.1910   -3.0651
   -0.0457    2.0354   -2.9792

landmarkStatesOpt = nodeState(fg,lmIDs)
landmarkStatesOpt = 2×2

    3.0031    0.1844
   -0.1893    2.9547

handle = show(fg,Orientation="on",OrientationFrameSize=0.5,Legend="on");
grid on;
hold on;
exampleHelperPlotGroundTruth(gndtruth,landmarks,handle);

Figure contains an axes object. The axes object contains 17 objects of type patch, line, scatter. One or more of the lines displays its values using only markers These objects represent Opt. Pose, Opt. Pose Edge, Opt. Landmarks, Ground Truth, Ground Truth Landmarks.

Más acerca de

expandir todo

Sugerencias

  • Para especificar varios factores y nodos a la vez para un tipo de factor específico, utilice la función generateNodeID y especifique la cantidad de factores y el tipo de factor. Consulte la función generateNodeID para obtener más detalles.

    poseIDPairs = generateNodeID(fg,3,"factorTwoPoseSE2");
    ftpse2 = factorTwoPoseSE2(poseIDPairs);
  • Puede obtener los estados de todos los nodos de pose utilizando primero la función nodeIDs y especificando el tipo de nodo como "POSE_SE2" para poses de robot SE(2) y "POSE_SE3" para poses de robot SE(3). Luego, use la función nodeState con esos ID de nodo para obtener los estados de los nodos de pose del robot.

    poseIDs = nodeIDs(fg,NodeType="POSE_SE2");
    poseStates = nodeState(fg,poseIDs);
  • Verifique los tipos de nodos que cada factor crea o a los que se conecta antes de agregar factores al gráfico de factores para evitar errores de discrepancia de tipos de nodos. Para obtener una lista de los tipos de nodos esperados para cada factor, consulte Tipos de nodos esperados de objetos de factores.

Referencias

[1] Dellaert, Frank. Factor graphs and GTSAM: A Hands-On Introduction. Georgia: Georgia Tech, September, 2012.

Capacidades ampliadas

expandir todo

Historial de versiones

Introducido en R2022a

expandir todo