Main Content

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

interpolate

Chemin d'interpolation en fonction de la taille du pas du propagateur

Depuis R2021b

Description

exemple

interpolate(pathObj) évalue le chemin en fonction de la propriété ControlStepSize de l'objet nav.StatePropagator dans la propriété StatePropagator de le chemin de contrôle pathObj et ajoute tous les points intermédiaires au chemin de contrôle.

Exemples

réduire tout

Définir les paramètres d'état et de propagateur d'état

Chargez une matrice de carte ternaire et créez un objet occupancyMap .

load("exampleMaps","ternaryMap")
map = occupancyMap(ternaryMap,10);

Créez un propagateur d'état pour un modèle cinématique de vélo à l'aide de la carte.

propagator = mobileRobotPropagator(Environment=map);

Définissez les limites d'état sur l'espace d'état en fonction des limites du monde cartographique.

propagator.StateSpace.StateBounds(1:2,:) = [map.XWorldLimits; 
                                            map.YWorldLimits];

Planifier le chemin

Créez le planificateur de chemin à partir du propagateur d'état.

planner = plannerControlRRT(propagator);

Spécifiez les états de départ et d’objectif.

start = [10 15 0];
goal  = [40 30 0];

Planifiez un chemin entre les États. Pour des résultats reproductibles, réinitialisez le générateur de nombres aléatoires avant de planifier.

rng("default")
path = plan(planner,start,goal);

Vérifiez la durée totale écoulée du chemin de contrôle.

pathDuration(path)
ans = 102.4000

Interpolez le chemin vers la taille du pas de contrôle du propagateur.

interpolate(path)

Visualisez le chemin.

figure
show(map)
hold on
plot(start(1),start(2),"rx")
plot(goal(1),goal(2),"go")
plot(path.States(:,1),path.States(:,2),"b")
hold off

Figure contains an axes object. The axes object with title Occupancy Grid, xlabel X [meters], ylabel Y [meters] contains 4 objects of type image, line. One or more of the lines displays its values using only markers

Planifier le chemin de retour

Planifiez un deuxième chemin depuis la fin de l'emplacement du chemin précédent jusqu'au début.

path2 = plan(planner,path.States(end,:),start);

Vérifiez la durée totale écoulée du deuxième chemin.

pathDuration(path2)
ans = 100.3000

Visualisez le chemin.

figure
show(map)
hold on
plot(start(1),start(2),"rx")
plot(goal(1),goal(2),"go")
plot(path2.States(:,1),path2.States(:,2),"m")
hold off

Figure contains an axes object. The axes object with title Occupancy Grid, xlabel X [meters], ylabel Y [meters] contains 4 objects of type image, line. One or more of the lines displays its values using only markers

Combiner les chemins

Extrayez la séquence de mouvements du deuxième chemin.

states = path2.States(2:end,:);
controls = path2.Controls;
targets = path2.TargetStates;
durations = path2.Durations;

Ajoutez cette séquence à la fin du premier chemin.

append(path,states,controls,targets,durations)

Interpolez les nouveaux segments dans le chemin d'origine.

interpolate(path)

Vérifiez la durée totale écoulée du chemin final.

pathDuration(path)
ans = 102.4000

Visualisez le chemin.

figure
show(map)
hold on
plot(start(1),start(2),"rx")
plot(goal(1),goal(2),"go")
plot(path.States(:,1),path.States(:,2),"b")
hold off

Figure contains an axes object. The axes object with title Occupancy Grid, xlabel X [meters], ylabel Y [meters] contains 4 objects of type image, line. One or more of the lines displays its values using only markers

Arguments d'entrée

réduire tout

Chemin de contrôle, spécifié comme objet navPathControl .

Types de données : double

Historique des versions

Introduit dans R2021b