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.

insertPointCloud

Insertar datos de nube de puntos en un mapa de distancias con signo 3D

Desde R2024b

    Descripción

    insertPointCloud(sdm3D,origin,points) inserta una nube de puntos en el mapa de distancia firmado en 3D proyectando rayos desde el origen especificado a cada uno de los puntos especificados y actualiza los valores de distancia de todos los vóxeles que el algoritmo del analizador diferencial digital (DDA) determina que alcanza cada rayo. La propiedad FullTracing del mapa de distancia firmado en 3D determina el tipo de lanzamiento de rayos. Consulte FullTracing para obtener más información.

    ejemplo

    Ejemplos

    contraer todo

    Lea y grafique los datos de triangulación del STL de membrana L. Puedes usar esto para comparar con el mapa de distancia firmado.

    triL = stlread("L-Membrane.stl");
    trisurf(triL)
    title("L-Membrane STL")
    [az,el] = view;
    axis equal

    Figure contains an axes object. The axes object with title L-Membrane STL contains an object of type patch.

    Cree un campo de distancia firmado 3-D vacío (SDF) y cargue los datos de la nube de puntos para la membrana L desde un archivo MAT. El archivo MAT contiene datos de la nube de puntos y el origen del sensor asociado con cada dato de la nube de puntos.

    sdm3D = signedDistanceMap3D(Resolution=50);
    load LMembranePC.mat

    Inserte cada nube de puntos en el campo de distancia firmado y muestre la SDF 3-D actualizada.

    for i = 1:size(ptcloud,1)
        insertPointCloud(sdm3D,origin(i,:),ptcloud{i});
        show(sdm3D,Colorbar="on");
        view(az,el)
        axis equal
        drawnow
        pause(.25)
    end
    title(["3-D SDF of L-Membrane"])

    Figure contains an axes object. The axes object with title 3-D SDF of L-Membrane contains an object of type scatter.

    Obtenga todos los vóxeles activos en el SDF 3-D.

    vox = activeVoxels(sdm3D)
    vox = struct with fields:
               ID: 1
          Centers: [49889×3 double]
        Distances: [49889×1 double]
            Sizes: [49889×1 double]
    
    

    Para fines demostrativos, utilice un desplazamiento xyz aleatorio desde los centros de los vóxeles de los primeros tres vóxeles como puntos de consulta. Luego obtenga la distancia y la pendiente utilizando esos puntos de consulta.

    querypts = vox.Centers(1:3,:) + 0.1*rand(3,3);
    d = distance(sdm3D,querypts)
    d = 3×1
    
        0.0379
       -0.0447
        0.0600
    
    
    g = gradient(sdm3D,querypts)
    g = 3×3
    
        0.1924    1.5773   -1.4002
        0.1689    1.6524   -0.8267
       -0.0715   -0.2335    0.3677
    
    

    Genere una malla a partir del campo de distancia firmado en 3D.

    [vertices,faces] = mesh(sdm3D)
    vertices = 18860×3
    
       -0.0100    0.0068    0.1500
       -0.0300    0.0059    0.1500
       -0.0100    0.0100    0.1610
       -0.0300    0.0100    0.1565
        0.0100    0.0047    0.1500
       -0.0100   -0.0100    0.1409
        0.0100   -0.0100    0.1421
        0.0100    0.0025    0.1700
       -0.0010    0.0100    0.1700
        0.0100    0.0094    0.1900
        0.0089    0.0100    0.1900
        0.0100    0.0100    0.1909
       -0.0100    0.0187    0.1700
       -0.0300    0.0259    0.1700
       -0.0100    0.0552    0.1500
          ⋮
    
    
    faces = 37094×3
    
         2     1     3
         4     2     3
         7     1     6
         5     1     7
         9     3     1
         9     1     8
         8     1     5
         8    10    11
         9     8    11
        10    12    11
         3    14     4
        13    14     3
        15    16    17
        16    18    17
         9    13     3
          ⋮
    
    

    Visualizar los datos de la malla.

    meshTri = triangulation(faces,vertices);
    trisurf(meshTri)
    axis equal
    title("Mesh from 3-D SDF")

    Figure contains an axes object. The axes object with title Mesh from 3-D SDF contains an object of type patch.

    Si es necesario, puede utilizar estos datos de malla para crear una malla de colisión utilizando V-HACD. Consulte collisionVHACD (Robotics System Toolbox) para obtener más información.

    Argumentos de entrada

    contraer todo

    Mapa de distancia firmado en 3D, especificado como un objeto signedDistanceMap3D.

    Origen de los datos de la nube de puntos, especificado como un vector de tres elementos que representa un punto xyz en el marco del mundo. Las unidades se establecen en metros.

    Ejemplo: [0 0 0]

    Datos de nube de puntos, especificados como una matriz N por 3. Cada fila representa un punto xyz observado desde un sensor a las origin. N es el número total de puntos en la nube de puntos.

    Si los puntos se miden con respecto al marco del sensor, debe transformar los puntos al marco mundial.

    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 R2024b

    Consulte también

    | | |