isStateValid
Descripción
Ejemplos
Validar ruta a través del entorno del mapa de ocupación
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 = 3x1 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
Validar ruta a través del entorno del mapa de costes del vehículo
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 = 3x1 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
Validar ruta a través del entorno del mapa de ocupación 3D
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 = 7x1 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 = 6x1 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
validator
— Objeto del validador de estado
objeto de subclase de nav.StateValidator
Objeto validador de estado, especificado como un objeto de subclase de nav.StateValidator
. Estos son los objetos del validador de estado predefinidos:
states
— Posiciones estatales
n vector fila de elementos | m-por- n matriz
Posiciones estatales, especificadas como un vector fila de elementos n o una matriz m-por- n . n es la dimensión del espacio de estados especificado en validator
. m es el número de estados a validar.
Tipos de datos: single
| double
Argumentos de salida
isValid
— Estados válidos
m-elemento vector columna lógica
Estados válidos, devueltos como un vector columna lógica de elemento m .
Tipos de datos: logical
Historial de versiones
Introducido en R2019b
Consulte también
isMotionValid
| stateSpaceSE2
| nav.StateSpace
| nav.StateValidator
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)