isStateValid
Comprobar si el estado es válido
Descripción
Ejemplos
Este ejemplo muestra cómo validar rutas a través de un entorno.
Cargar mapas de ejemplo. Utilice el mapa simple para crear un mapa de ocupación binario.
load exampleMaps.mat
map = occupancyMap(simpleMap);
show(map)
Especifique una ruta aproximada a través del mapa.
path = [2 2 pi/2; 10 15 0; 17 8 -pi/2]; hold on plot(path(:,1),path(:,2),"--o")
Cree un validador de estado utilizando la definición stateSpaceSE2
. Especifique el mapa y la distancia para interpolar y validar segmentos de ruta.
validator = validatorOccupancyMap(stateSpaceSE2); validator.Map = map; validator.ValidationDistance = 0.1;
Compruebe que los puntos de la ruta sean estados válidos. Los tres puntos están en el espacio libre, por lo que se consideran válidos.
isValid = isStateValid(validator,path)
isValid = 3×1 logical array
1
1
1
Verifique el movimiento entre cada estado de ruta secuencial. La función isMotionValid
interpola a lo largo de la ruta entre estados. Si un segmento de ruta no es válido, trace el último punto válido a lo largo de la ruta.
startStates = [path(1,:);path(2,:)]; endStates = [path(2,:);path(3,:)]; for i = 1:2 [isPathValid, lastValid] = isMotionValid(validator,startStates(i,:),endStates(i,:)); if ~isPathValid plot(lastValid(1),lastValid(2),'or') end end hold off
Este ejemplo muestra cómo validar rutas a través de un entorno.
Cargar mapas de ejemplo. Utilice el mapa simple para crear un mapa de costes de vehículos. Especifique un radio de inflación de 1 metro.
load exampleMaps.mat map = vehicleCostmap(double(simpleMap)); map.CollisionChecker = inflationCollisionChecker("InflationRadius",1); plot(map)
Especifique una ruta aproximada a través del mapa.
path = [3 3 pi/2; 8 15 0; 17 8 -pi/2]; hold on plot(path(:,1),path(:,2),"--o")
Cree un validador de estado utilizando la definición stateSpaceSE2
. Especifique el mapa y la distancia para interpolar y validar segmentos de ruta.
validator = validatorVehicleCostmap(stateSpaceSE2); validator.Map = map; validator.ValidationDistance = 0.1;
Compruebe que los puntos de la ruta sean estados válidos. Los tres puntos están en el espacio libre, por lo que se consideran válidos.
isValid = isStateValid(validator,path)
isValid = 3×1 logical array
1
1
1
Verifique el movimiento entre cada estado de ruta secuencial. La función isMotionValid
interpola a lo largo de la ruta entre estados. Si un segmento de ruta no es válido, trace el último punto válido a lo largo de la ruta.
startStates = [path(1,:);path(2,:)]; endStates = [path(2,:);path(3,:)]; for i = 1:2 [isPathValid, lastValid] = isMotionValid(validator,startStates(i,:),endStates(i,:)); if ~isPathValid plot(lastValid(1),lastValid(2),'or') end end hold off
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 = 7×1 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 = 6×1 logical array
1
1
1
1
1
1
Visualiza 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
Argumentos de entrada
Objeto validador de estado, especificado como un objeto de subclase de nav.StateValidator
. Estos son los objetos del validador de estado predefinidos:
Posiciones de estado, especificadas como un vector fila de n elementos o una matriz de m por n. n es la dimensión del espacio de estado especificado en validator
. m es el número de estados a validar.
Tipos de datos: single
| double
Argumentos de salida
Estados válidos, devueltos como un vector columna lógico de elemento m.
Tipos de datos: logical
Historial de versiones
Introducido en R2019b
Consulte también
isMotionValid
| stateSpaceSE2
| nav.StateSpace
| nav.StateValidator
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)