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.

geom2struct

Convertir objetos de geometría de colisión en un arreglo de estructuras

Desde R2024a

    Descripción

    meshStruct = geom2struct(geom) convierte un arreglo de celdas de geometrías de colisión en un arreglo de estructuras.

    ejemplo

    meshStruct = geom2struct(geom,id) especifica identificadores para las geometrías de colisión especificadas.

    meshStruct = geom2struct(___,LocalOffsetPose=poseOffset) especifica desplazamientos locales como matrices de transformación homogéneas 3-D para aplicar a los vértices de las geometrías correspondientes.

    Ejemplos

    contraer todo

    Crea dos cuadros de colisión y una esfera de colisión. Los cuadros de colisión representan un entorno estático y la esfera representa un obstáculo dinámico con una pose que podría cambiar en cualquier momento.

    box1 = collisionBox(0.5,1,0.1);
    box2 = collisionBox(0.5,0.1,0.2,Pose=trvec2tform([0 -0.45 0.15]));
    sph = collisionSphere(0.125,Pose=trvec2tform([-0.1 0.25 0.75]));
    showCollisionArray({box1,box2,sph});
    title("Static Environment and Dynamic Obstacle")
    v = [110 10];
    view(v);

    Figure contains an axes object. The axes object with title Static Environment and Dynamic Obstacle, xlabel X, ylabel Y contains 3 objects of type patch.

    Cree un administrador de TSDF de malla con una resolución de 25 celdas por metro.

    tsdfs = meshtsdf(Resolution=25);

    Para mejorar la eficiencia del cálculo del campo de distancia con signo, combine mallas que representen el entorno estático.

    staticMeshes = geom2struct({box1,box2});
    staticEnv = staticMeshes(1);
    staticEnv.Pose = eye(4);
    staticEnv.Vertices = [];
    staticEnv.Faces = [];
    for i = 1:numel(staticMeshes)
        H = staticMeshes(i).Pose;
        V = staticMeshes(i).Vertices*H(1:3,1:3)'+ H(1:3,end)';
        nVert = size(staticEnv.Vertices,1);
        staticEnv.Vertices = [staticEnv.Vertices; V];
        staticEnv.Faces = [staticEnv.Faces; staticMeshes(i).Faces+nVert];
    end
    staticEnv.ID = 1;

    Agregue la malla de entorno estático al administrador TSDF.

    addMesh(tsdfs,staticEnv);

    Convierte la geometría de colisión de esfera en una estructura para el administrador de malla TSDF. Asígnele un ID de 2 y agréguelo al administrador de malla TSDF.

    obstacleID = 2;
    dynamicObstacle = geom2struct(sph,obstacleID);
    addMesh(tsdfs,dynamicObstacle);
    show(tsdfs)
    view(v)
    axis equal
    title("Mesh TSDFs of Static Environment and Dynamic Obstacle")

    Figure contains an axes object. The axes object with title Mesh TSDFs of Static Environment and Dynamic Obstacle contains 2 objects of type scatter.

    Actualice la pose del obstáculo dinámico en el administrador de malla TSDF cambiando la propiedad Pose del controlador de objeto del obstáculo. Luego, utilice la función updatePose para actualizar la pose de la malla en el administrador TSDF.

    dynamicObstacle.Pose = trvec2tform([0.2 0.25 0.2]);
    updatePose(tsdfs,dynamicObstacle)
    ans = 
    1
    
    show(tsdfs)
    view(v)
    axis equal
    title("Updated Dynamic Obstacle Pose")

    Figure contains an axes object. The axes object with title Updated Dynamic Obstacle Pose contains 2 objects of type scatter.

    Argumentos de entrada

    contraer todo

    Objeto de geometría de colisión, especificado como objeto de geometría de colisión o como un arreglo de celdas de objetos de geometría de colisión de N elementos. N es el número de objetos de colisión en el arreglo de celdas. Un objeto de colisión debe ser uno de estos objetos:

    ID de estructura geométrica, especificado como un entero positivo o un vector de N elementos de enteros positivos. N es el número de objetos de colisión en geom.

    Si id es un vector de N elementos de números enteros positivos, entonces cada ID en id debe ser único.

    Si no se especifica id, el ID de la estructura se establece en 1:N. Por ejemplo, geom2struct({geom1,geom2,geom3}) crea tres estructuras correspondientes a geom1, geom2 y geom3 con ID establecidos en 1, 2 y 3, respectivamente.

    Desplazamiento de pose local, especificado como una matriz de transformación homogénea de 4 por 4 o como un objeto se3.

    Si geom es un arreglo de celdas de N elementos, entonces poseOffset debe ser una matriz de matrices de transformación homogéneas de 4 por 4 por N o un arreglo de N elementos de objetos se3.

    Argumentos de salida

    contraer todo

    Estructura de malla geométrica, devuelta como una estructura o un arreglo de estructuras de N elementos. N es el número de objetos de colisión en geom.

    Cada estructura contiene estos campos:

    • ID — ID de la estructura geométrica almacenada como un entero positivo. De forma predeterminada, el ID de cada estructura corresponde al índice de la estructura en meshStruct. Por ejemplo, si meshStruct contiene cinco estructuras de malla, la primera estructura de malla en el índice 1 tiene un ID de 1, y la última estructura de malla en el índice 5 tiene un ID de 5.

    • Vertices — Vértices de la geometría, almacenados como una matriz M por 3. Cada fila representa un vértice en la forma [x y z] con respecto al marco de referencia definido por Pose. M es el número de vértices necesarios para representar la envoltura convexa de la malla.

    • Faces — Caras de la geometría, almacenadas como una matriz M por 3. Cada fila contiene tres índices correspondientes a los vértices en Vertices que definen las caras de un triángulo de la geometría. M es el número de vértices en Vertices.

    • Pose — Plantea la geometría como una matriz de transformación homogénea de 4 por 4 que especifica una transformación del marco del mundo al marco en el que se definen los vértices.

    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 R2024a