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.

factorPoseSE2AndPointXY

Factor que relaciona la posición SE(2) y el punto 2-D

Desde R2022b

    Descripción

    El objeto factorPoseSE2AndPointXY contiene factores que describen la relación entre una posición en el espacio de estados SE(2) y un punto de referencia 2-D. Puede utilizar este objeto para agregar uno o más factores a un objeto factorGraph.

    Creación

    Descripción

    F = factorPoseSE2AndPointXY(nodeID) crea un objeto factorPoseSE2AndPointXY, F, con la propiedad de números de identificación de nodo NodeID establecida en nodeID.

    F = factorPoseSE2AndPointXY(___,Name=Value) especifica propiedades utilizando uno o más argumentos de nombre-valor además del argumento de la sintaxis anterior. Por ejemplo, factorPoseSE2AndPointXY([1 2],Measurement=[1 5]) establece la propiedad Measurement del objeto factorPoseSE2AndPointXY en [1 5].

    ejemplo

    Propiedades

    expandir todo

    Esta propiedad o parámetro es de solo lectura.

    Números de identificación de nodo, especificados como una matriz N por 2 de números enteros no negativos, donde N es el número total de factores deseados. Cada fila representa un factor que conecta un nodo de tipo POSE_SE2 a un nodo de tipo POINT_XY en la forma [PoseID PointID], donde PoseID es el ID del nodo POSE_SE2 y PointID es el ID del nodo POINT_XY en el gráfico de factores.

    Si un factor en el objeto factorPoseSE2AndPointXY especifica un ID que no corresponde a un nodo en el gráfico de factores, el gráfico de factores crea automáticamente un nodo del tipo requerido con ese ID y lo agrega al gráfico de factores al agregar el factor al gráfico de factores.

    Debe especificar esta propiedad en la creación del objeto.

    Para obtener más información sobre los tipos de nodos esperados de todos los factores admitidos, consulte Tipos de nodos esperados de objetos de factores.

    Posición relativa medida entre la posición actual y el punto de referencia, especificada como una matriz de N por 2 donde cada fila tiene el formato [dx dy], en metros. N es el número total de factores, y dx y dy son el cambio de posición en x y y, respectivamente.

    Matriz de información asociada a la incertidumbre de las mediciones, especificada como una matriz de 2 por 2 o una matriz de 2 por 2 por N. N es el número total de factores especificados por el objeto factorPoseSE2AndPointXY. Cada matriz de información corresponde a las medidas del nodo correspondiente en NodeID.

    Si especifica esta propiedad como una matriz de 2 por 2 cuando NodeID contiene más de una fila, la matriz de información corresponde a todas las mediciones en Measurement.

    Esta matriz de información es la inversa de la matriz de covarianza, donde la matriz de covarianza tiene la forma:

    [σ(x,x)σ(x,y)σ(y,x)σ(y,y)]

    Cada elemento indica la covarianza entre dos variables. Por ejemplo, σ(x,y) es la covarianza entre x y y.

    Funciones del objeto

    nodeTypeObtener el tipo de nodo en el gráfico de factores

    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: 1.9908e-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

    Capacidades ampliadas

    expandir todo

    Generación de código C/C++
    Genere código C y C++ mediante MATLAB® Coder™.

    Historial de versiones

    Introducido en R2022b

    expandir todo