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.

sampleStartGoal

Ejemplos de estados de inicio y de destino para la planificación del movimiento

Desde R2024a

Descripción

[startState,goalState] = sampleStartGoal(stateValidator) selecciona un estado inicial y objetivo válido de un entorno de mapa de entrada. De forma predeterminada, la función realiza un máximo de 100 intentos para seleccionar los estados.

ejemplo

[startState,goalState] = sampleStartGoal(stateValidator,numStates) especifica la cantidad de estados de inicio y de destino válidos para seleccionar de un entorno de mapa de entrada. De forma predeterminada, la función realiza un máximo de 100 intentos para seleccionar la cantidad especificada de estados. Si la función no puede encontrar la cantidad especificada de estados dentro de 100 intentos, devuelve los estados identificados.

ejemplo

[___] = sampleStartGoal(stateValidator,numStates,maxAttempts) especifica el número máximo de intentos para seleccionar la cantidad especificada de estados de inicio y objetivo. Utilice esta sintaxis para aumentar el número máximo de intentos con el fin de obtener la cantidad deseada de estados.

Ejemplos

contraer todo

Establezca el valor de semilla para generar resultados repetibles.

rng("default")

Cargue un objeto vehicleCostMap, que contiene el entorno del mapa de entrada para la planificación del movimiento.

load sampleMapData.mat

Define los límites inferior y superior de las variables de espacio de estados x, y y theta del mapa de costos. Los valores de los límites del estado deben ser cercanos o iguales a los de los límites del mapa.

x = [0 30];
y = [0 30];
theta = [-pi pi];
StateBounds = [x; y; theta];

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 validatorVehicleCostmap.

ss= stateSpaceSE2(StateBounds);
sv = validatorVehicleCostmap(ss,Map=map);

Seleccione un estado inicial y un estado objetivo utilizando la función sampleStartGoal.

[start, goal] = sampleStartGoal(sv)
start = 1×3

    8.3549   16.4064    2.8746

goal = 1×3

   20.3621   22.7322    1.5276

plot(map)
legend(Location="BestOutside")
hold on
plot(start(:,1),start(:,2),plannerLineSpec.start{:})
plot(goal(:,1),goal(:,2),plannerLineSpec.goal{:})
hold off

Figure contains an axes object. The axes object with xlabel X, ylabel Y contains 4 objects of type image, patch, line. One or more of the lines displays its values using only markers These objects represent Inflated Areas, Start, Goal.

Establezca el valor de semilla para generar resultados repetibles.

rng(5,"twister")

Cargue una cuadrícula de ocupación de probabilidad en el espacio de trabajo MATLAB® .

load("exampleMaps.mat","simpleMap");

Cree un mapa de ocupación a partir de la cuadrícula de ocupación de entrada.

map = occupancyMap(simpleMap);

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 estado 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);

Seleccione el punto de inicio y el punto de destino en el espacio de estado de entrada. Especifique el número de estados a seleccionar como 3.

[startStates,goalStates] = sampleStartGoal(stateValidator,3);

Grafique los puntos de inicio y los puntos de destino utilizando las funciones plannerLineSpec.start y plannerLineSpec.goal, respectivamente.

fig1 = figure(Position=[0,0,1200,300]);
for cnt = 1:3
    start = startStates(cnt,:);
    goal = goalStates(cnt,:);    
    subplot(1,3,cnt,Parent=fig1)
    show(map)
    hold on
    plot(start(1),start(2),plannerLineSpec.start{:});
    plot(goal(1),goal(2),plannerLineSpec.goal{:});
    hold off
    legend
end

Figure contains 3 axes objects. Axes object 1 with title Occupancy Grid, xlabel X [meters], ylabel Y [meters] contains 3 objects of type image, line. One or more of the lines displays its values using only markers These objects represent Start, Goal. Axes object 2 with title Occupancy Grid, xlabel X [meters], ylabel Y [meters] contains 3 objects of type image, line. One or more of the lines displays its values using only markers These objects represent Start, Goal. Axes object 3 with title Occupancy Grid, xlabel X [meters], ylabel Y [meters] contains 3 objects of type image, line. One or more of the lines displays its values using only markers These objects represent Start, Goal.

Establezca el valor de semilla para generar resultados repetibles.

rng(2,"twister")

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.

sv.Map = omap;

Seleccione los estados inicial y objetivo del mapa de entrada. Especifique el número de estados de inicio y objetivo a seleccionar como 5.

[start,goal] = sampleStartGoal(sv,5);

Visualizar los resultados

show(omap)
hold on
scatter3(start(:,1),start(:,2),start(:,3),'g','filled')
scatter3(goal(:,1),goal(:,2),goal(:,3),'r','filled')
legend("Map","Start states","Goal states",Location="southoutside");
hold off

Figure contains an axes object. The axes object with title Occupancy Map, xlabel X [meters], ylabel Y [meters] contains 3 objects of type patch, scatter. These objects represent Map, Start states, Goal states.

Argumentos de entrada

contraer todo

Validador de estado que contiene el entorno del mapa de entrada, especificado como un objeto validatorVehicleCostmap, validatorOccupancyMap, validatorOccupancyMap3D, manipulatorCollisionBodyValidator (Robotics System Toolbox) o una subclase de un objeto nav.StateValidator.

Número de estados de inicio y de destino válidos para seleccionar para la planificación del movimiento, especificado como un entero positivo.

Tipos de datos: double

Número máximo de intentos que puede realizar la función para seleccionar los estados de inicio y destino, especificado como un entero positivo.

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Argumentos de salida

contraer todo

Estado inicial para la planificación del movimiento, devuelto como una matriz M por N. M es el número de estados de inicio seleccionados para la planificación del movimiento y N es el número de variables de estado.

  • Si la entrada es un objeto validador de estado con espacio de estado SE(2), la función devuelve el estado inicial como una matriz M por 3. Cada fila de la matriz tiene la forma [x, y, theta]. x y y son las coordenadas cartesianas de los estados en el mapa y theta es la orientación.

  • Si la entrada es un objeto validador de estado con espacio de estado SE(3), la función devuelve el estado inicial como una matriz M por 7. Cada fila de la matriz tiene la forma [x, y, z, qw, qx, qy, qz]. x, y y z son coordenadas cartesianas de los estados en el mapa. qw, qx, qy y qz representan la orientación en un cuaternión.

Tipos de datos: double

Estado objetivo para la planificación del movimiento, devuelto como una matriz M por N. M es el número de estados objetivo seleccionados para la planificación del movimiento y N es el número de variables de estado.

  • Si la entrada es un objeto validador de estado con espacio de estado SE(2), la función devuelve el estado objetivo como una matriz M por 3. Cada fila de la matriz tiene la forma [x, y, theta]. x y y son las coordenadas cartesianas de los estados en el mapa y theta es la orientación.

  • Si la entrada es un objeto validador de estado con espacio de estado SE(3), la función devuelve el estado objetivo como una matriz M por 7. Cada fila de la matriz tiene la forma [x, y, z, qw, qx, qy, qz]. x, y y z son coordenadas cartesianas de los estados en el mapa. qw, qx, qy y qz representan la orientación en un cuaternión.

Tipos de datos: double

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 R2024a