Main Content

Esta página es para la versión anterior. La página correspondiente en inglés ha sido eliminada en la versión actual.

Controlar y simular múltiples robots de almacén

En este ejemplo se muestra cómo controlar y simular varios robots que trabajan en una instalación de almacén o centro de distribución. Los robots conducen alrededor de la instalación recogiendo paquetes y entregándolos a las estaciones para su almacenamiento o procesamiento. Este ejemplo se basa en el ejemplo, que conduce un solo robot alrededor de la misma instalación.Ejecutar tareas para un robot de almacén

Este escenario de ordenación de paquetes se puede modelar en Simulink® mediante gráficos Stateflow y Robotics System Toolbox™ bloques de algoritmos. A envía comandos a los robots para recoger paquetes de la y entregarlos a un específico .Central Scheduler estación de cargaestación de descarga La trayectoria planifica la trayectoria en función de las ubicaciones de las estaciones de carga y descarga, y genera comandos de velocidad para el robot.Robot Controller Estos comandos se alimentan a la , que contiene un modelo de robot de accionamiento diferencial para ejecutar los comandos de velocidad y devolver las poses de la verdad del suelo del robot.Plant Las posturas se retroalimentan al programador y al controlador para rastrear el estado del robot. Este flujo de trabajo se realiza para un grupo de 5 robots, todos programados, rastreados y modelados simultáneamente.

El modelo Simulink proporcionado, , modela el escenario descrito anteriormente.multiRobotExampleModel

Programador Central

El Programador central utiliza un gráfico Stateflow para gestionar la asignación de paquetes a los robots desde el archivo .Package Dispenser Cada robot puede llevar un paquete a la vez y se le indica que pase de la carga a una estación de descarga en función de la ubicación requerida para cada paquete. El programador también realiza un seguimiento del estado de los paquetes y robots y actualiza el archivo .Status Dashboard Basado en poses de robots, el programador también envía comandos de parada a un robot cuando detecta una colisión inminente. Este comportamiento puede permitir que los robots ejecuten la evitación local de obstáculos si está disponible.

El subsistema es un proceso de una matriz de buses para el seguimiento de los estados de robot y paquete como objeto de bus.For Each Robot and Package State For Each Subsystem (Simulink)RobotPackageStatus Esto facilita la actualización de este modelo para un número variable de robots. Para obtener más información sobre el procesamiento de matrices de buses mediante un subsistema For-Each, consulte .Work with Arrays of Buses (Simulink)

Programador

El esquema siguiente detalla los valores de señal del gráfico Stateflow.Programador

Controlador de robots

El utiliza un para generar una serie de controladores de robot para sus 5 robots.Controlador de robotsFor Each Subsystem (Simulink)

El esquema siguiente detalla el tipo de valores de señal asociados con el archivo .For Each Robot Controller

Cada controlador robot tiene las siguientes entradas y salidas.

El controlador toma comandos de entrega, que contiene la información del paquete, y planifica una ruta para entregarle a alguien en el almacén mediante .mobileRobotPRM El bloque toma esta ruta y genera comandos de velocidad para visitar cada waypoint.Pure Pursuit Además, el estado del robot y los paquetes se actualizan cuando el robot alcanza su objetivo. Cada robot también tiene su propio programador interno que les indica la ubicación de las estaciones de descarga en función de la información del paquete, y las envía de vuelta a la estación de carga cuando entregan un paquete.

El modelo de controlador de robot utiliza el mismo modelo, que se muestra en .warehouseTasksRobotSimulationModel,Ejecutar tareas para un robot de almacén

Planta

El subsistema utiliza un bloque para modelar el movimiento de los robots.PlantaDifferential Drive Kinematic Model

Configuración del modelo

Comience a configurar varias variables en MATLAB® para el modelo.

Definición del entorno de almacén

Una matriz de tipos lógicos representa el mapa de ocupación del almacén.logicalMap El almacén contiene obstáculos que representan paredes, estantes y otras estaciones de procesamiento. Las estaciones de carga, descarga y carga también se indican en -coordinates.xy

load multiRobotWarehouseMap.mat logicalMap loadingStation unloadingStations chargingStations warehouseFig = figure('Name', 'Warehouse Setting', 'Units',"normalized", 'OuterPosition',[0 0 1 1]); visualizeWarehouse(warehouseFig, logicalMap, chargingStations, unloadingStations, loadingStation);

