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.

marginalizeNode

Marginar el nodo y los factores relacionados del gráfico de factores al factor marginal

Desde R2025a

    Descripción

    factorID = marginalizeNode(fg,nodeID) genera un factor marginal utilizando la información del nodo especificado y sus factores relacionados, y luego agrega el factor marginal 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

    [___,removedNodeIDs] = marginalizeNode(fg,nodeID) también devuelve los ID de los nodos que se eliminaron junto con el nodo especificado.

    [___,removedFactorIDs] = marginalizeNode(fg,nodeID) también devuelve los identificadores de factores de los nodos que se eliminaron junto con el nodo especificado.

    Ejemplos

    contraer todo

    Cree un gráfico de factores y cargue datos del 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 poses.

    nIDs = generateNodeID(fg,3,"factorTwoPoseSE3") + 1;
    fRelPose = factorTwoPoseSE3(nIDs,Measurement=repmat(relMeasure,3,1));
    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 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]);
    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 pose al final del gráfico de factores.

    fRelPose2 = factorTwoPoseSE3([nIDs(end) nIDs(end)+1],Measurement=relMeasure);
    addFactor(fg,fRelPose2);

    Marginar el primer nodo, lo que también margina los dos factores conectados, un factor de pose relativo y un factor de pose anterior. Tenga en cuenta que el factor de pose anterior proporciona al gráfico de factores información de pose absoluta.

    [fMarginalID,removedNodeID,removedFactorIDs] = marginalizeNode(fg,nIDs(1));
    nodeState(fg,nIDs(end),state(end,:)); % Set the initial guess state of the new pose node

    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 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 First Node"])
    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 First Node 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 del nodo a marginar, especificado como un entero no negativo.

    Nota

    El nodo especificado no debe estar reparado antes de la marginación. Para marginar un nodo fijo, libere el nodo utilizando la función fixNode antes de la marginalización. Si el estado del nodo es preciso y la marginación debe incorporar esta información, cree un factor previo, como factorPoseSE3Prior, 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 el nodo especificado, 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 el nodo especificado y sus factores relacionados.

    Identificadores de factores marginados, devueltos como un vector de elementos P de números enteros no negativos. P es el número total de factores marginados durante el proceso de marginación del nodo.

    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