Main Content

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

global2frenet

Convertir les états globaux en états Frenet

Depuis R2020b

Description

exemple

frenetState = global2frenet(refPath,globalState) convertit les états globaux en états de trajectoire Frenet.

[___,latTimeDerivatives] = global2frenet(refPath,globalState) renvoie latTimeDerivatives contenant les dérivées du premier et du second ordre de l'écart latéral par rapport au temps et un indicateur indiquant si le cap doit être inversé lors de la conversion en coordonnées globales.

[___] = global2frenet(refPath,globalState,sFrame) accepte un vecteur de longueurs d'arc, sFrame sur lequel le cadre Frenet doit être centré.

Exemples

réduire tout

Générez un chemin de référence à partir d'un ensemble de waypoints.

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

Créez un objet trajectoryGeneratorFrenet à partir du chemin de référence.

connector = trajectoryGeneratorFrenet(refPath);

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

initCartState = refPath.SegmentParameters(1,:);
initFrenetState = global2frenet(refPath,initCartState);
termFrenetState = initFrenetState + [30 zeros(1,5)];
frenetTraj = connect(connector,initFrenetState,termFrenetState,5);

Convertissez la trajectoire en états globaux.

globalTraj = frenet2global(refPath,frenetTraj.Trajectory);

Afficher le chemin de référence et la trajectoire.

show(refPath);
axis equal
hold on
plot(globalTraj(:,1),globalTraj(:,2),'b')

Spécifiez les points globaux et recherchez les points les plus proches sur le chemin de référence.

globalPoints = waypoints(2:end,:) + [20 -50];
nearestPathPoint = closestPoint(refPath,globalPoints);

Affichez les points globaux et les points les plus proches sur le chemin de référence.

plot(globalPoints(:,1),globalPoints(:,2),'r*','MarkerSize',10)
plot(nearestPathPoint(:,1),nearestPathPoint(:,2),'b*','MarkerSize',10)

Interpolez entre les longueurs d’arc des deux premiers points les plus proches le long du chemin de référence.

arclengths = linspace(nearestPathPoint(1,6),nearestPathPoint(2,6),10);
pathStates = interpolate(refPath,arclengths);

Affichez les points de chemin interpolés.

plot(pathStates(:,1),pathStates(:,2),'g')
legend(["Waypoints","Reference Path","Trajectory to 30m",...
        "Global Points","Closest Points","Interpolated Path Points"])

Figure contains an axes object. The axes object contains 6 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, Global Points, Closest Points, Interpolated Path Points.

Arguments d'entrée

réduire tout

Chemin de référence, spécifié en tant qu'objet referencePathFrenet .

États dans le cadre de coordonnées global, spécifié sous la forme d'une matrice numérique P-par 6 avec des lignes de la forme [x y theta kappa speed accel], 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.

  • speed –– Vitesse dans la direction theta dans m/s.

  • accel –– Accélération dans le sens theta dans m/s2.

P est le nombre total d’états globaux.

Emplacements centraux de longueur d'arc pour les cadres Frenet, spécifiés sous la forme d'un vecteur d'élément N en mètres. Pour des résultats corrects, le vecteur entre le cadre et l'emplacement xy du globalState doit être orthogonal à l'angle tangent.

Arguments de sortie

réduire tout

États dans le référentiel Frenet, renvoyés sous la forme d'une matrice numérique P-par 6 avec des lignes de la forme [S dS ddS L dL ddL], où S est la longueur de l'arc et L est l'écart perpendiculaire par rapport à la 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. P est le nombre total d’états Frenet.

Dérivées temporelles latérales, spécifiées sous la forme d'une matrice N-par-3 où chaque ligne est de la forme [dL/dt ddL/dt^2 invertHeading] et N est le nombre total de points dans points. Chaque ligne contient les dérivées temporelles de 1er et 2e ordre de l'écart latéral et un indicateur, invertHeading, qui indique si le cap doit être inversé lors de la conversion en coordonnées globales (true) ou non (false).

Remarque

Si vous définissez latTimeDerivatives sans utiliser global2frenet, les règles suivantes doivent être suivies :

  1. L'indicateur invertHeading doit être vrai lorsque :

    1. Le véhicule roule en marche arrière (vitesse inférieure à 0)

    2. Le véhicule est à l'arrêt (la vitesse est égale à 0) et le véhicule est orienté à l'opposé du vecteur tangent à la trajectoire. c'est-à-dire cos(|tangentAngle(obj,S)-thetaExpected|) < 0

  2. Si 1b est vrai, alors dL/dS doit être annulé.

En savoir plus

réduire tout

Conversions du système de coordonnées Frenet

  • La fonction objet global2frenet trouve un point [x y]p le long du chemin le plus proche de la coordonnée xy de l'état global [x y theta kappa speed accel]g. Puisque le chemin de référence est C1 continu (tangentiellement continu), la distance sera la plus courte, où [x y]g-[x y]p est orthogonal à la tangente du chemin.

    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.

    • speed –– Vitesse dans la direction theta dans m/s.

    • accel –– Accélération dans le sens theta dans m/s2.

  • La fonction évalue ensuite l'état complet du chemin [x y theta kappa dkappa s]p. Cela équivaut à un référentiel mobile situé à [x y]p dont l'axe longitudinal pointe le long de thetap et l'axe latéral coupe [x y]g (droite- règle de la main). Le mouvement instantané de ce référentiel est décrit par [kappa dkappa]p.

    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

  • Les composantes de vitesse et d'accélération de l'état global agissent le long de la tangente définie par thetag, qui elle-même évolue en fonction de kappag. La fonction mappe ensuite la position globale, la vitesse et l'accélération au cadre Frenet local et renvoie l'état Frenet, [s ds dds L dL ddL]f.

    où:

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

    • L — Écart perpendiculaire à la direction du chemin de référence, en mètres.

    • ds et dds — Dérivés de s par rapport au temps.

    • dL et ddL — Dérivés de L par rapport à la longueur de l'arc, s.

    Depiction of Frenet states relative to a reference path

  • Le processus pour la fonction frenet2global est l'inverse de la fonction global2frenet .

  • La fonction frenet2global évalue le chemin à la longueur de l'arc de l'état de Frenet, sf=sp, renvoyant [x y theta kappa dkappa s]p.

  • Ce point définit à nouveau un référentiel dont les axes et le mouvement peuvent être utilisés pour projeter les écarts latéraux ou longitudinaux et leurs dérivées du premier et du second ordre dans le référentiel global.

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 R2020b