Main Content

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

copy

Créer une copie complète de l'objet échantillonneur d'état MPNet

Depuis R2023b

    Description

    exemple

    sampler2 = copy(sampler1) crée une copie complète de l'objet échantillonneur d'état MPNet spécifié.

    Exemples

    réduire tout

    Cet exemple montre comment effectuer un échantillonnage éclairé à l'aide d'un MPNet pré-entraîné. Jusqu'à un certain nombre d'itérations, un échantillonneur d'état MPNet prédit les échantillons à l'aide du MPNet pré-entraîné. Les échantillons prédits à l'aide du MPNet sont biaisés vers un sous-espace contenant une solution de chemin optimale. Après le nombre d'itérations spécifié, l'échantillonneur passe à l'approche d'échantillonnage uniforme. Vous pouvez modifier le nombre d'itérations en spécifiant la propriété MaxLearnedSamples de l'objet stateSamplerMPNET .

    Charger MPNet pré-entraîné

    Chargez un fichier de données contenant un MPNet pré-entraîné dans l'espace de travail MATLAB® . Le MPNet a été formé sur diverses cartes de labyrinthe 2D avec des largeurs et des hauteurs de 10 mètres et des résolutions de 2,5 cellules par mètre. Chaque carte de labyrinthe contient une largeur de passage de 5 cellules de grille et une épaisseur de paroi de 1 cellule de grille.

    data = load("mazeMapTrainedMPNET.mat")
    data = struct with fields:
          encodingSize: [9 9]
           lossWeights: [100 100 0]
            mazeParams: {[5]  [1]  'MapSize'  [10 10]  'MapResolution'  [2.5000]}
           stateBounds: [3x2 double]
        trainedNetwork: [1x1 dlnetwork]
    
    

    Créer une carte de labyrinthe pour l'échantillonnage

    Créez une carte de labyrinthe aléatoire pour l'échantillonnage. La taille de la grille (MapSize×MapResolution) doit être la même que celle des cartes utilisées pour la formation du MPNet.

    rng(10,"twister")
    map = mapMaze(5,1,MapSize=[12 12],MapResolution=2.0833);

    Spécifiez la pose de départ et la pose d'objectif.

    start = [2 10 0];
    goal = [5 4 0];

    Visualisez la carte d’entrée.

    figure
    show(map)
    hold on
    plot(start(1),start(2),plannerLineSpec.start{:})
    plot(goal(1),goal(2),plannerLineSpec.goal{:})
    legend(Location="bestoutside")
    hold off

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

    Créer un échantillonneur d'état MPNet

    Spécifiez les limites d'état et créez un objet d'espace d'état SE(2).

    x = map.XWorldLimits;
    y = map.YWorldLimits;
    theta = [-pi pi];
    stateBounds = [x; y; theta];
    stateSpace = stateSpaceSE2(stateBounds);

    Configurez l'objet mpnetSE2 pour utiliser le MPNet pré-entraîné pour prédire des échantillons d'état sur une carte aléatoire. Définissez les valeurs de propriété EncodingSize de l'objet mpnetSE2 sur celles de la valeur utilisée pour la formation du réseau.

    mpnet = mpnetSE2(Network=data.trainedNetwork,StateBounds=stateBounds,EncodingSize=data.encodingSize);

    Créez un échantillonneur d'état MPNet pour calculer des échantillons d'état à utiliser pour la planification de mouvements. Spécifiez l'environnement de la carte, la pose de départ et la pose d'objectif comme entrées dans l'échantillonneur d'état. La valeur par défaut pour MaxLearnedSamples est 50. Cela implique que les 50 premiers échantillons renvoyés par l'échantillonneur d'état sont des échantillons basés sur l'apprentissage, prédits à l'aide du MPNet pré-entraîné.

    sampler_orig = stateSamplerMPNET(stateSpace,mpnet,Environment=map,StartState=start,GoalState=goal)
    sampler_orig = 
      stateSamplerMPNET with properties:
    
                   StateSpace: [1x1 stateSpaceSE2]
        MotionPlanningNetwork: [1x1 mpnetSE2]
                  Environment: [1x1 binaryOccupancyMap]
                   StartState: [2 10 0]
                    GoalState: [5 4 0]
            MaxLearnedSamples: 50
                GoalThreshold: 1
    
    

    Exemple d'espace d'état à l'aide de l'échantillonneur d'état MPNet

    Générez 50 échantillons d'état situés entre la pose de départ et la pose d'objectif à l'aide de l'échantillonneur d'état MPNet. Dans ce cas, l'échantillonneur d'état MPNet génère les 50 échantillons à l'aide du MPNet pré-entraîné.

    states_orig = sample(sampler_orig,50);

    Créer des copies de l'échantillonneur d'état MPNet et faire varier le nombre maximal d'échantillons appris

    Créez des copies de l’objet échantillonneur d’état MPNet par défaut. Modifiez la propriété d'échantillons maximum appris de l'échantillonneur pour étudier son impact sur les résultats d'échantillonnage.

    Définissez la propriété MaxLearnedSamples sur 10. Dans ce cas, l'échantillonneur d'état MPNet génère les 10 premiers échantillons à l'aide du MPNet pré-entraîné et les 40 échantillons restants à l'aide de l'approche d'échantillonnage uniforme.

    sampler_2 = copy(sampler_orig);
    sampler_2.MaxLearnedSamples = 10;

    Définissez la propriété MaxLearnedSamples sur 30. Dans ce cas, l'échantillonneur d'état MPNet génère les 30 premiers échantillons à l'aide du MPNet pré-entraîné et les 20 échantillons restants à l'aide de l'approche d'échantillonnage uniforme.

    sampler_3 = copy(sampler_orig);
    sampler_3.MaxLearnedSamples = 30;

    Exemple d'espace d'état à l'aide d'un échantillonneur d'état MPNet modifié

    Utilisez chacun des échantillonneurs d’état MPNet modifiés pour générer le même nombre d’échantillons que celui de l’échantillonneur par défaut. Dans ce cas, utilisez-les chacun pour générer 50 échantillons.

    states_2 = sample(sampler_2,50);
    states_3 = sample(sampler_3,50);

    Tracer et comparer les résultats d'échantillonnage

    Créez une figure avec un espace suffisant pour afficher les tracés des trois échantillonneurs d’état.

    fig1 = figure(Position=[0,0,1200,300]);

    Tracez la sortie de l'échantillonneur d'état MPNet avec le nombre maximum d'échantillons appris fixé à 10.

    subplot(1,3,1,Parent=fig1)
    show(map)
    hold on
    plot(start(1),start(2),plannerLineSpec.start{:})
    plot(goal(1),goal(2),plannerLineSpec.goal{:})
    plot(states_2(:,1),states_2(:,2),plannerLineSpec.state{:})
    title("MaxLearnedSamples = 10")
    hold off

    Tracez la sortie de l'échantillonneur d'état MPNet avec le nombre maximum d'échantillons appris fixé à 30.

    subplot(1,3,2,Parent=fig1)
    show(map)
    hold on
    plot(start(1),start(2),plannerLineSpec.start{:})
    plot(goal(1),goal(2),plannerLineSpec.goal{:})
    plot(states_3(:,1),states_3(:,2),plannerLineSpec.state{:})
    title("MaxLearnedSamples = 30")
    hold off

    Tracez la sortie de l'échantillonneur d'état MPNet par défaut. La valeur par défaut du nombre maximum d'échantillons appris est 50. À mesure que vous augmentez le nombre maximum d’échantillons appris pour correspondre au nombre d’échantillons d’état à générer, les échantillons de sortie se concentrent davantage sur un chemin entre la pose de départ donnée et la pose objectif.

    subplot(1,3,3,Parent=fig1)
    show(map)
    hold on
    plot(start(1),start(2),plannerLineSpec.start{:})
    plot(goal(1),goal(2),plannerLineSpec.goal{:})
    plot(states_orig(:,1),states_orig(:,2),plannerLineSpec.state{:})
    title("MaxLearnedSamples = 50 (default)")
    hold off

    Figure contains 3 axes objects. Axes object 1 with title MaxLearnedSamples = 10, 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 These objects represent Start, Goal, State. Axes object 2 with title MaxLearnedSamples = 30, 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 These objects represent Start, Goal, State. Axes object 3 with title MaxLearnedSamples = 50 (default), 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 These objects represent Start, Goal, State.

    Exploration plus approfondie

    À partir des résultats d'échantillonnage, vous pouvez déduire que l'échantillonneur d'état MPNet renvoie des échantillons d'état optimaux si le nombre maximum d'échantillons appris est égal au nombre maximum d'échantillons à calculer. Cependant, si le MPNet est formé sur un ensemble de données comportant moins d'environnements cartographiques ou d'échantillons de chemin, la précision de prédiction du réseau diminue. L'échantillonneur d'état MPNet peut renvoyer un nombre insuffisant d'échantillons appris entre la pose de départ et la pose d'objectif, et vous ne pouvez pas l'utiliser pour la planification de chemin. Dans de tels cas, la valeur de MaxLearnedSamples doit être inférieure au nombre d’échantillons requis. Cela permet à l'échantillonneur d'état MPNet de passer à l'approche d'échantillonnage uniforme après un nombre spécifié d'itérations, garantissant ainsi une solution de chemin.

    Arguments d'entrée

    réduire tout

    Objet échantillonneur d'état MPNet, spécifié comme objet stateSamplerMPNET .

    Arguments de sortie

    réduire tout

    Copie de l'objet échantillonneur d'état MPNet, renvoyée sous la forme d'un objet stateSamplerMPNET .

    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 R2023b

    Voir aussi

    Objets

    Fonctions