Управление и моделирование нескольких складских роботов

В этом примере показов, как управлять и моделировать несколько роботов, работающих на складском объекте или в распределение центре. Роботы ездят по объекту, забирая пакеты и доставляя их на станции для хранения или обработки. Этот пример основан на верхней части «Выполнение задач для робота-склада», который управляет одним роботом вокруг того же объекта.

Этот сценарий сортировки пакетов может быть смоделирован в Simulink ® с помощью диаграмм Stateflow и Robotics System Toolbox™. Центральный Планировщик отправляет команды роботам, чтобы забрать пакеты с загрузочной станции и доставить их на конкретную разгрузочную станцию. Контроллер Робота планирует траекторию на основе местоположений станций загрузки и разгрузки и генерирует команды скорости для робота. Эти команды подаются на Объект, который содержит модель робота с дифференциальным приводом для выполнения команд скорости и возврата основной истины положений робота. Положения передаются обратно в планировщик и контроллер для отслеживания состояния робота. Этот процесс выполняется для группы из 5 роботов, которые планируются, отслеживаются и моделируются одновременно.

Предоставленная модель Simulink, multiRobotExampleModel, моделирует вышеописанный сценарий.

Центральный планировщик

Центральный планировщик использует диаграмму Stateflow, чтобы обработать распределение пакетов роботам из диспенсера пакетов. Каждый робот может нести по одной упаковке за раз и получает указание отправиться от погрузочной станции к разгрузочной станции на основе необходимого места для каждой упаковки. Планировщик также отслеживает состояние пакетов и роботов и обновляет панель мониторинга состояния. Основываясь на положениях робота, планировщик также отправляет команды stop одному роботу, когда он обнаруживает скорое столкновение. Это поведение может позволить роботам запускать локальные препятствия, избегая при наличии.

Подсистема For Each Robot and Package State является Подсистемой For Each (Simulink), которая обрабатывает массив шин для отслеживания состояний робота и пакета как RobotPackageStatus шинный объект. Это облегчает обновление этой модели для различного количества роботов. Для получения дополнительной информации об обработке массивов шин с помощью Подсистемы For-Each, смотрите Работа с массивами шин (Simulink).

Планировщик

Следующая схема детализирует значения сигналов диаграммы Scheduler Stateflow.

Контроллер робота

Контроллер Робота использует For Each Subsystem (Simulink), чтобы сгенерировать массив контроллеров роботов для ваших 5 роботов.

Следующая схема описывает тип значений сигналов, сопоставленных с контроллером For Each Robot.

Каждый контроллер робота имеет следующие входы и выходы.

Контроллер принимает команды доставки, содержащие информацию о пакете, и планирует путь для доставки его на склад с помощью mobileRobotPRM. Блок Pure Pursuit берёт этот путь и генерирует команды скорости для посещения каждой путевой точки. Также статус робота и пакетов обновляется, когда робот достигает своей цели. Каждый робот также имеет свой собственный внутренний планировщик, который сообщает им местоположение разгрузочных станций на основе информации о пакете и отправляет их обратно на загрузочную станцию, когда они сбрасывают пакет.

Модели контроллеров робота используют ту же модель, warehouseTasksRobotSimulationModel, показанный в разделе «Выполнение задач для складского Робота».

Объект

Подсистема Объекта использует блок Differential Drive Kinematic Model, чтобы смоделировать движение роботов.

Setup модели

Начните настраивать различные переменные в MATLAB ® для модели.

Определение окружения склада

Матрица логического типа, logicalMap представляет карту заполнения склада. Склад содержит препятствия, представляющие стенки, полки и другие станции обработки. Загрузка, разгрузка и зарядные станции также приведены в координатах 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);

Figure Warehouse Setting contains an axes. The axes with title Warehouse Map contains 46 objects of type patch, line, image, text.

Проверка заполнения на станциях

Убедитесь, что станции не заняты на карте.

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

Центральный планировщик