Comprobación de la ocupación en las estaciones

Asegúrese de que las estaciones no estén ocupadas en el mapa.

map = binaryOccupancyMap(logicalMap); if(any(checkOccupancy(map, [chargingStations; loadingStation; unloadingStations])))     error("At least one of the station locations is occupied in the map.") end

Programador Central

Requiere el conocimiento de los paquetes que se entregarán para enviar los comandos de entrega a los controladores de robot.Programador Central

Definición de paquetes

Los paquetes se dan como una matriz de números de índice de las diversas estaciones de descarga a las que se supone que se entregarán los paquetes. Dado que este ejemplo tiene tres estaciones de descarga, un paquete válido puede tomar un valor de 1, 2 o 3.

load packages.mat packages packages
packages = 1×11

     3     2     1     2     3     1     1     1     2     3     1

Número de robots

El número de robots se utiliza para determinar los tamaños de las diversas señales en la inicialización del gráfico StateflowProgramador

numRobots = size(chargingStations, 1); % Each robot has its own charging station;

Detección de colisiones y umbral de objetivo alcanzado

El uso de ciertos umbrales para la detección de colisiones, , y una condición de objetivo alcanzado, .Programador CentralControlador de robotscollisionThreshawayFromGoalThresh

La detección de colisiones garantiza que para cualquier par de robots dentro de un cierto umbral de distancia, se debe permitir que el robot con un índice más bajo se mueva mientras que el otro robot debe detenerse (comando de velocidad cero). El robot en movimiento debe ser capaz de evitar los obstáculos estáticos locales en su camino. Podrías lograr esto con otro controlador de bajo nivel como el bloque.Vector Field Histogram (Navigation Toolbox)

La condición de objetivo alcanzado se produce si el robot está dentro de un umbral de distancia, , desde la ubicación del objetivo.awayFromGoalThresh

load exampleMultiRobotParams.mat awayFromGoalThresh collisionThresh

Objetos de autobús

Los objetos y los objetos de bus se utilizan para pasar asignaciones de paquetes de robot entre el archivo y el archivo .RobotDeliverCommandRobotPackageStatusProgramador CentralControlador de robots

load warehouseRobotBusObjects.mat RobotDeliverCommand RobotPackageStatus

Simulación

Abra el modelo Simulink.

open_system("multiRobotExampleModel.slx")

Ejecute la simulación. Debería ver las rutas del plan de los robots y entregar paquetes.

sim('multiRobotExampleModel');
### Successfully updated the model reference simulation target for model: robotController 

Panel de métricas y estado

Para cada uno de los paquetes, el panel del modelo muestra si el paquete es "InProgress", "Unassigned" o "Delivered". muestra la distancia recorrida, la ubicación del paquete y un identificador de paquete.Robot Status

Ampliación del modelo

Este modelo está configurado para controlar la modificación del número de robots en el almacén en función de la disponibilidad. Añadir más robots requiere definir estaciones de carga adicionales.

chargingStations(6, :) = [10, 15]; % Charging Station for the additional 6th robot chargingStations(7, :) = [10, 17];  % Charging Station for the additional 7th robot

También puede agregar más estaciones de descarga y asignarle paquetes.

unloadingStations(4, :) = [30, 50]; packages = [packages, 4, 4, 3 1];

También se requieren bloques adicionales para que coincidan con el número de robots.Differential Kinematic Model El los agrega mediante la actualización de .exampleHelperReplacePlantSubsystemnumRobots

numRobots = size(chargingStations, 1) % As before, each robot has its own charging station 
numRobots = 7 
exampleHelperReplacePlantSubsystem('multiRobotExampleModel/Robots', numRobots);

También puede redefinir las ubicaciones existentes. Modifique la ubicación del P.K. de carga.

loadingStation = [35, 20];

Simulación

Después de realizar las modificaciones, vuelva a ejecutar la simulación. Deberías ver las ubicaciones de las estaciones actualizadas y un mayor número de robots.

sim('multiRobotExampleModel');
### Successfully updated the model reference simulation target for model: robotController 

Visualización

Ofrece algunas opciones para cambiar la vista del almacén.Visualization Helper Abra la máscara de bloque para cambiar entre varias estaciones diferentes.Preset Views Alternar la visualización de rutas o actualizar los tipos de malla de robot. Ajuste el para cambiar la velocidad de la visualización, que no afecta a la ejecución de la simulación del robot real.Sample time