stateSamplerGaussian
Muestreador de estado gaussiano para planificación de movimiento basada en muestreo
Desde R2023b
Descripción
El objeto stateSamplerGaussian
crea un muestreador de estado para la planificación del movimiento utilizando la distribución gaussiana. Utilice esta muestra para planificar el movimiento en pasajes estrechos. Para obtener información sobre cómo el muestreador de estado gaussiano selecciona muestras de estado válidas, consulte Encuentre estados de muestra utilizando el muestreador de estados gaussianos.
Creación
Sintaxis
Descripción
crea un muestreador de estado gaussiano asociado con un objeto sampler
= stateSamplerGaussianstateSpaceSE2
con configuración predeterminada.
crea un muestreador de estado gaussiano para generar muestras para un espacio de estado válido. Utilice el objeto sampler
= stateSamplerGaussian(stateValidator
)validatorOccupancyMap
para crear un validador de estado y utilice el validador de estado como entrada para el muestreador de estado gaussiano.
establece propiedades usando uno o argumentos de nombre-valor además del argumento de entrada en la sintaxis anterior. Puede especificar las propiedades sampler
= stateSamplerGaussian(___,Name=Value
)StandardDeviation
y MaxAttempts
como argumentos de nombre-valor.
Propiedades
StateSpace
— Espacio de estados SE(2)
stateSpaceSE2
objeto
Esta propiedad o parámetro es de solo lectura.
Espacio de estado SE(2), almacenado como un objeto stateSpaceSE2
. Esta propiedad la establece el validador de estado de entrada stateValidator
.
StateValidator
— Definición del validador de estado
validatorOccupancyMap
objeto | objeto de subclase de nav.StateValidator
clase
Esta propiedad o parámetro es de solo lectura.
Definición del validador de estado, especificada como un objeto validatorOccupancyMap
o un objeto de una subclase de la clase nav.StateValidator
. Esta propiedad la establece el validador de estado de entrada stateValidator
.
StandardDeviation
— Desviación estándar de la distribución gaussiana
N vector fila de elementos
Desviación estándar de la distribución gaussiana, especificada como un vector fila de elementos N . N es el número de variables de estado. Para el espacio de estados SE(2), la desviación estándar debe ser un vector fila de tres elementos de la forma [σx σy σθ].
El objeto calcula el valor predeterminado para la desviación estándar utilizando los límites mínimo y máximo de las variables de estado x, y y θ
Mediante programación, puede leer los límites de las variables de estado de la propiedad StateSpace
del objeto stateSamplerGaussian
. El objeto stateSamplerGaussian
calcula el valor predeterminado para la desviación estándar como:
1/100*(sampler.StateSpace.StateBounds(:,2)-sampler.StateSpace.StateBounds(:,1))
Nota
Para obtener resultados correctos, los valores de desviación estándar no deben ser mayores que el ancho de los pasajes estrechos en el espacio de configuración.
Tipos de datos: single
| double
MaxAttempts
— Umbral para el número máximo de intentos
10
(predeterminado) | número entero positivo
Umbral para el número máximo de intentos que el muestreador puede realizar para encontrar muestras válidas, especificado como un entero positivo. El muestreador deja de buscar si obtiene el número óptimo de muestras válidas antes del umbral especificado.
Puede ajustar el valor de este parámetro junto con el valor del parámetro de desviación estándar. Si las muestras devueltas por el muestreador de estado están dispersas por todo el espacio de configuración, puede aumentar el número de intentos para permitir que el muestreador encuentre muestras concentradas a lo largo del límite del obstáculo. Además, si disminuye el valor de la desviación estándar, debe considerar aumentar el número máximo de intentos para permitir que el muestreador encuentre muestras óptimas.
Tipos de datos: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
Funciones del objeto
Ejemplos
Muestra del espacio de estados SE(2) utilizando el muestreador de estados gaussiano
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)
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 laylas 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");
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");
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
Realice la planificación del movimiento utilizando el enfoque de muestreo del espacio de estados gaussiano
Muestreo de un espacio de estados para la planificación del movimiento utilizando la distribución gaussiana y luego use los estados muestreados para encontrar una ruta óptima entre dos puntos en el espacio de estados de entrada. Utilice un planificador de rutas PRM para calcular una ruta óptima entre dos puntos.
Establezca la semilla de número aleatorio para garantizar la repetibilidad.
rng(100,"twister");
Crear mapa de ocupación y encontrar variables de estado
Cargue un mapa binario que represente el entorno del espacio de estado de entrada en el espacio de trabajo de MATLAB®.
load("mapData.mat")
Cree un mapa de ocupación a partir de la entrada.
map = occupancyMap(narrowPassageMap);
Encuentre 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];
Crear muestra de estado gaussiano
Cree un objeto SE(2) de espacio de estados utilizando las variables de espacio de estados especificadas.
stateSpace = stateSpaceSE2([x; y; theta]);
Verifique la validez de los estados en el espacio de estados de entrada utilizando un validador de estados.
stateValidator = validatorOccupancyMap(stateSpace,Map=map);
Cree un muestreador de estado gaussiano para muestrear el espacio de estado especificado. Establezca los valores de desviación estándar.
sampler = stateSamplerGaussian(stateValidator,StandardDeviation=[25 5 0.05]);
Configurar el planificador de rutas PRM
Configure el planificador de rutas del PRM. Utilice el muestreador de estados gaussiano para muestrear el espacio de estados de entrada.
planner = plannerPRM(stateSpace,stateValidator,StateSampler=sampler);
Encuentre la ruta óptima entre dos estados
Especifique el punto inicial y el punto objetivo en el espacio de estado de entrada.
start = [55 50 0]; goal = [210 190 0];
Calcule la ruta óptima entre el punto inicial y el punto objetivo utilizando el planificador de ruta PRM.
[path,info] = plan(planner,start,goal);
Visualizar los resultados
Mostrar el mapa de ocupación.
figure
show(map)
hold on
Traza el punto inicial y el punto objetivo. Especifique el color predeterminado y las propiedades de línea para trazar los puntos inicial y objetivo utilizando las funciones plannerLineSpec.start
t y plannerLineSpec.goal
, respectivamente.
plot(start(1),start(2),plannerLineSpec.start{:}); plot(goal(1),goal(2),plannerLineSpec.goal{:});
Si el planificador ha encontrado una ruta óptima entre los estados inicial y objetivo, trace los resultados. Utilice la función plannerLineSpec.path
para especificar el color predeterminado y las propiedades de línea para trazar la ruta.
if info.IsPathFound plot(path.States(:,1),path.States(:,2),plannerLineSpec.path{:}) legend else disp("Path not found. Try modifying the planner parameters."); end
Más acerca de
Encuentre estados de muestra utilizando el muestreador de estados gaussianos
El muestreador genera repetidamente pares de estados. El muestreador selecciona la primera muestra de estado en cada par usando una distribución uniforme y la segunda muestra de estado usando una distribución gaussiana centrada alrededor de la primera muestra.
El muestreador determina la distancia entre la primera muestra y la segunda muestra en cada par utilizando los parámetros gaussianos σx, σy y σθ..
σx especifica el diferencial a lo largo de la dirección x
σy especifica el diferencial a lo largo de la dirección y.
σθ especifica la extensión a lo largo de la dirección angular.
El validador de estados considera válido un par de estados generado si una muestra de estado del par se encuentra en el obstáculo y la otra en el espacio libre. La muestra del par válido que se encuentra en el espacio libre se devuelve como muestra de estado para la planificación del movimiento.
Para obtener las muestras óptimas para la planificación del movimiento, puede disminuir o aumentar los valores de desviación estándar.
Cuando disminuye el valor de la desviación estándar a lo largo de una dirección particular, la distancia entre dos muestras en cada par válido disminuye a lo largo de la dirección especificada. Disminuya los valores de desviación estándar si el espacio de entrada para la planificación del movimiento tiene pasajes demasiado estrechos. También debe aumentar el número máximo de intentos para que el muestreador encuentre muestras óptimas.
Cuando aumenta el valor de la desviación estándar a lo largo de una dirección particular, la distancia entre dos muestras en cada par válido aumenta a lo largo de la dirección especificada. Aumente los valores de desviación estándar si el espacio de entrada para la planificación del movimiento no tiene pasajes demasiado estrechos.
Historial de versiones
Introducido en R2023b
Consulte también
Funciones
Objetos
Comando de MATLAB
Ha hecho clic en un enlace que corresponde a este comando de MATLAB:
Ejecute el comando introduciéndolo en la ventana de comandos de MATLAB. Los navegadores web no admiten comandos de MATLAB.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)