Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

Planificación de rutas A* y evasión de obstáculos en un almacén

Este ejemplo es una extensión del ejemplo de Simulate a Mobile Robot in a Warehouse Using Gazebo. El ejemplo muestra cómo cambiar el planificador de rutas PRM con un planificador A* y añadir un algoritmo de histograma de campo vectorial (VFH) para evadir obstáculos.

Requisitos previos

Visión general del modelo

Este modelo presenta dos cambios principales respecto al ejemplo de Execute Tasks for a Warehouse Robot. El objetivo es reemplazar el algoritmo del planificador de rutas utilizado y añadir un controlador que evada obstáculos en el entorno.

El bloque de función de MATLAB® Planner utiliza el objeto plannerAStarGrid (Navigation Toolbox) para ejecutar el algoritmo de planificación de rutas.

El subsistema Obstacle Avoidance utiliza un bloque Vector Field Histogram como parte del controlador. El bloque de función rangeReadings genera como salida los alcances y ángulos cuando los datos recibidos no están vacíos. Luego, el bloque VFH genera una dirección de giro basada en los obstáculos dentro del rango de escaneo. En los obstáculos cercanos, el robot debe girar para evitarlos. Ajuste los parámetros de VFH para los distintos rendimientos de evasión de obstáculos.

open_system("aStarPathPlanningAndObstacleAvoidanceInWarehouse.slx");

ScreenShotExample2c.png

Configuración

Almacén

Cargue el archivo de mapa de ejemplo, map, que es una matriz de valores lógicos que indica el espacio ocupado en el almacén. Invierta la matriz para indicar el espacio libre y cree un objeto binaryOccupancyMap. Especifique una resolución de 100 celdas por metro.

El mapa se basa en obstacleAvoidanceWorld.world, cargado en el VM. Se ha generado un archivo PNG para utilizarlo como matriz del mapa con el complemento collision_map_creator_plugin. Para obtener más información, consulte Complemento Collision Map Creator.

close
figure("Name","Warehouse Map","Visible","on")
load exampleHelperWarehouseRobotWithGazeboBuses.mat
load helperPlanningAndObstacleAvoidanceWarehouseMap.mat map
logicalMap = map.getOccupancy;
mapScalingFactor = 100;
show(map)

Asigne las ubicaciones xy de la estación de carga, estación de clasificación y la ubicación de descarga cerca de las estanterías del almacén. Los valores seleccionados se basan en el mundo simulado Gazebo.

chargingStn = [2, 13];
loadingStn = [15, 5];
unloadingStn = [15, 15];

Muestre las distintas ubicaciones en el mapa.

hold on;
localOrigin = map.LocalOriginInWorld;
localTform = trvec2tform([localOrigin 0]);
text(chargingStn(1), chargingStn(2),1,'Charging');
plotTransforms([chargingStn, 0],[1 0 0 0])

text(loadingStn(1), loadingStn(2),1,'Loading Station');
plotTransforms([loadingStn, 0], [1 0 0 0])

text(unloadingStn(1), unloadingStn(2),1,'Unloading Station');
plotTransforms([unloadingStn, 0], [1 0 0 0])

hold off;

Realizar la simulación

Para simular el escenario, configure la conexión con Gazebo.

En primer lugar, ejecute el simulador Gazebo. En el equipo virtual, haga clic en el icono de Gazebo Warehouse Robot with Obstacles. Si el simulador de Gazebo no se abre, es posible que tenga que volver a instalar el complemento. Consulte Instalar el complemento de Gazebo de forma manual en Realizar cosimulación entre Simulink y Gazebo.

En Simulink, abra el bloque Gazebo Pacer y haga clic en Configure Gazebo network and simulation settings. Especifique Network Address como Custom, , Hostname/IP Address para la simulación Gazebo y Port 14581, que es el puerto predeterminado para Gazebo. El escritorio del VM muestra la dirección IP.

Para obtener más información sobre la conexión a Gazebo para habilitar la cosimulación, consulte Realizar cosimulación entre Simulink y Gazebo.

Haga clic en el botón Initialize Model en la parte superior del modelo para inicializar todas las variables indicadas anteriormente.

Ejecute la simulación. El robot se traslada por el entorno y evita obstáculos inesperados.

sim("aStarPathPlanningAndObstacleAvoidanceInWarehouse.slx");

warehouse.png

Observe que existen dos obstáculos cilíndricos que no están presentes en el mapa de ocupación. El robot continúa evadiéndolos cuando los detecta usando el algoritmo VFH.

cylindricalobstacles.png

Un indicador verde con el texto AvoidingObstacle se ilumina cuando el robot intenta evadir un obstáculo.