Main Content

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

plan

Planifier un chemin cinématiquement réalisable entre deux états

Depuis R2021b

    Description

    exemple

    path = plan(planner,startState,goalState) essaie de trouver un chemin valide entre startState et goalState.

    La planification est réalisée sur la base du propagateur d'état, qui exploite un modèle cinématique et des contrôleurs du système pour rechercher l'espace de configuration. Le planificateur renvoie un objet navPathControl , path, qui contient le propagateur utilisé lors de la planification et une séquence d'états, de contrôles, d'états cibles et de durées de contrôle.

    [___,solutionInfo] = plan(planner,startState,goalState) renvoie également les informations de solution solutionInfo de la planification du chemin.

    [___] = plan(planner,startState,goalSampleFcn) prend un handle de fonction qui produit une configuration d'objectif lorsqu'il est appelé. Le handle de fonction ne doit prendre aucune entrée et générer un état d'objectif dont la taille correspond à startState.

    Exemples

    réduire tout

    Planifiez des trajectoires de contrôle pour un modèle cinématique de vélo avec l'objet mobileRobotPropagator . Spécifiez une carte pour l'environnement, définissez des limites d'état et définissez un emplacement de départ et un emplacement objectif. Planifiez un chemin à l'aide de l'algorithme RRT basé sur le contrôle, qui utilise un propagateur d'état pour planifier le mouvement et les commandes de contrôle requises.

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

    Chargez une matrice de carte ternaire et créez un objet occupancyMap . Créez le propagateur d'état à l'aide de la carte. Par défaut, le propagateur d'état utilise un modèle cinématique de vélo.

    load('exampleMaps','ternaryMap')
    map = occupancyMap(ternaryMap,10);
    
    propagator = mobileRobotPropagator(Environment=map); % Bicycle model

    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. La fonction plan génère un objet navPathControl , qui contient les états, les commandes de contrôle et les durées.

    rng("default")
    path = plan(planner,start,goal)
    path = 
      navPathControl with properties:
    
        StatePropagator: [1x1 mobileRobotPropagator]
                 States: [192x3 double]
               Controls: [191x2 double]
              Durations: [191x1 double]
           TargetStates: [191x3 double]
              NumStates: 192
            NumSegments: 191
    
    

    Visualisez les résultats

    Visualisez la carte et tracez les états du chemin.

    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

    Affichez les entrées de contrôle [v psi] de la vitesse d'avancement et de l'angle de braquage.

    plot(path.Controls)
    ylim([-1 1])
    legend(["Velocity (m/s)","Steering Angle (rad)"])

    Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Velocity (m/s), Steering Angle (rad).

    Arguments d'entrée

    réduire tout

    Planificateur de chemin, spécifié comme objet plannerControlRRT .

    État initial du chemin, spécifié comme vecteur d'élément s. s est le nombre de variables d'état dans l'espace d'état. Par exemple, un robot dans l'espace SE(2) a un vecteur d'état de [x y theta].

    Exemple : [1 1 pi/6]

    Types de données : single | double

    État cible du chemin, spécifié comme vecteur d'élément s. s est le nombre de variables d'état dans l'espace d'état. Par exemple, un robot dans l'espace SE(2) a un vecteur d'état de [x y theta].

    Exemple : [2 2 pi/3]

    Types de données : single | double

    Exemple de fonction d’état d’objectif, spécifiée comme descripteur de fonction. Le handle de fonction ne doit prendre aucune entrée et générer un état d'objectif dont la taille correspond à startState.

    Exemple :

    Types de données : function_handle

    Arguments de sortie

    réduire tout

    Informations sur le chemin prévu, renvoyées sous la forme d'un objet navPathControl .

    Informations sur la solution, renvoyées sous forme de structure. La structure contient ces champs :

    ChampDescription
    IsPathFoundIndique si un chemin est trouvé. Il renvoie sous la forme 1 si un chemin est trouvé. Sinon, il renvoie sous la forme 0.
    ExitFlag

    Indique le statut de fin du planificateur, renvoyé comme l'une des options suivantes :

    • 1 — Objectif atteint avec succès

    • 2 — Nombre maximum d'itérations dépassé

    • 3 — Nombre maximum de nœuds dépassé

    • 4 — Dépassement du temps de planification maximum

    NumTreeNodeNombre de nœuds dans l'arborescence de recherche lorsque le planificateur se termine, à l'exclusion du nœud racine.
    NumIterationsNombre d'états cibles propagés.
    PlanningTimeTemps écoulé lors de la planification, renvoyé sous forme de scalaire en secondes.
    TreeInfoCollection d'états explorés qui reflète l'état de l'arborescence de recherche lorsque le planificateur se termine. Notez que le planificateur insère des valeurs NaN comme délimiteurs pour séparer chaque arête individuelle.

    Types de données : structure

    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 R2021b

    Voir aussi

    Objets

    Fonctions