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.

optimizePath

Optimice la ruta manteniendo una distancia segura del obstáculo

Desde R2022a

    Descripción

    optPath = optimizePath(path) optimiza el tiempo de recorrido y la suavidad del path especificado para robots similares a automóviles en un mapa vacío para los parámetros predeterminados. El número de estados en optPath puede ser diferente al de path.

    optPath = optimizePath(path,map) optimiza path en el map especificado para los parámetros predeterminados. La ruta optimizada devuelta optPath intenta mantener un margen de seguridad frente a los obstáculos en el mapa map.

    optPath = optimizePath(path,options) optimiza path en un mapa vacío mediante parámetros especificados en options. Los parámetros relacionados con la trayectoria, el obstáculo y el solucionador, junto con los pesos de esos parámetros, se pueden especificar en options como un objeto optimizePathOptions.

    optPath = optimizePath(path,map,options) optimiza path en el map especificado para los parámetros especificados en options.

    ejemplo

    [optPath,kineticInfo] = optimizePath(___) también devuelve kineticInfo como una estructura que contiene la información cinética de la ruta optimizada.

    [optPath,kineticInfo,solutionInfo] = optimizePath(___) también devuelve solutionInfo como una estructura que contiene la información de la solución de la ruta optimizada.

    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.

    Argumentos de entrada

    contraer todo

    Estados de la ruta, especificados como una matriz de valor real M por 2 con la forma [x y] o una matriz de M por 3 con la forma [x y theta]. x y y especifican la posición en metros. theta especifica la orientación en radianes. M es el número de estados en la ruta. El número de estados en la ruta debe ser mayor o igual a 3.

    Tipos de datos: single | double

    Representación del mapa, especificada como un objeto binaryOccupancyMap, occupancyMap o vehicleCostmap (Automated Driving Toolbox). Este objeto representa el entorno del vehículo.

    Opciones de optimización, especificadas como objeto optimizePathOptions.

    Argumentos de salida

    contraer todo

    Estados de la ruta, devueltos como una matriz de valor real N por 2 con el formato [x y] o una matriz de N por 3 con el formato [x y theta]. x y y especifican la posición en metros. theta especifica la orientación en radianes. N es el número de estados en la ruta. El número de estados en optPath puede ser diferente al de path.

    Información cinética, devuelta como estructura. Los campos de la estructura son:

    Campos de kineticInfo

    CamposDescripción
    TimeStamps

    Tiempo correspondiente a la pose en la ruta optimizado.

    Velocity

    Velocidad para viajar entre dos poses consecutivas.

    AngularVelocity

    Velocidad angular entre dos poses consecutivas.

    Tipos de datos: struct

    Información de la solución, devuelta como una estructura. Los campos de la estructura son:

    Campos de solutionInfo

    CamposDescripción
    NumIterations

    Número de iteraciones realizadas.

    Cost

    Coste final de la ruta.

    Tipos de datos: struct

    Más acerca de

    contraer 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