Центральный планировщик требует знать пакеты, которые должны быть доставлены, чтобы отправить команды доставки контроллерам роботов.

Определение пакетов

Пакеты приводятся как массив индекса номеров различных разгрузочных станций, которые предполагается доставить пакетам. Поскольку этот пример имеет три станции разгрузки, допустимый пакет может иметь значение 1, 2 или 3.

load packages.mat packages
packages
packages = 1×11

     3     2     1     2     3     1     1     1     2     3     1

Количество роботов

Количество роботов используется, чтобы определить размеры различных сигналов в инициализации диаграммы Scheduler Stateflow

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

Обнаружение столкновения и порог достижения цели

Центральный Планировщик и Контроллер Робота используют определенные пороги для обнаружения столкновения, collisionThreshи условие достижения цели, awayFromGoalThresh.

Обнаружение столкновения гарантирует, что для любой пары роботов в пределах определенного расстояния-порога, робот с более низким индексом должен быть разрешен к движению, в то время как другой робот должен остановиться (команда нулевой скорости). Все еще движущийся робот должен быть в состоянии избегать локальных статических препятствий на своем пути. Этого можно достичь с помощью другого низкоуровневого контроллера, такого как блок Векторное Поле Histogram (Navigation Toolbox).

Условие достижения цели возникает, если робот находится в пределах дистанционного порога, awayFromGoalThresh, из местоположения цели.

load exampleMultiRobotParams.mat awayFromGoalThresh collisionThresh

Объекты шины

The RobotDeliverCommand и RobotPackageStatus объекты шины используются для прохождения выделений пакетов роботов между Центральным Планировщиком и Контроллером Робота.

load warehouseRobotBusObjects.mat RobotDeliverCommand RobotPackageStatus

Симуляция

Откройте модель Simulink .

open_system("multiRobotExampleModel.slx")

Запустите симуляцию. Вы должны увидеть роботы управляют путями и доставляют пакеты.

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

Build Summary

Simulation targets built:

Model            Action                       Rebuild Reason                              
==========================================================================================
robotController  Code generated and compiled  robotController_msf.mexa64 does not exist.  

1 of 1 models built (0 models already up to date)
Build duration: 0h 2m 13.842s

Figure contains an axes. The axes with title Binary Occupancy Grid contains 46 objects of type patch, line, image, text.

Метрики и панель мониторинга состояния

Для каждого из пакетов инструментальная панель в модели показывает, является ли пакет «InProgress», «Unassigned» или «Delivered». Robot Status отображает пройденное расстояние, местоположение пакета и идентификатор пакета.

Расширение модели

Эта модель настройки для изменения количества роботов на складе в зависимости от доступности. Добавление большего количества роботов требует определения дополнительных зарядных станций.

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

Можно также добавить больше пикетов разгрузки и назначить им пакеты.

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

Дополнительные блоки дифференциальной кинематической модели также требуются, чтобы соответствовать количеству роботов. The exampleHelperReplacePlantSubsystem добавляет их путем обновления numRobots.

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

Можно также переопределить любые существующие местоположения. Измените расположение пикета загрузки.

loadingStation = [35, 20];

Симуляция

После внесения изменений еще раз запустите симуляцию. Вы должны увидеть обновленные местоположения станций и увеличенное количество роботов.

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

Build Summary

Simulation targets built:

Model            Action                       Rebuild Reason                                  
==============================================================================================
robotController  Code generated and compiled  Global variable unloadingStations has changed.  

1 of 1 models built (0 models already up to date)
Build duration: 0h 0m 59.874s

Figure contains an axes. The axes with title Binary Occupancy Grid contains 61 objects of type patch, line, image, text.

Визуализация

Помощник по визуализации предлагает некоторые опции для изменения представления склада. Откройте маску блока, чтобы переключаться между различными предустановленными видами различных станций. Включите визуализацию пути или обновите типы mesh робота. Настройте шаг расчета, чтобы изменить скорость визуализации, которая не влияет на выполнение фактической симуляции робота.