Contenu principal

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

Description

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

exemple

[___,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

Capacités étendues

développer tout

Génération de code C/C++
Générez du code C et C++ avec MATLAB® Coder™.

Historique des versions

Introduit dans R2020b