Main Content

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

referencePathFrenet

Chemin de référence fluide adapté aux waypoints

Depuis R2020b

Description

L'objet referencePathFrenet adapte une courbe lisse, par morceaux et continue à un ensemble de points de cheminement donnés comme [x y] ou [x y theta]. Après ajustement des points le long de la courbe, les points du chemin sont exprimés sous la forme [x y theta kappa dkappa s], où :

  • x y et theta— État SE(2) exprimé en coordonnées globales, avec x et y en mètres et theta en radians

  • kappa — Courbure, ou inverse du rayon, en m-1

  • dkappa — Dérivée de la courbure par rapport à la longueur de l'arc dans m-2

  • s — Longueur de l'arc ou distance le long du chemin depuis l'origine du chemin, en mètres

Depiction of global Frenet coordinates

À l'aide de cet objet, convertissez les trajectoires entre les systèmes de coordonnées global et Frenet, interpolez les états le long du chemin en fonction de la longueur de l'arc et interrogez le point le plus proche sur un chemin à partir d'un état global.

L'objet exprime les états de Frenet sous la forme d'un vecteur de forme [S dS ddS L dL ddL], où S est la longueur de l'arc et L est l'écart perpendiculaire par rapport à l'arc. direction du chemin de référence. Les dérivés de S sont relatifs au temps. Les dérivées de L sont relatives à la longueur de l'arc, S.

Depiction of Frenet states relative to a reference path

Création

Description

exemple

refPathObj = referencePathFrenet(waypoints) adapte un ensemble continu de courbes par morceaux aux points de cheminement spécifiés. L'argument waypoints définit la propriété Waypoints .

refPathObj = referencePathFrenet(___,Name,Value) définit les propriétés en utilisant un ou plusieurs arguments de paire nom-valeur en plus des arguments d'entrée dans la syntaxe précédente. Vous pouvez spécifier les propriétés DiscretizationDistance et MaxNumWaypoints comme arguments nom-valeur.

Propriétés

développer tout

Points pré-échantillonnés le long du chemin, spécifiés sous la forme d'une matrice P-par-2 avec des lignes de la forme [x y] ou P-par-3 matrice avec des lignes de forme [x y theta]. Spécifiez x et y en mètres et theta en radians. P est le nombre de points pré-échantillonnés, et doit être supérieur ou égal à deux.

Types de données : single | double

Ce propriété est en lecture seule.

Longueur totale de l'arc le long du chemin en mètres.

Types de données : single | double

Ce propriété est en lecture seule.

Paramètres Clothoïdes au début des segments, spécifiés sous la forme d'une matrice N-par 6 où N est le nombre total de points de cheminement. Chaque ligne contient les paramètres du segment Clothoïdal à connecter au prochain waypoint consécutif et se présente sous la forme [x y theta kappa dkappa s] où :

  • x y et theta — État SE(2) exprimé en coordonnées globales, avec x et y en mètres et theta en radians

  • kappa — Courbure, ou inverse du rayon, en m-1

  • dkappa — Dérivée de la courbure par rapport à la longueur de l'arc dans m-2

  • s — Longueur de l'arc ou distance le long du chemin depuis l'origine du chemin, en mètres

Types de données : single | double

Longueur de l'arc entre les points du chemin interpolé, spécifiée sous forme de scalaire positif en mètres. L'objet utilise des points de chemin interpolés pour accélérer les performances des fonctions de transformation frenet2global et global2frenet. Une distance de discrétisation plus petite peut améliorer la précision au détriment de la mémoire et de l'efficacité des calculs.

Exemple : refPath = referencePathFrenet(waypoints,'DiscretizationDistance',0.4)

Types de données : single | double

Nombre maximum de waypoints autorisés dans le chemin, spécifié soit par Inf pour un chemin redimensionnable, soit par un nombre entier positif pour appliquer une limite statique.

Si MaxNumWaypoints est défini sur Inf, pour générer du code, DynamicMemoryAllocation doit être défini sur 'on'.

Exemple : refPath = referencePathFrenet(waypoints,'MaxNumWaypoints',10)

Types de données : single | double

Fonctions d'objet

closestPointTrouver le point le plus proche sur le chemin de référence jusqu'au point global
closestPointsToSequenceProjette une séquence de points sur le chemin
closestProjectionsFind orthogonal projections between path tangent vector and query point
curvatureReturn curvature at arclength
changeInCurvatureRenvoie le changement de courbure à la longueur de l'arc
frenet2globalConvert Frenet states to global states
global2frenetConvertir les états globaux en états Frenet
interpolateInterpoler le chemin de référence aux longueurs d'arc fournies
positionRetour xy-position à la longueur de l'arc
tangentAngleAngle de retour de la tangente à la longueur de l'arc
showAfficher le chemin de référence dans la figure
copyCopier le chemin de référence

