Contenido principal

Esta página se ha traducido mediante traducción automática. Haga clic aquí para ver la última versión en inglés.

global2frenet

Convertir estados globales a estados de Frenet

Descripción

frenetState = global2frenet(refPath,globalState) convierte estados globales en estados de trayectoria de Frenet.

ejemplo

[___,latTimeDerivatives] = global2frenet(refPath,globalState) devuelve latTimeDerivatives que contiene derivadas de primer y segundo orden de la desviación lateral con respecto al tiempo y un indicador que indica si el rumbo debe invertirse al convertir a coordenadas globales.

[___] = global2frenet(refPath,globalState,sFrame) acepta un vector de longitudes de arco, sFrame en el que se debe centrar el marco de Frenet.

Ejemplos

contraer todo

Genere una ruta de referencia a partir de un conjunto de puntos de referencia.

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

Crea un objeto trajectoryGeneratorFrenet a partir de la ruta de referencia.

connector = trajectoryGeneratorFrenet(refPath);

Genera una trayectoria de cinco segundos entre el origen de la ruta y un punto a 30 metros de la ruta como afirma Frenet.

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

Convierta la trayectoria a los estados globales.

globalTraj = frenet2global(refPath,frenetTraj.Trajectory);

Muestra la ruta de referencia y la trayectoria.

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

Especifique puntos globales y busque los puntos más cercanos en la ruta de referencia.

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

Muestra los puntos globales y los puntos más cercanos en la ruta de referencia.

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

Interpola entre las longitudes de arco de los dos primeros puntos más cercanos a lo largo de la ruta de referencia.

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

Muestra los waypoints interpolados.

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.

Argumentos de entrada

contraer todo

Ruta de referencia, especificada como un objeto referencePathFrenet.

Estados en el marco de coordenadas global, especificados como una matriz numérica de P por 6 con filas con la forma [x y theta kappa speed accel], donde:

  • x y y theta –– Estado SE(2) expresado en coordenadas globales, con x y y en metros y theta en radianes.

  • kappa –– Curvatura, o inversa del radio, en m-1.

  • speed –– Velocidad en la dirección theta en m/s.

  • accel –– Aceleración en la dirección theta en m/s2.

P es el número total de estados globales.

Ubicaciones del centro de longitud de arco para los marcos de Frenet, especificadas como un vector de elementos N en metros. Para obtener resultados correctos, el vector entre el marco y la ubicación xy del globalState debe ser ortogonal al ángulo tangente.

Argumentos de salida

contraer todo

Estados en el marco de coordenadas de Frenet, devueltos como una matriz numérica de P por 6 con filas con la forma [S dS ddS L dL ddL], donde S es la longitud del arco y L es la desviación perpendicular de la dirección de la ruta de referencia. Las derivadas de S son relativas al tiempo. Las derivadas de L son relativas a la longitud del arco, S. P es el número total de estados de Frenet.

Derivadas temporales laterales, especificadas como una matriz N por 3 donde cada fila tiene la forma [dL/dt ddL/dt^2 invertHeading] y N es el número total de puntos en points. Cada fila contiene las derivadas temporales de primer y segundo orden de la desviación lateral y un indicador, invertHeading, que indica si el rumbo debe invertirse al convertir a coordenadas globales (true) o no (false).

Nota

Si se define latTimeDerivatives sin el uso de global2frenet, se deben seguir las siguientes reglas:

  1. La bandera invertHeading debe ser verdadera cuando:

    1. El vehículo se mueve en reversa (la velocidad es menor que 0)

    2. El vehículo está parado (la velocidad es igual a 0) y está de espaldas al vector tangente de la trayectoria. es decir, cos(|tangentAngle(obj,S)-thetaExpected|) < 0

  2. Si 1b es verdadero, entonces dL/dS debe negarse.

Más acerca de

contraer todo

Capacidades ampliadas

expandir todo

Generación de código C/C++
Genere código C y C++ mediante MATLAB® Coder™.

Historial de versiones

Introducido en R2020b