occupancyMap3DCollisionOptions
Options de contrôle des collisions entre la carte d'occupation 3D et les géométries des collisions
Depuis R2022b
Description
L'objet occupancyMap3DCollisionOptions
contient des options pour vérifier les collisions à l'aide de la fonction checkMapCollision
, entre les cellules occupées d'un objet occupancyMap3D
et les objets géométriques de collision.
Création
Description
renvoie un objet d'options de vérification des collisions, OPTS
= occupancyMap3DCollisionOptionsOPTS
.
spécifie les propriétés en utilisant un ou plusieurs arguments nom-valeur. Par exemple, OPTS
= occupancyMap3DCollisionOptions(Name=Value
)occupancyMap3DCollisionOptions(SearchDepth=8)
définit la propriété SearchDepth
de l'objet occupancyMap3DCollisionOptions
à une profondeur de 8
.
Propriétés
CheckBroadPhase
— Vérifier les collisions entre les AABB des voxels et les géométries
true
ou 1
(par défaut) | false
ou 0
Vérifiez les collisions entre les AABB de voxels et de géométries, spécifiés comme un 1 logique (true
) ou 0
(false
).
Si la propriété CheckNarrowPhase
est true
, la phase étroite vérifie uniquement les voxels qui ont échoué à la vérification de phase large.
Exemple : occupancyMap3DCollisionOptions(CheckBroadPhase=false)
Types de données : logical
CheckNarrowPhase
— Vérifier les collisions entre les voxels et les géométries d'entrée brutes
true
ou 1
(par défaut) | false
ou 1
Vérifiez les collisions entre les voxels et les géométries d'entrée brutes, spécifiées comme un 1 logique (true
) ou 0
(false
).
Si la propriété CheckBroadPhase
est true
, la phase étroite vérifie uniquement les voxels qui étaient en collision lors de la vérification de phase large.
Exemple : occupancyMap3DCollisionOptions(CheckNarrowPhase=false)
Types de données : logical
Exhaustive
— Mode de recherche exhaustif
false
ou 0
(par défaut) | true
ou 1
Mode de recherche exhaustif, spécifié comme un 0
logique (false
) ou 1
(true
). Lorsque exhaustif est spécifié comme faux, la fonction de vérification des collisions arrête la vérification des collisions à la première collision valide dans la phase large ou la phase étroite. Lorsqu'elle est spécifiée comme true
, la fonction de vérification des collisions continue la vérification des collisions jusqu'à ce que tous les voxels soient vérifiés.
Exemple : occupancyMap3DCollisionOptions(Exhaustive=true)
Types de données : logical
ReturnDistance
— Retourner le point et la distance les plus proches
false
ou 0
(par défaut) | true
ou 1
Renvoie le point et la distance les plus proches, spécifiés comme un 0
(false
) ou 1
(true
). Lorsqu'elle est spécifiée comme true
, la fonction de vérification des collisions renvoie la distance minimale entre les géométries de collision et les voxels les plus proches dans la grille d'occupation.
Exemple : occupancyMap3DCollisionOptions(ReturnDistance=true)
Types de données : logical
ReturnVoxels
— Emplacement de retour et taille des voxels en collision
false
ou 0
(par défaut) | true
ou 1
Renvoie l'emplacement et la taille des voxels en collision, spécifiés comme un 0
(false
) ou 1
(true
).
Exemple : occupancyMap3DCollisionOptions(ReturnVoxels=true)
Types de données : logical
SearchDepth
— Profondeur de recherche maximale à vérifier
16
(par défaut) | entier dans la plage [0
, 16
]
Profondeur de recherche maximale à vérifier dans l'octree, spécifiée sous la forme d'un entier compris dans la plage [0
, 16
].
Si un voxel à une profondeur de recherche englobe tout voxel occupé à une profondeur de recherche plus grande, alors tout le volume du voxel englobant est considéré comme occupé. Pour plus d'informations, consultez Visualisez des cartes d'occupation en 3D avec différentes profondeurs de recherche.
Exemple : occupancyMap3DCollisionOptions(SearchDepth=8)
Types de données : uint8
Exemples
Vérifier la collision entre la carte 3D et les géométries de collision
Créez une carte d'occupation en 3D.
map = occupancyMap3D;
Spécifiez 25 coordonnées aléatoires dans la carte d'occupation comme étant occupées.
rng(0) pt = (rand(25,3)-.5)*20; setOccupancy(map,pt,1);
Créez une sphère de collision et un objet cylindre de collision.
sphere = collisionSphere(1); cylinder = collisionCylinder(3,6); sphere.Pose = trvec2tform([6.1 -4 -7.5]);
Visualisez la carte d'occupation et la géométrie des collisions dans la même figure.
exampleHelperPlotCylinderAndSphere(map,cylinder,sphere)
Effectuez uniquement la vérification des collisions en phase large pour la sphère et le cylindre en définissant la propriété CheckNarrowPhase
d'un objet occupancyMap3DCollisionOptions
sur false
. Renvoie les informations sur les voxels et la distance jusqu'aux voxels occupés les plus proches.
bpOpts = occupancyMap3DCollisionOptions(CheckNarrowPhase=false,ReturnDistance=true,ReturnVoxels=true); [bpIsCollidingCylinder,bpResultsCylinder] = checkMapCollision(map,cylinder,bpOpts);
Vérifiez les distances des voxels pour les géométries de collision. Notez que, comme le cylindre est en collision avec des voxels, les valeurs de distance sont NaN
. Étant donné que la sphère n'est en collision avec aucun voxel, ses résultats de distance ne sont pas des valeurs NaN
.
bpDistCylinder = bpResultsCylinder.DistanceInfo.Distance
bpDistCylinder = NaN
bpWitnessptsCylinder = bpResultsCylinder.DistanceInfo.WitnessPoints
bpWitnessptsCylinder = 3×2
NaN NaN
NaN NaN
NaN NaN
Étant donné que le cylindre est en collision avec les voxels, les résultats de distance contiennent des valeurs NaN
. Puisque la sphère n'est pas en collision avec les voxels, les résultats de distance sont constitués de valeurs non 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
Tracez une ligne entre la sphère et le voxel le plus proche en utilisant ses points témoins.
figure exampleHelperPlotCylinderAndSphere(map,cylinder,sphere) hold on plot3(bpWitnessptsSphere(1,:),bpWitnessptsSphere(2,:),bpWitnessptsSphere(3,:),LineWidth=2,Color='r') hold off
Effectuez maintenant une vérification en phase étroite, en utilisant un objet occupancyMap3DCollisionOptions
avec la propriété CheckNarrowPhase
définie sur true
.
npOpts = occupancyMap3DCollisionOptions(CheckNarrowPhase=true,ReturnDistance=true,ReturnVoxels=true); [npIsCollidingSphere,bpResultsSphere] = checkMapCollision(map,sphere,npOpts);
Renvoie la distance du voxel et les coordonnées du point témoin de la sphère. La distance et les points témoins sont légèrement plus précis cette fois, car la phase étroite utilise la distance entre la primitive et le voxel, tandis que la phase large précédente utilise la distance entre la boîte englobante alignée sur l'axe (AABB) de l'objet de collision et l'objet de collision. voxel.
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
Visualisez à nouveau la carte d’occupation et tracez la ligne indiquant la distance la plus courte entre le voxel et la sphère. La ligne entre les points témoins semble visuellement précise après avoir effectué la vérification en phase étroite.
exampleHelperPlotCylinderAndSphere(map,cylinder,sphere) hold on plot3(npWitnesspts(1,:),npWitnesspts(2,:),npWitnesspts(3,:),LineWidth=2,Color='r') hold off
Capacités étendues
Génération de code C/C++
Générez du code C et C++ avec MATLAB® Coder™.
Historique des versions
Introduit dans R2022b
Voir aussi
Commande MATLAB
Vous avez cliqué sur un lien qui correspond à cette commande MATLAB :
Pour exécuter la commande, saisissez-la dans la fenêtre de commande de MATLAB. Les navigateurs web ne supportent pas les commandes 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)