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.

meshtsdf

Campo de distancia con signo truncado para regiones 3D que contienen mallas

Desde R2024a

    Descripción

    meshtsdf discretiza mallas y almacena sus campos de distancia con signo truncado (TSDF) asociados en un espacio 3-D voxelizado. Los vóxeles que están fuera de una malla contienen distancias positivas y los vóxeles que están dentro de una malla tienen distancias negativas. Cualquier vóxel que esté a más de una distancia de truncamiento especificada de las mallas tiene valores iguales a la distancia de truncamiento. Una vez que crea el TSDF, puede modificar las poses de las mallas y obtener información actualizada de distancia y gradiente en la región discretizada.

    Creación

    Descripción

    mTSDF = meshtsdf crea un administrador TSDF vacío con propiedades predeterminadas.

    mTSDF = meshtsdf(meshStruct) especifica una o más mallas y calcula la distancia firmada sobre cada región truncada de las mallas. Utilice la función geom2struct para convertir objetos geométricos en una matriz de estructuras de malla.

    mTSDF = meshtsdf(___,Name=Value) especifica propiedades utilizando uno o más argumentos de nombre-valor además de los argumentos de otras sintaxis. Por ejemplo, meshtsdf(TruncationDistance=10) establece la distancia de truncamiento en 10 metros.

    ejemplo

    Argumentos de entrada

    expandir todo

    Malla geométrica, especificada como una estructura o un arreglo de estructuras de N elementos. N es el número total de objetos de colisión.

    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.

    Tipos de datos: struct

    Propiedades

    expandir todo

    Esta propiedad o parámetro es de solo lectura.

    Resolución de la cuadrícula, especificada como un escalar numérico positivo en celdas por metro.

    Sólo se puede establecer esta propiedad durante la construcción del objeto.

    Ejemplo: meshtsdf(Resolution=10)

    Esta propiedad o parámetro es de solo lectura.

    Distancia máxima a una superficie de malla, especificada como un escalar numérico mayor que 3/Resolution.

    Para los vóxeles fuera de las mallas, si el valor de la distancia de un vóxel excede el valor de TruncationDistance, entonces el valor de la distancia del vóxel se vuelve igual al valor de TruncationDistance.

    Para los vóxeles dentro de una malla, si el valor de distancia negativo del vóxel es menor que -1*TruncationDistance, entonces el valor de distancia del vóxel se vuelve igual a -1*TruncationDistance.

    Sólo se puede establecer esta propiedad durante la construcción del objeto.

    Ejemplo: meshtsdf(TruncationDistance=0.5)

    Esta propiedad o parámetro es de solo lectura.

    Modo de cálculo de distancia para vóxeles dentro de mallas, especificado como true o false:

    • "true" — Calcula las distancias interiores negativas desde los vóxeles hasta el centro de la malla.

    • "false" — Calcula distancias interiores negativas hasta una distancia interior máxima de -1*TruncationDistance. Los vóxeles que tienen distancias negativas que exceden la distancia interior máxima se truncan a -1*TruncationDistance.

    Sólo se puede establecer esta propiedad durante la construcción del objeto.

    Ejemplo: meshtsdf(FillInterior=false)

    Esta propiedad o parámetro es de solo lectura.

    Identificadores de mallas en el TSDF, almacenados como un vector de elementos N de números enteros no negativos.

    Esta propiedad o parámetro es de solo lectura.

    Número de mallas discretizadas en el TSDF, almacenado como un entero positivo. El valor de NumMesh es igual a la longitud de meshStruct.

    Esta propiedad o parámetro es de solo lectura.

    Límites mínimos y máximos que contienen todos los vóxeles activos del TSDF, almacenados como una matriz de 2 por 3. La primera fila representa los límites mínimos x, y y z. La segunda fila representa los límites máximos de x, y y z.

    Los vóxeles activos son vóxeles que contienen valores de distancia calculados.

    Esta propiedad o parámetro es de solo lectura.

    Número de vóxeles activos en el TSDF, almacenado como un entero positivo.

    Los vóxeles activos son vóxeles que contienen valores de distancia calculados.

    Funciones del objeto

    activeVoxelsDevuelve información sobre los vóxeles activos
    addMeshAgregar malla a malla TSDF
    copyCopia profunda TSDF
    removeMeshQuitar la malla de la malla TSDF
    distanceCalcular la distancia al nivel cero establecido para los puntos de consulta
    gradientCalcular el gradiente del campo de distancia con signo truncado
    posesObtener poses para una o más mallas en TSDF
    updatePoseActualizar la pose de la malla en TSDF
    showMostrar TSDF en la figura

    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.

    Limitaciones

    • meshtsdf admite packNGo (MATLAB Coder) sólo para destinos de host MATLAB®.

    Referencias

    [1] Zhao, Hongkai. “A Fast Sweeping Method for Eikonal Equations.” Mathematics of Computation 74, no. 250 (May 21, 2004): 603–27. https://doi.org/10.1090/S0025-5718-04-01678-3.

    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

    Consulte también