Exemples

réduire tout

Générez des trajectoires alternatives pour un chemin de référence à l'aide des coordonnées Frenet. Spécifiez différents états initiaux et terminaux pour vos trajectoires. Ajustez vos états en fonction des trajectoires générées.

Générez un chemin de référence à partir d'un ensemble de waypoints. Créez un objet trajectoryGeneratorFrenet à partir du chemin de référence.

waypoints = [0 0; ...
	50 20; ...
	100 0; ...
	150 10];
refPath = referencePathFrenet(waypoints);
connector = trajectoryGeneratorFrenet(refPath);

Générez une trajectoire de cinq secondes entre l'origine du chemin et un point situé à 30 m en aval du chemin, comme l'indique Frenet.

initState = [0 0 0 0 0 0];  % [S ds ddS L dL ddL]
termState = [30 0 0 0 0 0]; % [S ds ddS L dL ddL]
[~,trajGlobal] = connect(connector,initState,termState,5);

Afficher la trajectoire en coordonnées globales.

show(refPath);
hold on
axis equal
plot(trajGlobal.Trajectory(:,1),trajGlobal.Trajectory(:,2),'b')
legend(["Waypoints","Reference Path","Trajectory to 30m"])

Figure contains an axes object. The axes object contains 3 objects of type line. One or more of the lines displays its values using only markers These objects represent Waypoints, Reference Path, Trajectory to 30m.

Créez une matrice d'états terminaux avec des écarts latéraux compris entre –3 m et 3 m. Générez des trajectoires qui couvrent la même longueur d'arc en 10 secondes, mais s'écartent latéralement de la trajectoire de référence. Affichez les nouveaux chemins alternatifs.

termStateDeviated = termState + ([-3:3]' * [0 0 0 1 0 0]);
[~,trajGlobal] = connect(connector,initState,termStateDeviated,10);

clf
show(refPath);
hold on
axis equal
for i = 1:length(trajGlobal)
    plot(trajGlobal(i).Trajectory(:,1),trajGlobal(i).Trajectory(:,2),'g')
end
legend(["Waypoints","Reference Path","Alternative Trajectories"])
hold off

Figure contains an axes object. The axes object contains 9 objects of type line. One or more of the lines displays its values using only markers These objects represent Waypoints, Reference Path, Alternative Trajectories.

Spécifiez un nouvel état terminal pour générer une nouvelle trajectoire. Cette trajectoire n'est pas souhaitable car elle nécessite un mouvement inverse pour atteindre une vitesse longitudinale de 10 m/s.

newTermState = [5 10 0 5 0 0];
[~,newTrajGlobal] = connect(connector,initState,newTermState,3);

clf
show(refPath);
hold on
axis equal
plot(newTrajGlobal.Trajectory(:,1),newTrajGlobal.Trajectory(:,2),'b');
legend(["Waypoint","Reference Path","New Trajectory"])
hold off

Figure contains an axes object. The axes object contains 3 objects of type line. One or more of the lines displays its values using only markers These objects represent Waypoint, Reference Path, New Trajectory.

Assouplissez la restriction sur l'état longitudinal en spécifiant une longueur d'arc de NaN. Générez et affichez à nouveau la trajectoire. La nouvelle position montre une bonne trajectoire alternative qui s'écarte de la trajectoire de référence.

relaxedTermState = [NaN 10 0 5 0 0];
[~,trajGlobalRelaxed] = connect(connector,initState,relaxedTermState,3);

clf
show(refPath);
hold on
axis equal
plot(trajGlobalRelaxed.Trajectory(:,1),trajGlobalRelaxed.Trajectory(:,2),'g');
hold off

Figure contains an axes object. The axes object contains 3 objects of type line. One or more of the lines displays its values using only markers

En savoir plus

développer tout

Références

[1] Werling, Moritz, Julius Ziegler, Sören Kammel, and Sebastian Thrun. "Optimal Trajectory Generation for Dynamic Street Scenarios in a Frenet Frame." 2010 IEEE International Conference on Robotics and Automation. 2010, pp. 987–993.

[2] Bertolazzi, Enrico, and Marco Frego. “Fast and Accurate Clothoid Fitting.” Mathematical Methods in the Applied Sciences 38, no. 5 (March 30, 2015): 881–97. https://doi.org/10.1002/mma.3114.

Capacités étendues

Historique des versions

Introduit dans R2020b