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.

validatorOccupancyMap3D

Validador de estado basado en un mapa de cuadrícula tridimensional

Desde R2020b

    Descripción

    El objeto validatorOccupancyMap3D valida estados y movimientos discretizados basados ​​en valores de ocupación en un mapa de ocupación tridimensional. El objeto interpreta las ubicaciones del mapa libres de obstáculos como estados válidos. El objeto interpreta las ubicaciones del mapa ocupadas y desconocidas como estados no válidos.

    Creación

    Descripción

    validator = validatorOccupancyMap3D crea un validador de mapas de ocupación 3-D asociado con un espacio de estado SE(3) con configuración predeterminada.

    ejemplo

    validator = validatorOccupancyMap3D(stateSpace) crea un validador en el espacio de estado especificado. La entrada stateSpace establece el valor de la propiedad StateSpace .

    validator = validatorOccupancyMap3D(stateSpace,Name,Value) establece Propiedades usando uno o más pares nombre-valor. Las propiedades no especificadas tienen valores predeterminados. Encierre el nombre de cada propiedad entre comillas.

    Por ejemplo, validatorOccupancyMap3D('ValidationDistance',0.1) crea un validador de mapas de ocupación 3D con un intervalo de muestreo de 0,1.

    Propiedades

    expandir todo

    Esta propiedad o parámetro es de solo lectura.

    Espacio de estados para validar estados, especificado como una subclase de nav.StateSpace. Estos son los objetos del espacio de estados predefinidos:

    Ejemplo: validatorOccupancyMap3D(stateSpaceSE3)

    Mapa utilizado para validar estados, especificado como un objeto occupancyMap3D .

    Ejemplo: validator.Map = occupancyMap3D(10)

    Intervalo para el muestreo entre estados y la verificación de la validez del estado, especificado como un escalar numérico positivo.

    Ejemplo: validator.ValidationDistance = 0.1

    Tipos de datos: double

    Mapeo de variables de estado para xyz-coordenadas en el vector de estado, especificado como un vector de tres elementos de la forma [xIdx yIdx zIdx].

    Tipos de datos: double

    Funciones del objeto

    copyCrear una copia profunda del objeto del validador de estado
    isMotionValidComprobar si la ruta entre estados es válida
    isStateValidComprobar si el estado es válido

    Ejemplos

    contraer todo

    Cree un mapa de ocupación tridimensional y un validador de estado asociado. Planifique, valide y visualice una ruta a través del mapa de ocupación.

    Cargar y asignar mapa al validador de estado

    Cargue un mapa de ocupación tridimensional de una manzana de la ciudad en el espacio de trabajo. Especifique un umbral para qué celdas se considerarán libres de obstáculos.

    mapData = load('dMapCityBlock.mat');
    omap = mapData.omap;
    omap.FreeThreshold = 0.5;

    Infle el mapa de ocupación para agregar una zona de amortiguamiento para una operación segura alrededor de los obstáculos.

    inflate(omap,1)

    Cree un objeto de espacio de estados SE(3) con límites para las variables de estado.

    ss = stateSpaceSE3([-20 220;
        -20 220;
        -10 100;
        inf inf;
        inf inf;
        inf inf;
        inf inf]);

    Cree un validador de estado de mapa de ocupación 3D utilizando el espacio de estado creado.

    sv = validatorOccupancyMap3D(ss);

    Asigne el mapa de ocupación al objeto validador de estado. Especifique el intervalo de distancia de muestreo.

    sv.Map = omap;
    sv.ValidationDistance = 0.1;

    Planificar y visualizar la ruta

    Cree un planificador de rutas con una distancia máxima de conexión aumentada. Reducir el número máximo de iteraciones.

    planner = plannerRRT(ss,sv);
    planner.MaxConnectionDistance = 50;
    planner.MaxIterations = 1000;

    Cree una función de evaluación definida por el usuario para determinar si la ruta alcanza la meta. Especifique la probabilidad de elegir el estado objetivo durante el muestreo.

    planner.GoalReachedFcn = @(~,x,y)(norm(x(1:3)-y(1:3))<5);
    planner.GoalBias = 0.1;

    Establezca los estados de inicio y objetivo.

    start = [40 180 25 0.7 0.2 0 0.1];
    goal = [150 33 35 0.3 0 0.1 0.6];

    Planifique una ruta utilizando el inicio, el objetivo y el planificador especificados.

    [pthObj,solnInfo] = plan(planner,start,goal);

    Compruebe que los puntos de la ruta sean estados válidos.

    isValid = isStateValid(sv,pthObj.States)
    isValid = 7x1 logical array
    
       1
       1
       1
       1
       1
       1
       1
    
    

    Compruebe que el movimiento entre cada estado de ruta secuencial sea válido.

    isPathValid = zeros(size(pthObj.States,1)-1,1,'logical');
    for i = 1:size(pthObj.States,1)-1
        [isPathValid(i),~] = isMotionValid(sv,pthObj.States(i,:),...
            pthObj.States(i+1,:));
    end
    isPathValid
    isPathValid = 6x1 logical array
    
       1
       1
       1
       1
       1
       1
    
    

    Visualizar los resultados

    show(omap)
    hold on
    scatter3(start(1,1),start(1,2),start(1,3),'g','filled') % draw start state
    scatter3(goal(1,1),goal(1,2),goal(1,3),'r','filled')    % draw goal state
    plot3(pthObj.States(:,1),pthObj.States(:,2),pthObj.States(:,3),...
        'r-','LineWidth',2) % draw path

    Figure contains an axes object. The axes object with title Occupancy Map, xlabel X [meters], ylabel Y [meters] contains 4 objects of type patch, scatter, line.

    Capacidades ampliadas

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

    Historial de versiones

    Introducido en R2020b