Main Content

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

referencePathFrenet

Ruta de referencia suave que se ajusta a los puntos de referencia

Desde R2020b

Descripción

El objeto referencePathFrenet ajusta una curva suave, continua y por partes a un conjunto de puntos de referencia dados como [x y] o [x y theta]. Después de ajustar los puntos a lo largo de la curva, los puntos de la ruta se expresan como [x y theta kappa dkappa s], 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

  • dkappa — Derivada de la curvatura con respecto a la longitud del arco en m-2

  • s — Longitud del arco o distancia a lo largo de la ruta desde el origen de la ruta, en metros

Depiction of global Frenet coordinates

Con este objeto, convierta trayectorias entre los sistemas de coordenadas globales y Frenet, interpola estados a lo largo de la ruta según la longitud del arco y consulte el punto más cercano en una ruta desde un estado global.

El objeto expresa los estados de Frenet como un vector de 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. Los derivados de S son relativos al tiempo. Las derivadas de L son relativas a la longitud del arco, S.

Depiction of Frenet states relative to a reference path

Creación

Descripción

ejemplo

refPathObj = referencePathFrenet(waypoints) ajusta un conjunto continuo de curvas por partes a los puntos de referencia especificados. El argumento waypoints establece la propiedad Waypoints .

refPathObj = referencePathFrenet(___,Name,Value) establece propiedades utilizando uno o más argumentos de par nombre-valor además de los argumentos de entrada en la sintaxis anterior. Puede especificar las propiedades DiscretizationDistance y MaxNumWaypoints como argumentos de nombre-valor.

Propiedades

expandir todo

Puntos premuestreados a lo largo de la ruta, especificados como una matriz P por 2 con filas de la forma [x y] o P por 3 matriz con filas de la forma [x y theta]. Especifique x y y en metros y theta en radianes. P es el número de puntos premuestreados y debe ser mayor o igual a dos.

Tipos de datos: single | double

Esta propiedad o parámetro es de solo lectura.

Longitud de arco total a lo largo de la ruta en metros.

Tipos de datos: single | double

Esta propiedad o parámetro es de solo lectura.

Parámetros de clotoide al inicio de los segmentos, especificados como una matriz N por 6 donde N es el número total de puntos de referencia. Cada fila contiene los parámetros del segmento clotoidal para conectar con el siguiente waypoint consecutivo y tiene el formato [x y theta kappa dkappa s] 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

  • dkappa — Derivada de la curvatura con respecto a la longitud del arco en m-2

  • s — Longitud del arco o distancia a lo largo de la ruta desde el origen de la ruta, en metros

Tipos de datos: single | double

Longitud del arco entre waypoints interpolados, especificada como un escalar positivo en metros. El objeto utiliza waypoints interpolados para acelerar el rendimiento de las funciones de transformación frenet2global y global2frenet. Una distancia de discretización más pequeña puede mejorar la precisión a expensas de la memoria y la eficiencia computacional.

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

Tipos de datos: single | double

Número máximo de puntos de referencia permitidos en la ruta, especificado como Inf para una ruta de tamaño variable o un entero positivo para imponer un límite estático.

Si MaxNumWaypoints está configurado en Inf, para generar código, DynamicMemoryAllocation debe estar configurado en 'on'.

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

Tipos de datos: single | double

Funciones del objeto

closestPointEncuentre el punto más cercano en la ruta de referencia al punto global
closestPointsToSequenceProyecta una secuencia de puntos en la ruta
closestProjectionsEncuentre proyecciones ortogonales entre el vector tangente de ruta y el punto de consulta
curvatureCurvatura de retorno en longitud de arco
changeInCurvatureRetorno del cambio de curvatura en longitud de arco
frenet2globalConvertir estados de Frenet en estados globales
global2frenetConvertir estados globales a estados de Frenet
interpolateInterpolar la ruta de referencia en las longitudes de arco proporcionadas
positionRetornar xy-posición en longitud de arco
tangentAngleÁngulo tangente de retorno en longitud de arco
showMostrar ruta de referencia en la figura
copyCopiar ruta de referencia

Ejemplos

contraer todo

Generar trayectorias alternativas para una ruta de referencia utilizando coordenadas de Frenet. Especifique diferentes estados iniciales y terminales para sus trayectorias. Ajusta tus estados en función de las trayectorias generadas.

Genere una ruta de referencia a partir de un conjunto de puntos de referencia. Cree un objeto trajectoryGeneratorFrenet a partir de la ruta de referencia.

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

Genere una trayectoria de cinco segundos entre el origen de la ruta y un punto a 30 m de la ruta como afirma 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);

Muestra la trayectoria en coordenadas 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.

Cree una matriz de estados terminales con desviaciones laterales entre –3 my 3 m. Genera trayectorias que cubren la misma longitud de arco en 10 segundos, pero se desvían lateralmente de la ruta de referencia. Muestra las nuevas rutas alternativas.

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.

Especifique un nuevo estado terminal para generar una nueva trayectoria. Esta trayectoria no es deseable porque requiere un movimiento inverso para alcanzar una velocidad longitudinal 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.

Relaje la restricción en el estado longitudinal especificando una longitud de arco de NaN. Genera y muestra la trayectoria nuevamente. La nueva posición muestra una buena trayectoria alternativa que se desvía de la trayectoria de referencia.

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

Más acerca de

expandir todo

Referencias

[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.

Capacidades ampliadas

Historial de versiones

Introducido en R2020b