Main Content

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

stateSamplerMPNET

Échantillonneur d'état MPNet pour la planification de mouvements basée sur l'échantillonnage

Depuis R2023b

    Description

    L'objet stateSamplerMPNET crée un échantillonneur d'état pour la planification de mouvement à l'aide de réseaux de planification de mouvement (MPNet). L'échantillonnage dans l'espace d'états à l'aide de MPNet est une approche basée sur l'apprentissage en profondeur qui utilise des connaissances antérieures pour calculer des échantillons destinés aux planificateurs de chemin basés sur l'échantillonnage. L'échantillonneur d'état utilise un MPNet pré-entraîné pour calculer les échantillons appris pour un nombre fixe d'itérations, après quoi l'échantillonneur utilise une approche d'échantillonnage uniforme. En conséquence, l'échantillonneur garantit toujours une solution de chemin, si une solution de chemin existe.

    Création

    Description

    exemple

    statesampler = stateSamplerMPNET(statespace,mpnet) crée un objet échantillonneur d'état en utilisant l'espace d'état spécifié et MPNet pré-entraîné. Les entrées statespace et mpnet définissent respectivement les valeurs des propriétés StateSpace et MotionPlanningNetwork .

    exemple

    statesampler = stateSamplerMPNET(___,Name=Value) spécifie les propriétés en utilisant un ou plusieurs arguments nom-valeur en plus des arguments d'entrée dans la syntaxe précédente. Vous pouvez spécifier le Environment, StartState, GoalState, MaxLearnedSamples et GoalThreshold Propriétés comme arguments nom-valeur.

    Remarque

    Pour exécuter cette fonction, vous aurez besoin du Deep Learning Toolbox™.

    Propriétés

    développer tout

    Ce propriété est en lecture seule.

    Espace d'état pour l'échantillonnage, spécifié comme un objet stateSpaceSE2 , un objet stateSpaceDubins , un objet stateSpaceReedsShepp ou un objet d'une sous-classe de nav.StateSpace cours.

    Ce propriété est en lecture seule.

    MPNet pré-entraîné, spécifié comme objet mpnetSE2 .

    Environnement cartographique, spécifié en tant qu'objet binaryOccupancyMap ou occupancyMap .

    État de départ, spécifié sous la forme d'un vecteur à trois éléments de la forme [x y θ]. x, y et θ sont les variables de l'espace d'état.

    Types de données : single

    État d'objectif, spécifié sous la forme d'un vecteur à trois éléments de la forme [x y θ]. x, y et θ sont les variables de l'espace d'état.

    Types de données : single | double

    Nombre maximum d'échantillons appris, spécifié sous forme d'entier positif. Cette propriété détermine le nombre d'échantillons que l'échantillonneur d'état doit calculer à l'aide du MPNet pré-entraîné. Cette propriété définit le nombre d'itérations après lequel l'échantillonneur d'état calcule les échantillons à l'aide de l'approche d'échantillonnage uniforme.

    Pour plus d'informations sur l'impact de cette propriété sur les résultats d'échantillonnage, voir Effectuer un échantillonnage éclairé avec MPNet.

    Types de données : single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

    Seuil de distance jusqu'à l'objectif, spécifié sous forme de scalaire positif.

    Types de données : single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

    Fonctions d'objet

    sampleCalculer des échantillons d'état à l'aide de l'échantillonneur d'état MPNet
    copyCréer une copie complète de l'objet échantillonneur d'état MPNet

    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.

    Effectuez une planification de mouvement à l'aide d'échantillons d'espace d'état prédits par des réseaux de planification de mouvement pré-entraînés (MPNet). Ce processus comprend ces étapes :

    • Configurez l'objet mpnetSE2 pour l'échantillonnage de l'espace d'état à l'aide d'un MPNet pré-entraîné.

    • Utilisez l'objet stateSamplerMPNET pour échantillonner un espace d'état SE(2). L'échantillonneur d'état prend l'objet mpnetSE2 comme entrée et utilise le MPNet pré-entraîné pour prédire les échantillons d'état entre un point de départ et un point objectif.

    • Effectuez la planification de chemin à l’aide d’un planificateur de chemin RRT*. Utilisez des échantillons d'état prédits par le MPNet pré-entraîné comme graines pour la planification du chemin.

    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 la planification de mouvements

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

    rng(50,"twister")
    map = mapMaze(5,1,MapSize=[20 20],MapResolution=1.25);

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

    start = [2 8 0];
    goal = [17 18 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).

    stateBounds = [0 20; 0 20; -pi pi];
    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.

    stateSampler = stateSamplerMPNET(stateSpace,mpnet,Environment=map,StartState=start,GoalState=goal);

    Valider l'espace d'état

    Créez un validateur d'état pour valider les échantillons générés par l'échantillonneur.

    stateValidator = validatorOccupancyMap(stateSpace,Map=map);

    Définissez la distance de validation sur 0,01.

    stateValidator.ValidationDistance = 0.01;

    Calculer le chemin à l'aide de la méthode d'échantillonnage MPNet et de RRT*

    Calculez un chemin optimal entre la pose de départ et la pose d'objectif à l'aide d'un planificateur de chemin RRT*. Utilisez l'échantillonneur d'état MPNet pour échantillonner l'espace d'état.

    planner_MPNet = plannerRRTStar(stateSpace,stateValidator,StateSampler=stateSampler,MaxConnectionDistance=1);
    [pathObj_MPNet,solutionInfo_MPNet] = plan(planner_MPNet,start,goal)
    pathObj_MPNet = 
      navPath with properties:
    
          StateSpace: [1x1 stateSpaceSE2]
              States: [34x3 double]
           NumStates: 34
        MaxNumStates: Inf
    
    
    solutionInfo_MPNet = struct with fields:
          IsPathFound: 1
             ExitFlag: 1
             NumNodes: 191
        NumIterations: 274
             TreeData: [575x3 double]
            PathCosts: [274x1 double]
    
    

    Résultats du tracé

    Tracez les résultats obtenus à l'aide de la méthode d'échantillonnage de l'espace d'état MPNet. Tracez les données de l'arborescence et le chemin entre la pose de départ et la pose d'objectif.

    figure
    show(map)
    hold on
    plot(start(1),start(2),plannerLineSpec.start{:})
    plot(goal(1),goal(2),plannerLineSpec.goal{:})
    plot(solutionInfo_MPNet.TreeData(:,1),solutionInfo_MPNet.TreeData(:,2),plannerLineSpec.tree{:})
    plot(pathObj_MPNet.States(:,1),pathObj_MPNet.States(:,2),plannerLineSpec.path{:})
    title("Path Planning Using MPNet State Space Sampling")
    legend(Location="bestoutside")
    hold off

    Figure contains an axes object. The axes object with title Path Planning Using MPNet State Space Sampling, xlabel X [meters], ylabel Y [meters] contains 5 objects of type image, line. One or more of the lines displays its values using only markers These objects represent Start, Goal, Tree, Path.

    Références

    [1] Prokudin, Sergey, Christoph Lassner, and Javier Romero. “Efficient Learning on Point Clouds with Basis Point Sets.” In 2019 IEEE/CVF International Conference on Computer Vision Workshop (ICCVW), 3072–81. Seoul, Korea (South): IEEE, 2019. https://doi.org/10.1109/ICCVW.2019.00370.

    [2] Qureshi, Ahmed Hussain, Yinglong Miao, Anthony Simeonov, and Michael C. Yip. “Motion Planning Networks: Bridging the Gap Between Learning-Based and Classical Motion Planners.” IEEE Transactions on Robotics 37, no. 1 (February 2021): 48–66. https://doi.org/10.1109/TRO.2020.3006716.

    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