cart2frenet
Convertir estados cartesianos a estados de Frenet
Descripción
cart2frenet( convierte un vector de seis elementos de planner,cartesianStates)cartesianStates [x, y, theta, kappa, speed, acceleration] en un vector de seis elementos de estados de Frenet [s, ds/dt, d2s/dt2, l, dl/ds, d2l/ds2], donde s es la longitud del arco desde el primer punto en la ruta de referencia y l es la distancia normal desde el punto más cercano en s en la ruta de referencia.
Ejemplos
Este ejemplo muestra cómo planificar una trayectoria óptima utilizando un objeto trajectoryOptimalFrenet.
Crear y asignar mapa al validador de estado
Cree un objeto de validación de estado para verificar colisiones.
stateValidator = validatorOccupancyMap;
Crea un mapa de cuadrícula de obstáculos.
grid = zeros(50,100); grid(24:26,48:53) = 1;
Crea un binaryOccupancyMap con el mapa de cuadrícula.
map = binaryOccupancyMap(grid);
Asigne el mapa y los límites estatales al validador estatal.
stateValidator.Map = map; stateValidator.StateSpace.StateBounds(1:2,:) = [map.XWorldLimits; map.YWorldLimits];
Planificar y visualizar la trayectoria
Cree una ruta de referencia para que la siga el planificador.
refPath = [0,25;100,25];
Inicialice el objeto del planificador con la ruta de referencia y el validador de estado.
planner = trajectoryOptimalFrenet(refPath,stateValidator);
Asigne valores de estado terminal longitudinal, desviación lateral y aceleración máxima.
planner.TerminalStates.Longitudinal = 100; planner.TerminalStates.Lateral = -10:5:10; planner.FeasibilityParameters.MaxAcceleration = 10;
Especifique el valor de compensación de desviación cerca del estado terminal lateral izquierdo para priorizar los cambios de carril izquierdo.
planner.DeviationOffset = 5;
Planificación de trayectoria
Estado cartesiano inicial del vehículo.
initCartState = [0 25 pi/9 0 0 0];
Convertir el estado cartesiano del vehículo al estado de Frenet.
initFrenetState = cart2frenet(planner,initCartState);
Planifique una trayectoria desde el estado inicial de Frenet.
plan(planner,initFrenetState);
Visualización de trayectoria
Visualiza el mapa y las trayectorias.
show(map) hold on show(planner,'Trajectory','all')
![Figure contains an axes object. The axes object with title Binary Occupancy Grid, xlabel X [meters], ylabel Y [meters] contains 5 objects of type image, line, patch. One or more of the lines displays its values using only markers These objects represent Waypoints, Reference Path, Optimal Trajectory.](../../examples/nav/win64/OptimalTrajectoryPlanningInTheFrenetSpaceExample_01.png)
Este ejemplo muestra cómo dividir los estados terminales longitudinales en la planificación de una trayectoria óptima utilizando un objeto trajectoryOptimalFrenet.
Crear y asignar mapa al validador de estado
Cree un objeto de validación de estado para verificar colisiones.
stateValidator = validatorOccupancyMap;
Crea un mapa de cuadrícula de obstáculos.
grid = zeros(50,100); grid(25:27,28:33) = 1; grid(16:18,37:42) = 1; grid(29:31,72:77) = 1;
Crea un binaryOccupancyMap con el mapa de cuadrícula.
map = binaryOccupancyMap(grid);
Asigne el mapa y los límites estatales al validador estatal.
stateValidator.Map = map; stateValidator.StateSpace.StateBounds(1:2,:) = [map.XWorldLimits; map.YWorldLimits];
Planificar y visualizar la trayectoria
Cree una ruta de referencia para que la siga el planificador.
refPath = [0,25;30,30;75,20;100,25];
Inicialice el objeto del planificador con la ruta de referencia y el validador de estado.
planner = trajectoryOptimalFrenet(refPath,stateValidator);
Asigne valores de estado terminal longitudinal, desviación lateral y aceleración máxima.
planner.TerminalStates.Longitudinal = 100; planner.TerminalStates.Lateral = -5:5:5; planner.FeasibilityParameters.MaxAcceleration = 10;
Asigne el número de particiones para el estado terminal longitudinal.
planner.NumSegments = 3;
Planificación de trayectoria
Estado Frenet inicial del vehículo.
initFrenetState = zeros(1,6);
Planifique una trayectoria desde el estado inicial de Frenet.
plan(planner,initFrenetState);
Visualización de trayectoria
Visualiza el mapa y las trayectorias.
show(map) hold on show(planner,'Trajectory','all') hold on
Generar límites de carril
Calcule el final de la ruta de referencia como estado de Frenet.
refPathEnd = cart2frenet(planner,[planner.Waypoints(end,:) 0 0 0 0]);
Calcule los desplazamientos de carril en ambos lados de los estados terminales laterales con un valor de ancho de medio carril.
laneOffsets = unique([planner.TerminalStates.Lateral+2.5 planner.TerminalStates.Lateral-2.5]);
Calcular posiciones de carriles en estado cartesiano.
numLaneOffsets = numel(laneOffsets); xRefPathEnd = ceil(refPathEnd(1)); laneXY = zeros((numLaneOffsets*xRefPathEnd)+numLaneOffsets,2); xIndex = 0; for laneID = 1:numLaneOffsets for x = 1:xRefPathEnd laneCart = frenet2cart(planner,[x 0 0 laneOffsets(laneID) 0 0]); xIndex = xIndex + 1; laneXY(xIndex,:) = laneCart(1:2); end xIndex = xIndex + 1; laneXY(xIndex,:) = NaN(1,2); end
Trazar los límites de los carriles.
plot(laneXY(:,1),laneXY(:,2),'LineWidth',0.5,'Color',[0.5 0.5 0.5],'DisplayName','Lane Boundaries','LineStyle','--')
![Figure contains an axes object. The axes object with title Binary Occupancy Grid, xlabel X [meters], ylabel Y [meters] contains 6 objects of type image, line, patch. One or more of the lines displays its values using only markers These objects represent Waypoints, Reference Path, Optimal Trajectory, Lane Boundaries.](../../examples/nav/win64/PartitionLongitudinalTerminalStatesTrajectoryGenerationExample_01.png)
Argumentos de entrada
Planificador de trayectoria óptima en el espacio Frenet, especificado como un objeto trajectoryOptimalFrenet.
Vector de estados cartesianos, especificado como un vector de 1 por 6 [x, y, theta, kappa, speed, acceleration].
x y y especifican la posición en metros.
theta especifica el ángulo de orientación en radianes.
kappa especifica la curvatura en
m-1.speed especifica la velocidad en
m/s.acceleration especifica la aceleración en
m/s2.
Ejemplo: [110 110 pi/4 0 0 0]
Tipos de datos: double
Capacidades ampliadas
Generación de código C/C++
Genere código C y C++ mediante MATLAB® Coder™.
Historial de versiones
Introducido en R2019b
Consulte también
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Seleccione un país/idioma
Seleccione un país/idioma para obtener contenido traducido, si está disponible, y ver eventos y ofertas de productos y servicios locales. Según su ubicación geográfica, recomendamos que seleccione: .
También puede seleccionar uno de estos países/idiomas:
Cómo obtener el mejor rendimiento
Seleccione China (en idioma chino o inglés) para obtener el mejor rendimiento. Los sitios web de otros países no están optimizados para ser accedidos desde su ubicación geográfica.
América
- América Latina (Español)
- Canada (English)
- United States (English)
Europa
- 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)