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.

optimizePathOptions

Crear opciones de optimización para la función optimizarPath

Desde R2022a

    Descripción

    Las opciones de optimización se agrupan en cuatro categorías:

    • Trajectory Parameters — Especifica el movimiento deseado del robot a lo largo de la trayectoria.

    • Obstacle Parameters — Especifica las distancias que determinan la influencia de los obstáculos en la ruta.

    • Solver Parameters — Especifica las opciones del solucionador utilizadas para optimizar la ruta.

    • Weights — Especifique los pesos de la función de costo.

    Nota

    En un nivel muy alto, dentro de la función optimizePath ocurren dos operaciones principales:

    1. Path Adjustment — Aumenta (interpolar) o disminuye (desinterpolar) poses en la ruta.

    2. Optimization — Minimiza el costo de la ruta invocando el solucionador (Levenberg–Marquardt).

    La propiedad NumIteration determina cuántas veces se ejecutarán los pasos 1 y 2 en un bucle. La propiedad MaxSolverIteration determina las iteraciones máximas para Levenberg–Marquardt cada vez que se invoca en el paso 2. Para los valores predeterminados, Path Adjustment y Optimization (invocación del solucionador) ocurrirán cuatro veces y en cada invocación el solucionador iterará un máximo de 15 veces.

    Creación

    Descripción

    options = optimizePathOptions crea un conjunto de opciones de optimización predeterminadas para la función optimizePath.

    ejemplo

    Propiedades

    expandir todo

    Parámetros de trayectoria

    Número máximo de poses permitidas en la ruta, especificada como un número entero mayor o igual a 3.

    Ejemplo: options.MaxPathStates = 100

    Tipos de datos: single | double

    Duración del recorrido entre dos poses consecutivas, especificado como escalar positivo en segundos. Este parámetro junto con MaxVelocity afecta la distancia de interpolación entre poses. Aumente este valor para tener una menor cantidad de poses y redúzcalo para tener una mayor cantidad de poses en la ruta de salida.

    Ejemplo: options.ReferenceDeltaTime = 0.5

    Tipos de datos: single | double

    Radio de giro mínimo en la ruta, especificado como escalar positivo en metros. Tenga en cuenta que esta es una restricción suave y puede ignorarse según el valor del parámetro WeightMinTurningRadius con respecto a otros pesos.

    Ejemplo: options.MinTurningRadius = 1.5

    Tipos de datos: single | double

    Velocidad máxima a lo largo de la ruta, especificada como un escalar positivo en metros por segundo. Tenga en cuenta que esta es una restricción suave y puede ignorarse según el valor del parámetro WeightVelocity con respecto a otros pesos.

    Ejemplo: options.MaxVelocity = 0.5

    Tipos de datos: single | double

    Velocidad angular máxima a lo largo de la ruta, especificada como un escalar positivo en radianes por segundo. Tenga en cuenta que esta es una restricción suave y puede ignorarse según el valor del parámetro WeightAngularVelocity con respecto a otros pesos.

    Ejemplo: options.MaxAngularVelocity = 0.5

    Tipos de datos: single | double

    Aceleración máxima a lo largo de la ruta, especificada como un escalar positivo en metros por segundo al cuadrado. Tenga en cuenta que esta es una restricción suave y puede ignorarse según el valor del parámetro WeightAcceleration con respecto a otros pesos.

    Ejemplo: options.MaxAcceleration = 0.6

    Tipos de datos: single | double

    Aceleración angular máxima a lo largo de la trayectoria, especificada como un escalar positivo en radianes por segundo al cuadrado. Tenga en cuenta que esta es una restricción suave y puede ignorarse según el valor del parámetro WeightAngularAcceleration con respecto a otros pesos.

    Ejemplo: options.MaxAngularAcceleration = 0.6

    Tipos de datos: single | double

    Parámetros de obstáculos

    Distancia de seguridad respecto a los obstáculos, especificada como escalar positivo en metros. Tenga en cuenta que esta es una restricción suave y puede ignorarse según el valor del parámetro WeightObstacles con respecto a otros pesos. Consulte Parámetros de obstáculos.

    Ejemplo: options.ObstacleSafetyMargin = 0.6

    Tipos de datos: single | double

    Distancia de corte de obstáculos, especificada como escalar positivo en metros. El optimizador de ruta ignora los obstáculos más allá de la distancia límite. Consulte Parámetros de obstáculos.

    Ejemplo: options.ObstacleCutOffDistance = 1.5

    Tipos de datos: single | double

    Distancia de inclusión de obstáculos, especificada como escalar positivo en metros. El optimizador de ruta considera todos los obstáculos dentro de la distancia de inclusión. Además, el optimizador de ruta también considera el obstáculo más cercano a la izquierda y a la derecha del robot entre la región de inclusión y de corte. Consulte Parámetros de obstáculos.

    Ejemplo: options.ObstacleInclusionDistance = 0.5

    Tipos de datos: single | double

    Parámetros del solver

    Número de invocaciones del solver , especificado como un entero positivo. Este valor también especifica el número de veces que se produce la interpolación durante la optimización.

    Ejemplo: options.NumIteration = 5

    Tipos de datos: single | double

    Número máximo de iteraciones para cada invocación del solver , especificado como un entero positivo.

    Ejemplo: options.MaxSolverIteration = 12

    Tipos de datos: single | double

    Pesos

    Ponderación de la función de coste por tiempo, especificada como un escalar no negativo. Para reducir el duración del recorrido, aumente este valor de peso.

    Ejemplo: options.WeightTime = 12

    Tipos de datos: single | double

    Peso de la función de coste para el movimiento no holonómico, especificado como un escalar no negativo. Para obtener una ruta más suave, aumente este valor de peso.

    Ejemplo: options.WeightSmoothness = 500

    Tipos de datos: single | double

    Peso de la función de coste para cumplir con el radio de giro mínimo, especificado como un escalar no negativo. Para garantizar que el radio de giro esté por encima del radio de giro mínimo, aumente este valor de peso.

    Ejemplo: options.WeightMinTurningRadius = 15

    Tipos de datos: single | double

    Peso de la función de coste para la velocidad, especificado como un escalar no negativo. Para mantener la velocidad por debajo de MaxVelocity, aumente este valor de peso.

    Ejemplo: options.WeightVelocity = 120

    Tipos de datos: single | double

    Peso de la función de coste para la velocidad angular, especificada como un escalar no negativo. Para mantener la velocidad angular por debajo de MaxAngularVelocity, aumente este valor de peso.

    Ejemplo: options.WeightAngularVelocity = 15

    Tipos de datos: single | double

    Peso de la función de coste para la aceleración, especificado como un escalar no negativo. Para mantener la aceleración por debajo de MaxAcceleration, aumente este valor de peso.

    Ejemplo: options.WeightAcceleration = 15

    Tipos de datos: single | double

    Peso de la función de coste para la aceleración angular, especificada como un escalar no negativo. Para mantener la aceleración angular por debajo de MaxAngularAcceleration, aumente este valor de peso.

    Ejemplo: options.WeightAngularAcceleration = 15

    Tipos de datos: single | double

    Peso de la función de coste para mantener una distancia segura de los obstáculos, especificado como un escalar no negativo. Para mantener la distancia segura de los obstáculos, aumente este valor de peso.

    Ejemplo: options.WeightObstacles = 60

    Tipos de datos: single | double

    Ejemplos

    contraer todo

    Configurar el entorno

    Cargue un mapa en el espacio de trabajo.

    map = load("exampleMaps.mat").complexMap;

    Cree un mapa de ocupación binario.

    map = binaryOccupancyMap(map);

    Cree un objeto de validador de estado.

    stateValidator = validatorOccupancyMap;

    Asigne el mapa al objeto del validador de estado.

    stateValidator.Map = map;

    Establezca la distancia de validación para el validador.

    stateValidator.ValidationDistance = 0.01;

    Planificar ruta

    Inicialice el objeto plannerHybridAStar con el objeto validador de estado. Especifique la propiedad MinTurningRadius del planificador como 2 metros.

    planner = plannerHybridAStar(stateValidator,MinTurningRadius=2);

    Define las posiciones inicial y final como vectores [x y theta]. x y y especifican la posición en metros, y theta especifica el ángulo de orientación en radianes.

    start = [6 3 pi/2];
    goal = [32 32 0];

    Planifica una ruta desde la pose inicial hasta la pose objetivo.

    path = plan(planner,start,goal);
    inpath = path.States;

    Optimizar ruta

    Configurar opciones para optimización.

    options = optimizePathOptions
    options = 
    optimizePathOptions
    
       Trajectory Parameters
                    MaxPathStates: 200
               ReferenceDeltaTime: 0.3000
                 MinTurningRadius: 1
                      MaxVelocity: 0.4000
               MaxAngularVelocity: 0.3000
                  MaxAcceleration: 0.5000
           MaxAngularAcceleration: 0.5000
    
       Obstacle Parameters
             ObstacleSafetyMargin: 0.5000
           ObstacleCutOffDistance: 2.5000
        ObstacleInclusionDistance: 0.7500
    
       Solver Parameters
                     NumIteration: 4
               MaxSolverIteration: 15
    
       Weights
                       WeightTime: 10
                 WeightSmoothness: 1000
           WeightMinTurningRadius: 10
                   WeightVelocity: 100
            WeightAngularVelocity: 10
               WeightAcceleration: 10
        WeightAngularAcceleration: 10
                  WeightObstacles: 50
    
    

    Establezca el valor del radio de giro mínimo igual que en el planificador.

    options.MinTurningRadius = 2;

    Especifique el número máximo de poses permitidas en la ruta optimizada.

    options.MaxPathStates = size(inpath,1) * 3;

    Mantenga una distancia segura de 0.75 metros de los obstáculos.

    options.ObstacleSafetyMargin = 0.75;

    Optimizar la ruta generado por el planificador.

    optpath = optimizePath(inpath,map,options);

    Visualizar

    Visualice la ruta de entrada y la ruta optimizada en el mapa.

    show(map)
    hold on
    quiver(inpath(:,1),inpath(:,2),cos(inpath(:,3)),sin(inpath(:,3)),0.1);
    quiver(optpath(:,1),optpath(:,2),cos(optpath(:,3)),sin(optpath(:,3)),0.1);
    legend("Input Path","Optimized Path")

    Figure contains an axes object. The axes object with title Binary Occupancy Grid, xlabel X [meters], ylabel Y [meters] contains 3 objects of type image, quiver. These objects represent Input Path, Optimized Path.

    Más acerca de

    expandir todo

    Referencias

    [1] Rosmann, Christoph, Frank Hoffmann, and Torsten Bertram. “Kinodynamic Trajectory Optimization and Control for Car-like Robots.” In 2017 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS), 5681–86. Vancouver, BC: IEEE, 2017. https://doi.org/10.1109/IROS.2017.8206458.

    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 R2022a

    Consulte también