global2frenet
Syntaxe
Description
convertit les états globaux en états de trajectoire Frenet.frenetState
= global2frenet(refPath
,globalState
)
[___,
renvoie latTimeDerivatives
] = global2frenet(refPath
,globalState
)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(
accepte un vecteur de longueurs d'arc, refPath
,globalState
,sFrame
)sFrame
sur lequel le cadre Frenet doit être centré.
Exemples
Générer une trajectoire à partir du chemin de référence
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"])
Arguments d'entrée
refPath
— Chemin de référence
referencePathFrenet
objet
Chemin de référence, spécifié en tant qu'objet referencePathFrenet
.
globalState
— États dans le cadre de coordonnées global
P-matrice numérique par 6
É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
dansm/s
.accel –– Accélération dans le sens
theta
dansm/s2
.
P est le nombre total d’états globaux.
sFrame
— Emplacements des cadres de longueur d'arc
N-élément vecteur
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
frenetState
— États dans le référentiel Frenet
P-matrice numérique par 6
É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.
latTimeDerivatives
— Dérivées temporelles latérales
N-matrice par 3
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 :
L'indicateur invertHeading doit être vrai lorsque :
Le véhicule roule en marche arrière (vitesse inférieure à 0)
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
Si 1b est vrai, alors dL/dS doit être annulé.
En savoir plus
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 dethetap
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.
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 dekappag
. 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.
Le processus pour la fonction
frenet2global
est l'inverse de la fonctionglobal2frenet
.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
Voir aussi
Objets
Fonctions
Commande MATLAB
Vous avez cliqué sur un lien qui correspond à cette commande MATLAB :
Pour exécuter la commande, saisissez-la dans la fenêtre de commande de MATLAB. Les navigateurs web ne supportent pas les commandes MATLAB.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)