Main Content

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

controllerPurePursuit

Créer un contrôleur pour suivre un ensemble de waypoints

Depuis R2019b

Description

Le controllerPurePursuit System object™ crée un objet contrôleur utilisé pour faire en sorte qu'un véhicule à entraînement différentiel suive un ensemble de points de cheminement. L'objet calcule les vitesses linéaires et angulaires du véhicule en fonction de la pose actuelle. Des appels successifs à l'objet avec des poses mises à jour fournissent des commandes de vitesse mises à jour pour le véhicule. Utilisez les propriétés MaxAngularVelocity et DesiredLinearVelocity pour mettre à jour les vitesses en fonction des performances du véhicule.

La propriété LookaheadDistance calcule un point d'anticipation sur le chemin, qui est un objectif local pour le véhicule. La commande de vitesse angulaire est calculée en fonction de ce point. Changer LookaheadDistance a un impact significatif sur les performances de l'algorithme. Une distance de vision plus élevée se traduit par une trajectoire plus fluide pour le véhicule, mais peut amener le véhicule à prendre des virages le long du chemin. Une faible distance de prévision peut entraîner des oscillations dans le suivi de la trajectoire, provoquant un comportement instable. Pour plus d'informations sur l'algorithme de poursuite pure, voir Pure Pursuit Controller.

Pour calculer les commandes de contrôle de vitesse linéaire et angulaire :

  1. Créez l'objet controllerPurePursuit et définissez ses propriétés.

  2. Appelez l'objet avec des arguments, comme s'il s'agissait d'une fonction.

Pour en savoir plus sur le fonctionnement des objets système, voir What Are System Objects?

Création

Description

exemple

controller = controllerPurePursuit crée un objet de poursuite pure qui utilise l'algorithme de poursuite pure pour calculer les entrées de vitesse linéaire et angulaire pour un véhicule à entraînement différentiel.

controller = controllerPurePursuit(Name,Value) crée un objet de poursuite pure avec des options supplémentaires spécifiées par une ou plusieurs paires Name,Value . Name est le nom de la propriété et Value est la valeur correspondante. Le nom doit apparaître entre guillemets simples (' '). Vous pouvez spécifier plusieurs arguments de paire nom-valeur dans n'importe quel ordre comme Name1,Value1,...,NameN,ValueN. Les propriétés non spécifiées conservent leurs valeurs par défaut.

Exemple : controller = controllerPurePursuit('DesiredLinearVelocity', 0.5)

Propriétés

développer tout

Vitesse linéaire constante souhaitée, spécifiée sous forme de scalaire en mètres par seconde. Le contrôleur suppose que le véhicule roule à une vitesse linéaire constante et que la vitesse angulaire calculée est indépendante de la vitesse linéaire.

Types de données : double

Distance d'anticipation, spécifiée sous forme d'un scalaire en mètres. La distance d'anticipation modifie la réponse du contrôleur. Un véhicule avec une distance de vision plus élevée produit des trajectoires fluides mais prend des virages plus longs dans les virages. Un véhicule avec une distance de vision plus petite suit la trajectoire de près et prend des virages serrés, mais crée potentiellement des oscillations sur la trajectoire.

Types de données : double

Vitesse angulaire maximale, spécifiée sous la forme d'un scalaire en radians par seconde. Le contrôleur sature la sortie de vitesse angulaire absolue à la valeur donnée.

Types de données : double

Waypoints, spécifiés sous la forme d'un tableau n-par 2 de paires [x y] , où n est le nombre de waypoints. Vous pouvez générer les waypoints à partir de la classe mobileRobotPRM (Robotics System Toolbox) ou à partir d'une autre source.

Types de données : double

Utilisation

Description

exemple

[vel,angvel] = controller(pose) traite la position et l'orientation du véhicule, pose, et génère la vitesse linéaire, vel, et la vitesse angulaire, angvel.

[vel,angvel,lookaheadpoint] = controller(pose) renvoie le point d'anticipation, qui est un emplacement sur le chemin utilisé pour calculer les commandes de vitesse. Cet emplacement sur le chemin est calculé à l'aide de la propriété LookaheadDistance sur l'objet controller .

Arguments en entrée

développer tout

Position et orientation du véhicule, spécifiées sous forme de vecteur 3 par 1 sous la forme [x y theta]. La pose du véhicule est une position x et y avec une orientation angulaire θ (en radians) mesurée à partir de l'axe x.

Arguments de sortie

développer tout

Vitesse linéaire, spécifiée sous forme scalaire en mètres par seconde.

Types de données : double

Vitesse angulaire, spécifiée sous forme de scalaire en radians par seconde.

Types de données : double

Point d'anticipation sur le chemin, renvoyé sous la forme d'un vecteur [x y] . Cette valeur est calculée en fonction de la propriété LookaheadDistance .

Fonctions d'objet

Pour utiliser une fonction objet, spécifiez le System object comme premier argument d'entrée. Par exemple, pour libérer les ressources système d'un System object nommé obj, utilisez cette syntaxe :

release(obj)

développer tout

infoInformations caractéristiques de l'objet controllerPurePursuit
stepRun System object algorithm
releaseRelease resources and allow changes to System object property values and input characteristics
resetReset internal states of System object

Exemples

réduire tout

Utilisez la méthode info pour obtenir plus d'informations sur un objet controllerPurePursuit . La fonction info renvoie deux champs, RobotPose et LookaheadPoint, qui correspondent à la position et à l'orientation actuelles du robot et au point sur le chemin utilisé pour calculer les sorties du dernier appel de l'objet.

Créez un objet controllerPurePursuit .

pp = controllerPurePursuit;

Attribuez des points de cheminement.

pp.Waypoints = [0 0;1 1];

Calculez les commandes de contrôle à l'aide de l'objet pp avec la pose initiale [x y theta] donnée en entrée.

[v,w] = pp([0 0 0]);

Obtenez des informations supplémentaires.

s = info(pp)
s = struct with fields:
         RobotPose: [0 0 0]
    LookaheadPoint: [0.7071 0.7071]

Capacités étendues

Historique des versions

Introduit dans R2019b