checkCollision
Vérifier les collisions entre les corps de l'ego et les obstacles
Depuis R2020b
Syntaxe
Description
vérifie chaque corps de l'ego pour les collisions avec des obstacles dans l'environnement. La fonction indique si chaque corps de l'ego est en collision à chaque pas de temps.collisionFound
= checkCollision(capsuleListObj
)
[
vérifie chaque corps de l'ego pour les collisions avec des obstacles dans l'environnement et renvoie les résultats en utilisant des options de détection de collision spécifiées supplémentaires fullResults
,distance
] = checkCollision(capsuleListObj
,options
)options
.
Exemples
Construisez des chemins corporels de l'ego et vérifiez les collisions avec des obstacles
Construisez un chemin corporel de l'ego et maintenez les états d'obstacles à l'aide de l'objet dynamicCapsuleList
. Visualisez les états de tous les objets de l'environnement à différents horodatages. Validez le chemin du corps de l’ego en vérifiant les collisions avec des obstacles dans l’environnement.
Créez l'objet dynamicCapsuleList
. Extrayez le nombre maximum d'étapes à utiliser comme nombre d'horodatages pour vos chemins d'objet.
obsList = dynamicCapsuleList; numSteps = obsList.MaxNumSteps;
Ajouter un corps d'ego
Définissez un corps d'ego en spécifiant l'ID, la géométrie et l'état ensemble dans une structure. La géométrie de la capsule a une longueur de 3 m et un rayon de 1 m. Spécifiez l'état sous forme de chemin linéaire de x = 0m à x = 100m.
egoID1 = 1; geom = struct("Length",3,"Radius",1,"FixedTransform",eye(3)); states = linspace(0,1,obsList.MaxNumSteps)'.*[100 0 0]; egoCapsule1 = struct('ID',egoID1,'States',states,'Geometry',geom); addEgo(obsList,egoCapsule1); show(obsList,"TimeStep",[1:numSteps]); ylim([-20 20])
Ajouter des obstacles
Spécifiez les états de deux obstacles séparés du corps du moi de 5 m dans des directions opposées sur l'axe y . Supposons que les obstacles ont la même géométrie geom
que le corps de l'ego.
obsState1 = states + [0 5 0]; obsState2 = states + [0 -5 0]; obsCapsule1 = struct('ID',1,'States',obsState1,'Geometry',geom); obsCapsule2 = struct('ID',2,'States',obsState2,'Geometry',geom); addObstacle(obsList,obsCapsule1); addObstacle(obsList,obsCapsule2); show(obsList,"TimeStep",[1:numSteps]); ylim([-20 20])
Mettre à jour les obstacles
Modifiez l'emplacement de vos obstacles et les dimensions géométriques au fil du temps. Utilisez la structure générée précédemment, modifiez les champs et mettez à jour les obstacles à l'aide des fonctions objets updateObstacleGeometry
et updateObstaclePose
. Réduit le rayon du premier obstacle à 0,5 m et modifie le chemin pour le déplacer vers le corps de l'ego.
obsCapsule1.Geometry.Radius = 0.5; obsCapsule1.States = ... [linspace(0,100,numSteps)' ... % x linspace(5,-4,numSteps)' ... % y zeros(numSteps,1)]; % theta updateObstacleGeometry(obsList,1,obsCapsule1); updateObstaclePose(obsList,1,obsCapsule1);
Vérifier les collisions
Visualisez les nouveaux chemins. Montrer où se situent les collisions entre le corps de l'ego et un obstacle, que l'écran met en évidence en rouge. Notez que les collisions entre les obstacles ne sont pas vérifiées.
show(obsList,"TimeStep",[1:numSteps],"ShowCollisions",1); ylim([-20 20]) xlabel("X (m)") ylabel("Y (m)")
Vérifiez par programme les collisions à l'aide de la fonction objet checkCollision
. La fonction renvoie un vecteur de valeurs logiques qui indique l'état de chaque pas de temps. Le vecteur est transposé à des fins d'affichage.
collisions = checkCollision(obsList)'
collisions = 1x31 logical array
0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0
Pour valider des chemins avec un grand nombre d'étapes, utilisez la fonction any
sur le vecteur des valeurs de collision.
if any(collisions) disp("Collision detected.") end
Collision detected.
Mettre à jour le chemin de l'ego
Spécifiez un nouveau chemin pour le corps de l’ego. Visualisez à nouveau les chemins, affichant les collisions.
egoCapsule1.States = ... [linspace(0,100,numSteps)' ... % x 3*sin(linspace(0,2*pi,numSteps))' ... % y zeros(numSteps,1)]; % theta updateEgoPose(obsList,1,egoCapsule1); show(obsList,"TimeStep",[1:numSteps],"ShowCollisions",1); ylim([-20 20])
Arguments d'entrée
capsuleListObj
— Liste de capsules dynamique
Objet dynamicCapsuleList
| dynamicCapsuleList3D
objet
Liste de capsules dynamique, spécifiée comme objet dynamicCapsuleList
ou dynamicCapsuleList3D
.
options
— Options de détection de collision
structure
Options de détection de collision, spécifiées sous forme de structure avec ces champs :
FullResults
–– Renvoie les résultats de collision pour chaque obstacle séparément, spécifié comme un0
(false
) ou1
(true
). Voir l'argument de sortiefullResults
.ReturnDistance
–– Renvoie le calcul de distance à partir de la vérification des collisions, spécifié comme un0
(false
) ou1
(true
). Voir l'argument de sortiedistance
.
Types de données : struct
Arguments de sortie
collisionFound
— Résultats de la vérification des collisions
n-by- e matrice de valeurs logiques
Résultats de la vérification des collisions, renvoyés sous la forme d'une matrice n-by- e de valeurs logiques. Par défaut, la fonction vérifie toute collision entre n'importe quel objet, qui renvoie une matrice n-by- e , où n est le nombre maximum d'états pour les corps du moi dans l'objet capsuleListobj
spécifié, et e est le nombre de corps du moi.
Types de données : logical
fullResults
— Résultats complets de la vérification des collisions pour chaque obstacle
n-by- o-by- e tableau de valeurs logiques
Résultats complets de la vérification des collisions pour chaque obstacle, renvoyés sous la forme d'un tableau n-by- o-by- e de valeurs logiques. n est le nombre maximum d'états pour les corps du moi dans l'argument capsuleListobj
spécifié, o est le nombre d'obstacles, et e est le nombre de corps de l’ego.
Dépendances
Pour renvoyer l'argument de sortie fullResults
, spécifiez l'argument d'entrée options
avec le champ FullResults
défini sur true
.
Types de données : logical
distance
— Distance des obstacles
n-by- e matrice numérique | n-par- o par- e tableau numérique
Distance des obstacles, renvoyée sous forme de matrice numérique n-par- e ou n-par- o by- e tableau numérique. Les dimensions et le comportement de l'argument distance dépendent de la valeur du champ FullResults
de l'argument options.
distance Dimensions | FullResults Valeur | Comportement |
n-by- e matrice numérique | false | Renvoie la distance entre chaque corps de l'ego et l'obstacle le plus proche à chaque pas de temps. n est le nombre maximum d'états pour les corps du moi spécifié dans l'argument capsuleListObj , et e est le nombre de corps du moi. |
n-par- o par- e tableau numérique | true | Renvoie la distance entre chaque corps de l'ego et chaque obstacle à chaque pas de temps. o est le nombre d’obstacles. |
Dépendances
Pour renvoyer l'argument de sortie distance
, spécifiez l'argument d'entrée options
avec le champ ReturnDistance
défini sur true
.
Types de données : single
| double
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 R2020b
Voir aussi
Objets
Fonctions
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)