Contenu principal

Cette page a été traduite par traduction automatique. Cliquez ici pour voir la dernière version en anglais.

show

Afficher les corps de l'ego et les obstacles dans l'environnement

Description

ax = show(capsuleListObj) affiche l'état initial de tous les corps de l'ego et obstacles dans la liste de capsules spécifiée, et renvoie la poignée des axes de l'intrigue.

exemple

ax = show(capsuleListObj,Name,Value) spécifie les options en utilisant name-value pair arguments. Par exemple, 'FastUpdate',true permet des mises à jour rapides d'un tracé existant.

Exemples

réduire tout

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])

Figure contains an axes object. The axes object contains an object of type patch.

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])

Figure contains an axes object. The axes object contains 3 objects of type patch.

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)")

Figure contains an axes object. The axes object with xlabel X (m), ylabel Y (m) contains 3 objects of type patch.

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])

Figure contains an axes object. The axes object contains 3 objects of type patch.

Arguments d'entrée

réduire tout

Liste de capsules dynamiques, spécifiée comme objet dynamicCapsuleList ou dynamicCapsuleList3D .

Arguments nom-valeur

réduire tout

Spécifiez des paires d'arguments facultatives sous la forme Name1=Value1,...,NameN=ValueN, où Name est le nom de l'argument et Value est la valeur correspondante. Les arguments nom-valeur doivent apparaître après les autres arguments, mais l'ordre des paires n'a pas d'importance.

Avant R2021a, utilisez des virgules pour séparer chaque nom et valeur, et mettez Name entre guillemets.

Exemple : 'FastUpdate',true active l'option de mises à jour rapides dans un tracé existant.

Axes parents sur lesquels tracer, spécifiés comme une paire séparée par des virgules composée de 'Parent' et d'un handle Axes Properties .

Effectuer une mise à jour rapide d'un tracé existant, spécifié comme une paire séparée par des virgules composée de 'FastUpdate' et d'un 0 (false) ou 1 (true). Vous devez utiliser la fonction objet show pour afficher initialement votre liste de capsules avant de pouvoir la spécifier avec cet argument.

Types de données : logical

Pas de temps à afficher, spécifiés comme une paire séparée par des virgules composée de 'TimeStep' et d'un vecteur numérique de valeurs dans la plage [1, N], où N est la valeur de la propriété MaxNumSteps de l'objet spécifié dans l'argument capsuleListObj . Chaque pas de temps correspond à une ligne de la matrice d’état pour chaque corps du moi et obstacle.

Vérifiez et mettez en surbrillance les collisions à l'écran, spécifiées comme une paire séparée par des virgules composée de 'ShowCollisions' et d'un 0 (false) ou 1 (true).

Types de données : logical

ID d'ego à afficher, spécifiés comme une paire séparée par des virgules composée de 'EgoIDs' et d'un vecteur d'entiers positifs. Par défaut, la fonction objet affiche tous les corps du moi.

ID d'obstacles à afficher, spécifiés sous la forme d'une paire séparée par des virgules composée de 'ObstacleIDs' et d'un vecteur d'entiers positifs. Par défaut, la fonction affiche tous les obstacles.

Arguments de sortie

réduire tout

Axes parents du tracé de la liste de capsules dynamique, renvoyés sous la forme d'un handleAxes Properties.

Capacités étendues

développer tout

Génération de code C/C++
Générez du code C et C++ avec MATLAB® Coder™.

Historique des versions

Introduit dans R2020b