Main Content

Esta página se ha traducido mediante traducción automática. Haga clic aquí para ver la última versión en inglés.

occupancyMap3DCollisionOptions

Opciones de verificación de colisiones entre mapas de ocupación 3D y geometrías de colisión

Desde R2022b

    Descripción

    El objeto occupancyMap3DCollisionOptions contiene opciones para verificar colisiones usando la función checkMapCollision , entre celdas ocupadas de un objeto occupancyMap3D y objetos de geometría de colisión.

    Creación

    Descripción

    OPTS = occupancyMap3DCollisionOptions devuelve un objeto de opciones de verificación de colisiones, OPTS.

    ejemplo

    OPTS = occupancyMap3DCollisionOptions(Name=Value) especifica propiedades utilizando uno o más argumentos de nombre-valor. Por ejemplo, occupancyMap3DCollisionOptions(SearchDepth=8) establece la propiedad SearchDepth del objeto occupancyMap3DCollisionOptions a una profundidad de 8.

    Propiedades

    expandir todo

    Verifique las colisiones entre AABB de vóxeles y geometrías, especificadas como un 1 lógico (true) o 0 (false).

    Si la propiedad CheckNarrowPhase es true, la fase estrecha verifica solo los vóxeles que no pasaron la verificación de fase amplia.

    Ejemplo: occupancyMap3DCollisionOptions(CheckBroadPhase=false)

    Tipos de datos: logical

    Verifique las colisiones entre vóxeles y geometrías de entrada sin procesar, especificadas como un 1 lógico (true) o 0 (false).

    Si la propiedad CheckBroadPhase es true, la fase estrecha verifica solo los vóxeles que estaban en colisión durante la verificación de fase amplia.

    Ejemplo: occupancyMap3DCollisionOptions(CheckNarrowPhase=false)

    Tipos de datos: logical

    Modo de búsqueda exhaustiva, especificado como 0 (false) o 1 (true). Cuando Exhaustive se especifica como falso, la función de verificación de colisiones detiene la verificación de colisiones en la primera colisión válida en la fase amplia o estrecha. Cuando se especifica como true, la función de verificación de colisiones continúa la verificación de colisiones hasta que se verifican todos los vóxeles.

    Ejemplo: occupancyMap3DCollisionOptions(Exhaustive=true)

    Tipos de datos: logical

    Devuelve el punto y la distancia más cercanos, especificados como un 0 (false) o 1 (true Cuando se especifica como true, la función de verificación de colisiones devuelve la distancia mínima entre las geometrías de colisión y los vóxeles más cercanos en la cuadrícula de ocupación.

    Ejemplo: occupancyMap3DCollisionOptions(ReturnDistance=true)

    Tipos de datos: logical

    Devuelve la ubicación y el tamaño de los vóxeles en colisión, especificados como un 0 (false) o 1 (true).

    Ejemplo: occupancyMap3DCollisionOptions(ReturnVoxels=true)

    Tipos de datos: logical

    Profundidad de búsqueda máxima para verificar en el octree, especificada como un número entero en el rango [0, 16].

    Si un vóxel en una profundidad de búsqueda abarca cualquier vóxel que esté ocupado en una profundidad de búsqueda mayor, entonces todo el volumen del vóxel circundante se considera ocupado. Para obtener más información, consulte Visualice mapas de ocupación en 3D con diferentes profundidades de búsqueda.

    Ejemplo: occupancyMap3DCollisionOptions(SearchDepth=8)

    Tipos de datos: uint8

    Ejemplos

    contraer todo

    Cree un mapa de ocupación en 3D.

    map = occupancyMap3D;

    Especifique 25 coordenadas aleatorias en el mapa de ocupación como ocupadas.

    rng(0)
    pt = (rand(25,3)-.5)*20;
    setOccupancy(map,pt,1);

    Crea una esfera de colisión y un objeto de cilindro de colisión.

    sphere = collisionSphere(1);
    cylinder = collisionCylinder(3,6);
    sphere.Pose = trvec2tform([6.1 -4 -7.5]);

    Visualice el mapa de ocupación y la geometría de colisión en la misma figura.

    exampleHelperPlotCylinderAndSphere(map,cylinder,sphere)

    Figure contains an axes object. The axes object with title Occupancy Map, xlabel X [meters], ylabel Y [meters] contains 3 objects of type patch.

    Realice solo la verificación de colisión de fase amplia tanto para la esfera como para el cilindro estableciendo la propiedad CheckNarrowPhase de un objeto occupancyMap3DCollisionOptions en false. Devuelve información de vóxeles y la distancia a los vóxeles ocupados más cercanos.

    bpOpts = occupancyMap3DCollisionOptions(CheckNarrowPhase=false,ReturnDistance=true,ReturnVoxels=true);
    [bpIsCollidingCylinder,bpResultsCylinder] = checkMapCollision(map,cylinder,bpOpts);

    Verifique las distancias de vóxeles para las geometrías de colisión. Tenga en cuenta que, debido a que el cilindro colisiona con los vóxeles, los valores de distancia son NaN. Debido a que la esfera no colisiona con ningún vóxel, los resultados de su distancia no son valores NaN .

    bpDistCylinder = bpResultsCylinder.DistanceInfo.Distance
    bpDistCylinder = NaN
    
    bpWitnessptsCylinder = bpResultsCylinder.DistanceInfo.WitnessPoints
    bpWitnessptsCylinder = 3×2
    
       NaN   NaN
       NaN   NaN
       NaN   NaN
    
    

    Debido a que el cilindro colisiona con los vóxeles, los resultados de distancia contienen valores NaN . Dado que la esfera no colisiona con los vóxeles, los resultados de distancia constan de valores que no son NaN .

    [bpIsCollidingSphere,bpResultsSphere] = checkMapCollision(map,sphere,bpOpts);
    bpDistSphere = bpResultsSphere.DistanceInfo.Distance
    bpDistSphere = 2.3259
    
    bpWitnessptsSphere = bpResultsSphere.DistanceInfo.WitnessPoints
    bpWitnessptsSphere = 3×2
    
        3.0000    5.1000
       -6.0000   -5.0000
       -7.5000   -7.5000
    
    

    Traza una línea entre la esfera y el vóxel más cercano usando sus puntos testigo.

    figure
    exampleHelperPlotCylinderAndSphere(map,cylinder,sphere)
    hold on
    plot3(bpWitnessptsSphere(1,:),bpWitnessptsSphere(2,:),bpWitnessptsSphere(3,:),LineWidth=2,Color='r')
    hold off

    Figure contains an axes object. The axes object with title Occupancy Map, xlabel X [meters], ylabel Y [meters] contains 4 objects of type patch, line.

    Ahora realice una verificación de fase estrecha, utilizando un objeto occupancyMap3DCollisionOptions con la propiedad CheckNarrowPhase establecida en true.

    npOpts = occupancyMap3DCollisionOptions(CheckNarrowPhase=true,ReturnDistance=true,ReturnVoxels=true);
    [npIsCollidingSphere,bpResultsSphere] = checkMapCollision(map,sphere,npOpts);

    Devuelve la distancia del vóxel y las coordenadas del punto testigo de la esfera. La distancia y los puntos testigo son ligeramente más precisos esta vez, porque la fase estrecha usa la distancia entre la primitiva y el vóxel, mientras que la fase amplia anterior usa la distancia entre el cuadro delimitador alineado con el eje (AABB) del objeto de colisión y el vóxel.

    npDist = bpResultsSphere.DistanceInfo.Distance
    npDist = 2.6892
    
    npWitnesspts = bpResultsSphere.DistanceInfo.WitnessPoints
    npWitnesspts = 3×2
    
        3.0000    5.2596
       -6.0000   -4.5419
       -7.5000   -7.5000
    
    

    Visualice nuevamente el mapa de ocupación y trace la línea que muestra la distancia más corta entre el vóxel y la esfera. La línea entre los puntos testigo parece visualmente precisa después de realizar la verificación de fase estrecha.

    exampleHelperPlotCylinderAndSphere(map,cylinder,sphere)
    hold on
    plot3(npWitnesspts(1,:),npWitnesspts(2,:),npWitnesspts(3,:),LineWidth=2,Color='r')
    hold off

    Figure contains an axes object. The axes object with title Occupancy Map, xlabel X [meters], ylabel Y [meters] contains 4 objects of type patch, line.

    Capacidades ampliadas

    Generación de código C/C++
    Genere código C y C++ mediante MATLAB® Coder™.

    Historial de versiones

    Introducido en R2022b