copy
Cree una copia profunda del objeto de muestra de estado gaussiano
Desde R2023b
Sintaxis
Descripción
Ejemplos
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.](../../examples/nav/win64/SampleSE2StateSpaceUsingGaussianStateSamplerExample_01.png)
Define los límites inferior y superior de las variables de 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 las direcciones y se establecen en 0,1, 0,1 y 0,0628, respectivamente.
sampler_orig = stateSamplerGaussian(sv)
sampler_orig =
stateSamplerGaussian with properties:
StateSpace: [1×1 stateSpaceSE2]
StateValidator: [1×1 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);
Muestra 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.](../../examples/nav/win64/SampleSE2StateSpaceUsingGaussianStateSamplerExample_02.png)
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);
Muestra 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.](../../examples/nav/win64/SampleSE2StateSpaceUsingGaussianStateSamplerExample_03.png)
Función auxiliar
helperDisplayStates muestra los resultados utilizando 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
Modifique uno o más parámetros de un muestreador de estado gaussiano y compare su efecto en los resultados de la planificación del movimiento. Para lograr esto, puede crear una única instancia del objeto muestreador de estado gaussiano y, luego, utilizar la función copy del objeto stateSamplerGaussian para crear una copia profunda de la instancia del objeto existente, modificar los parámetros deseados y utilizarlo con el planificador para generar diferentes resultados.
Establezca la semilla del número aleatorio para garantizar la repetibilidad.
rng(50,"twister");Crear mapa de ocupación y encontrar variables de estado
Cargue una cuadrícula de ocupación de probabilidad en el espacio de trabajo MATLAB®.
load("narrowPassageMap.mat","narrowPassage");
Cree un mapa de ocupación a partir de la cuadrícula de ocupación de entrada.
map = binaryOccupancyMap(narrowPassage,50);
Define los límites inferior y superior de las variables de 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. Verifique la validez de los estados en el espacio de estados de entrada utilizando un validador de estados.
ss = stateSpaceSE2([x; y; theta]); sv = validatorOccupancyMap(ss,Map=map);
Cree una muestra de estado gaussiano utilizando el validador de estado. Verifique los valores de los parámetros predeterminados.
sampler_1 = stateSamplerGaussian(sv)
sampler_1 =
stateSamplerGaussian with properties:
StateSpace: [1×1 stateSpaceSE2]
StateValidator: [1×1 validatorOccupancyMap]
StandardDeviation: [0.1030 0.0644 0.0628]
MaxAttempts: 10
Copiar muestrario de estado y modificar valores de parámetros
Cree una copia de la primera instancia del muestreador de estado gaussiano.
sampler_2 = copy(sampler_1);
Modifique las propiedades de desviación estándar y intentos máximos del muestreador de estado gaussiano.
sampler_2.StandardDeviation = [0.3 0.1 0.1]; sampler_2.MaxAttempts = 150;
Configurar el planificador de rutas PRM
Configure dos planificadores de rutas PRM. Utilice los muestreadores de estado gaussianos originales y modificados para muestrear el espacio de estados de entrada.
planner_1 = plannerPRM(ss,sv,StateSampler=sampler_1,MaxNumNodes=900);
planner_2 = plannerPRM(sampler_2.StateSpace,sampler_2.StateValidator, ...
StateSampler=sampler_2,MaxNumNodes=900); Encuentre la ruta óptima entre dos estados
Especifique el punto inicial y el punto objetivo en el espacio de estado de entrada.
startPose = [1 1 0]; goalPose = [9 1 0];
Calcule la ruta óptima entre el punto inicial y el punto objetivo utilizando los planificadores de ruta PRM.
[pathObj_1,info_1] = plan(planner_1,startPose,goalPose); [pathObj_2,info_2] = plan(planner_2,startPose,goalPose);
Comparar resultados
Trazar los resultados obtenidos utilizando los dos muestreadores de estado gaussiano diferentes para la planificación del movimiento. Utilice las funciones plannerLineSpec.start y plannerLineSpec.goal para trazar los puntos de inicio y destino, respectivamente. Si el planificador con parámetros predeterminados 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.
figure show(map) hold on plot(startPose(1),startPose(2),plannerLineSpec.start{:}); plot(goalPose(1),goalPose(2),plannerLineSpec.goal{:}); if info_1.IsPathFound plot(pathObj_1.States(:,1),pathObj_1.States(:,2),plannerLineSpec.path{:}) title("Using Gaussian State Sampler with Default Parameters") legend else disp("Path not found. Try modifying validator, sampler or planner parameters."); end hold off
![Figure contains an axes object. The axes object with title Using Gaussian State Sampler with Default Parameters, xlabel X [meters], ylabel Y [meters] contains 4 objects of type image, line. One or more of the lines displays its values using only markers These objects represent Start, Goal, Path.](../../examples/nav/win64/ModifyGaussianStateSamplerAndCompareResultsExample_01.png)
Trazar los resultados obtenidos utilizando el muestreador de estado gaussiano con valores de parámetros personalizados.
figure show(map) hold on plot(startPose(1),startPose(2),plannerLineSpec.start{:}); plot(goalPose(1),goalPose(2),plannerLineSpec.goal{:}); if info_2.IsPathFound plot(pathObj_2.States(:,1),pathObj_2.States(:,2),plannerLineSpec.path{:}) title("Using Gaussian State Sampler with Custom Parameters") legend else disp("Path not found. Try modifying validator, sampler or planner parameters."); end hold off
![Figure contains an axes object. The axes object with title Using Gaussian State Sampler with Custom Parameters, xlabel X [meters], ylabel Y [meters] contains 4 objects of type image, line. One or more of the lines displays its values using only markers These objects represent Start, Goal, Path.](../../examples/nav/win64/ModifyGaussianStateSamplerAndCompareResultsExample_02.png)
Argumentos de entrada
Objeto muestreador de estado, especificado como un objeto stateSamplerGaussian.
Argumentos de salida
Copia del objeto muestreador de estado, devuelto como un objeto stateSamplerGaussian.
Historial de versiones
Introducido en R2023b
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Seleccione un país/idioma
Seleccione un país/idioma para obtener contenido traducido, si está disponible, y ver eventos y ofertas de productos y servicios locales. Según su ubicación geográfica, recomendamos que seleccione: .
También puede seleccionar uno de estos países/idiomas:
Cómo obtener el mejor rendimiento
Seleccione China (en idioma chino o inglés) para obtener el mejor rendimiento. Los sitios web de otros países no están optimizados para ser accedidos desde su ubicación geográfica.
América
- América Latina (Español)
- Canada (English)
- United States (English)
Europa
- 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)