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
devuelve un objeto de opciones de verificación de colisiones, OPTS
= occupancyMap3DCollisionOptionsOPTS
.
especifica propiedades utilizando uno o más argumentos de nombre-valor. Por ejemplo, OPTS
= occupancyMap3DCollisionOptions(Name=Value
)occupancyMap3DCollisionOptions(SearchDepth=8)
establece la propiedad SearchDepth
del objeto occupancyMap3DCollisionOptions
a una profundidad de 8
.
Propiedades
CheckBroadPhase
— Verifique las colisiones entre AABB de vóxeles y geometrías
true
o 1
(predeterminado) | false
o 0
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
CheckNarrowPhase
— Verifique las colisiones entre vóxeles y geometrías de entrada sin procesar
true
o 1
(predeterminado) | false
o 1
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
Exhaustive
— Modo de búsqueda exhaustiva
false
o 0
(predeterminado) | true
o 1
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
ReturnDistance
— Regresar punto más cercano y distancia
false
o 0
(predeterminado) | true
o 1
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
ReturnVoxels
— Ubicación de retorno y tamaño de los vóxeles en colisión
false
o 0
(predeterminado) | true
o 1
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
SearchDepth
— Profundidad de búsqueda máxima para comprobar
16
(predeterminado) | número entero en el rango [0
, 16
]
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
Verificar la colisión entre el mapa 3D y las geometrías de colisión
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)
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
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
Capacidades ampliadas
Generación de código C/C++
Genere código C y C++ mediante MATLAB® Coder™.
Historial de versiones
Introducido en R2022b
Consulte también
Comando de MATLAB
Ha hecho clic en un enlace que corresponde a este comando de MATLAB:
Ejecute el comando introduciéndolo en la ventana de comandos de MATLAB. Los navegadores web no admiten comandos de MATLAB.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)