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.

marginalizeFactor

Marginar factores del gráfico de factores en factor marginal

Desde R2025a

    Descripción

    factorID = marginalizeFactor(fg,factorIDs) genera un factor marginal utilizando la información de los factores especificados y lo agrega al gráfico de factores. La función también elimina los factores especificados y cualquier nodo que, como resultado del proceso de marginación, quede desconectado de cualquier factor en el gráfico de factores.

    ejemplo

    [factorID,removedNodeIDs] = marginalizeFactor(fg,factorIDs) devuelve opcionalmente los ID de cualquier nodo que haya sido eliminado al marginar los factores especificados.

    Ejemplos

    contraer todo

    Cree un gráfico de factores y cargue datos de estado inicial.

    fg = factorGraph;
    load exampleSimple3DFGStateData.mat

    Para simplificar, cree una medida relativa para usar para todos los factores de pose.

    relMeasure = [0.75 0 0 eul2quat([pi/8 -pi/12 0],"ZYX")];

    Cree un gráfico de factores de cuatro poses utilizando tres factores de pose.

    nIDs = generateNodeID(fg,3,"factorTwoPoseSE3") + 1;
    fRelPose = factorTwoPoseSE3(nIDs,Measurement=repmat(relMeasure,3,1));
    fRelPoseID = addFactor(fg,fRelPose);
    nIDs = nodeIDs(fg,NodeType="POSE_SE3");  % Get node IDs out of pose pair format
    nodeState(fg,nIDs,state(1:4,:));         % Set initial guess states of pose nodes

    Agregue un factor anterior al primer nodo, optimice y luego muestre el gráfico de factores.

    fPrior = factorPoseSE3Prior(nIDs(1),Measurement=[0 0 0 1 0 0 0]);
    fPriorPoseID = addFactor(fg,fPrior);
    optimize(fg);
    ax = show(fg,Orientation="on");
    title("Factor Graph Poses Before Marginalization")
    axis([-0.05 2.0 -0.05 1.5 0 1.5])
    view(-15,45)

    Figure contains an axes object. The axes object with title Factor Graph Poses Before Marginalization contains 18 objects of type patch, line. One or more of the lines displays its values using only markers

    Añade una nueva pose al final del gráfico de factores.

    fRelPose2 = factorTwoPoseSE3([nIDs(end) nIDs(end)+1],Measurement=relMeasure);
    fRelPoseID = [fRelPoseID addFactor(fg,fRelPose2)];
    nodeState(fg,nIDs(end),state(end,:)); % Set the initial state of the new pose node

    Marginar el primer factor de pose relativo y el factor de pose anterior, que proporciona información de pose absoluta. El proceso de marginación elimina el primer nodo de pose del gráfico de factores. Este proceso reduce el tamaño del gráfico de factores, pero conserva la información de los factores y nodos eliminados reemplazándolos con un factor marginal.

    [fMarginalID,removedNodeID] = marginalizeFactor(fg,[fPriorPoseID fRelPoseID(1)]);

    Optimizar y mostrar el gráfico de factores. Tenga en cuenta que los estados del segundo, tercer, cuarto y quinto nodos conservan sus posiciones porque la optimización del gráfico incorpora el nuevo factor marginal, que incluye la información de posición absoluta del nodo marginado y los factores.

    optimize(fg);
    show(fg,Parent=ax,Orientation="on");
    title(["Optimization After Adding New Node and","Marginalizing Relative Pose Factor and Prior Pose Factor"])
    axis([-0.05 2.0 -0.05 1.5 0 1.5])
    view(-15,45)

    Figure contains an axes object. The axes object with title Optimization After Adding New Node and Marginalizing Relative Pose Factor and Prior Pose Factor contains 18 objects of type patch, line. One or more of the lines displays its values using only markers

    Argumentos de entrada

    contraer todo

    Gráfico factorial, especificado como un objeto factorGraph.

    ID de los factores a marginar, especificado como un arreglo de N elementos de enteros no negativos. N es el número total de factores a marginar.

    Nota

    Asegúrese de que los nodos que quedarán marginados como resultado de marginalizeFactor no se arreglen. Cualquier nodo fijo que permanezca en el gráfico después de la marginación puede permanecer fijo.

    Si debe marginar un nodo que actualmente está fijo, primero libere el nodo usando la función fixNode. Si el estado del nodo fijo es preciso y la marginalización debe incorporar esta información, cree un factor previo, como el factor de posición previa SE(3), y conéctelo al nodo.

    Argumentos de salida

    contraer todo

    ID del factor marginal agregado al gráfico de factores, devuelto como un entero no negativo.

    Identificadores de los nodos eliminados que se desconectaron después de marginar los factores especificados, devueltos como un vector de elementos M de números enteros no negativos. M es la cantidad de nodos que quedarían completamente desconectados como resultado de marginar los factores relacionados.

    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 R2025a