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.

sample

Estados de muestra del muestreador de estados gaussianos

Desde R2023b

    Descripción

    ejemplo

    states = sample(sampler) devuelve una muestra de estado seleccionada utilizando el enfoque de muestreo de estado gaussiano.

    ejemplo

    states = sample(sampler,numsamples) devuelve el número especificado de muestras de estado.

    Ejemplos

    contraer todo

    Muestreo de un espacio de estados SE(2) utilizando un muestreador de estados gaussiano y observe el impacto de los valores de los parámetros del muestreador en los resultados del muestreo.

    Establezca el valor inicial para asegurarse de generar los mismos resultados.

    rng(50,"twister");

    Cree un mapa de ocupación simple con un pasaje estrecho.

    map = binaryOccupancyMap;
    occupied = [5*ones(9,1),[1; 2; 3; 4; 5; 7; 8; 9; 10]];
    setOccupancy(map,occupied,1);
    figure(Position=[0, 0, 200, 200])
    show(map)

    Figure contains an axes object. The axes object with title Binary Occupancy Grid, xlabel X [meters], ylabel Y [meters] contains an object of type image.

    Defina los límites inferior y superior de las variables del espacio de estados x, y y theta del mapa de ocupación.

    x = map.XWorldLimits;
    y =  map.YWorldLimits;
    theta = [-pi pi];

    Cree un objeto SE(2) de espacio de estados utilizando las variables de espacio de estados especificadas. Verifique la validez de los estados en el espacio de estados de entrada utilizando un validador de estados. Establezca la distancia de validación en 0,01.

    ss = stateSpaceSE2([x; y; theta]);
    sv = validatorOccupancyMap(ss,Map=map);
    sv.ValidationDistance = 0.01;

    Espacio de estados de muestra utilizando el muestreador de estados gaussiano

    Cree un muestreador de estado gaussiano con valores de parámetros predeterminados. Por defecto:

    • El número máximo de intentos que debe realizar el muestreador para encontrar las muestras de estado se establece en 10.

    • Los valores de desviación estándar a lo largo de lax,y,yθLas direcciones se establecen en 0,1, 0,1 y 0,0628, respectivamente.

    sampler_orig = stateSamplerGaussian(sv)
    sampler_orig = 
      stateSamplerGaussian with properties:
    
               StateSpace: [1x1 stateSpaceSE2]
           StateValidator: [1x1 validatorOccupancyMap]
        StandardDeviation: [0.1000 0.1000 0.0628]
              MaxAttempts: 10
    
    

    Genere 40 muestras para la planificación de movimiento desde el espacio de estados de entrada.

    states_orig = sample(sampler_orig,40);

    Puede generar muestras óptimas modificando el número máximo de intentos y los valores de desviación estándar. Si las muestras están dispersas por todo el espacio de entrada, aumente el número máximo de intentos y los valores de desviación estándar para concentrar las muestras de estado alrededor del límite del obstáculo.

    Variar el número máximo de intentos

    Cree copias del objeto muestreador de estado original y modifique el número máximo de intentos, propiedad del muestreador, MaxAttempts, para estudiar su impacto en los resultados del muestreo. Establezca los valores de desviación estándar en los valores predeterminados.

    Establezca el número máximo de intentos para encontrar muestras válidas en 100 y genere 40 nuevas muestras a partir del espacio de estado de entrada.

    sampler_2 = copy(sampler_orig);
    sampler_2.MaxAttempts = 100;
    states_2 = sample(sampler_2,40);

    Establezca el número máximo de intentos para encontrar muestras válidas en 200 y genere 40 nuevas muestras a partir del espacio de estado de entrada.

    sampler_3 = copy(sampler_orig);
    sampler_3.MaxAttempts = 200;
    states_3 = sample(sampler_3,40);

    Muestre los resultados utilizando la función auxiliar helperDisplayStates . Tenga en cuenta que, a medida que aumenta el número de intentos, las muestras se concentran más alrededor del límite del obstáculo.

    helperDisplayStates(map,states_orig,sampler_2,states_2,sampler_3,states_3,"MaxAttempts");

    Figure contains 3 axes objects and other objects of type uipanel. Axes object 1 with title Binary Occupancy Grid, xlabel X [meters], ylabel Y [meters] contains 2 objects of type image, line. One or more of the lines displays its values using only markers This object represents State. Axes object 2 with title Binary Occupancy Grid, xlabel X [meters], ylabel Y [meters] contains 2 objects of type image, line. One or more of the lines displays its values using only markers This object represents State. Axes object 3 with title Binary Occupancy Grid, xlabel X [meters], ylabel Y [meters] contains 2 objects of type image, line. One or more of the lines displays its values using only markers This object represents State.

    Variar la desviación estándar

    Cree copias del objeto muestreador de estado original y modifique la desviación estándar, propiedad del muestreador, StandardDeviation, para estudiar su impacto en los resultados del muestreo. Establezca el número máximo de intentos en 200.

    Genere 40 muestras con los valores de desviación estándar predeterminados.

    sampler_orig.MaxAttempts = 200;
    states_orig = sample(sampler_orig,40);

    Establezca los valores de desviación estándar en [0,01 0,01 0,06]. Genere 40 nuevas muestras a partir del espacio de estados de entrada.

    sampler_4 = copy(sampler_orig);
    sampler_4.StandardDeviation = [0.01 0.01 0.06];
    states_4 = sample(sampler_4,40);

    Establezca los valores de desviación estándar en [0,5 0,5 0,06]. Genere 40 nuevas muestras a partir del espacio de estados de entrada.

    sampler_5 = copy(sampler_orig);
    sampler_5.StandardDeviation = [0.5 0.5 0.06];
    states_5 = sample(sampler_5,40);

    Muestre los resultados utilizando la función auxiliar helperDisplayStates . Tenga en cuenta que, a medida que aumenta los valores de desviación estándar, las muestras se concentran más alrededor del límite del obstáculo. Sin embargo, si los valores de desviación estándar son mayores que el ancho de los pasajes estrechos en el espacio de entrada, el muestreador genera resultados incorrectos.

    helperDisplayStates(map,states_orig,sampler_4,states_4,sampler_5,states_5,"Std.Deviation");

    Figure contains 3 axes objects and other objects of type uipanel. Axes object 1 with title Binary Occupancy Grid, xlabel X [meters], ylabel Y [meters] contains 2 objects of type image, line. One or more of the lines displays its values using only markers This object represents State. Axes object 2 with title Binary Occupancy Grid, xlabel X [meters], ylabel Y [meters] contains 2 objects of type image, line. One or more of the lines displays its values using only markers This object represents State. Axes object 3 with title Binary Occupancy Grid, xlabel X [meters], ylabel Y [meters] contains 2 objects of type image, line. One or more of the lines displays its values using only markers This object represents State.

    Función auxiliar

    helperDisplayStates muestra los resultados usando una ventana de figura personalizada.

    function helperDisplayStates(map,states_orig,sampler_2,states_2,sampler_3,states_3,select)
    if select == "MaxAttempts"
        title_1 = "MaxAttempts = 10 (Default value)";
        title_2 = strcat("MaxAttempts = ",num2str(sampler_2.MaxAttempts));
        title_3 = strcat("MaxAttempts = ",num2str(sampler_3.MaxAttempts));
    elseif select == "Std.Deviation"
        title_1 = "StandardDeviation = [0.1 0.1 0.06] (Default value)";
        title_2 = strcat("StandardDeviation = [0.01 0.01 0.06]");
        title_3 = strcat("StandardDeviation = [0.5 0.5 0.06]");
    end
    
    fig_1 = figure(Position=[0 0 700 300]);
    movegui("center")
    panel_1 = uipanel(fig_1, ...
        Position=[0 0 0.33 1], ...
        Title=title_1);
    hPlot1 = axes(panel_1);
    show(map,Parent=hPlot1);
    hold on;
    plot(states_orig(:,1),states_orig(:,2),plannerLineSpec.state{:})
    hold off
    
    panel_2 = uipanel(fig_1, ...
        Position=[0.33 0 0.33 1], ...
        Title=title_2);
    hPlot2 = axes(panel_2);
    show(map,Parent=hPlot2);
    hold on;
    plot(states_2(:,1),states_2(:,2),plannerLineSpec.state{:})
    hold off
    
    panel_3 = uipanel(fig_1, ...
        Position=[0.66 0 0.33 1], ...
        Title=title_3);
    hPlot3 = axes(panel_3);
    show(map,Parent=hPlot3);
    hold on;
    plot(states_3(:,1),states_3(:,2),plannerLineSpec.state{:})
    hold off
    end

    Argumentos de entrada

    contraer todo

    Objeto de muestra de estado, especificado como un objeto stateSamplerGaussian .

    Número de muestras, especificado como un número entero positivo.

    Tipos de datos: double

    Argumentos de salida

    contraer todo

    Muestras de estado, devueltas como una M-por- N de valores reales. M es el número de estados. N es el número de variables de estado. Cada fila de la matriz especifica las variables de estado correspondientes al modelo de espacio de estados de entrada. Por ejemplo, para el modelo de espacio de estados SE(2), N es 3 y cada fila tiene la forma [x, y, theta].

    Tipos de datos: double

    Historial de versiones

    Introducido en R2023b

    Consulte también

    Objetos

    Funciones