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

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

Центральный планировщик использует диаграмму Stateflow для обработки распределения пакетов роботам из диспенсера пакетов. Каждый робот может переносить одну упаковку за один раз и получает команду перейти от погрузочной станции к разгрузочной станции на основании требуемого местоположения для каждой упаковки. Планировщик также отслеживает состояние пакетов и роботов и обновляет панель мониторинга состояния. Основываясь на позициях робота, планировщик также посылает команды остановки одному роботу, когда обнаруживает неминуемое столкновение. Такое поведение может позволить роботам выполнять локальное предотвращение препятствий, если это возможно.
Подсистема для каждого робота и состояния пакета является подсистемой для каждого (Simulink), которая обрабатывает массив шин для отслеживания состояния робота и пакета как RobotPackageStatus объект шины. Это облегчает обновление этой модели для различного количества роботов. Дополнительные сведения об обработке массивов шин с помощью подсистемы для каждого см. в разделе Работа с массивами шин (Simulink).

На следующей схеме подробно описаны значения сигналов диаграммы Scheduler Stateflow.

Контроллер робота использует для каждой подсистемы (Simulink) массив контроллеров робота для ваших 5 роботов.

На следующей схеме подробно описывается тип значений сигналов, связанных с контроллером «Для каждого робота».

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

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

Подсистема Plant использует блок кинематической модели дифференциального привода для моделирования движения роботов.

Начните настройку различных переменных в 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);

Убедитесь, что станции не заняты на карте.
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.
Обнаружение столкновений гарантирует, что для любой пары роботов в пределах определенного порога расстояния робот с меньшим индексом должен быть допущен к движению, в то время как другой робот должен остановиться (команда нулевой скорости). Неподвижный робот должен уметь избегать локальных статических препятствий на своем пути. Этого можно достичь с помощью другого контроллера низкого уровня, такого как блок «Векторная гистограмма поля» (панель инструментов навигации).
Условие достижения цели возникает, если робот находится в пределах порога расстояния, awayFromGoalThresh, из расположения цели.
load exampleMultiRobotParams.mat awayFromGoalThresh collisionThresh
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

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

Эта модель настроена для обработки изменения количества роботов на складе в зависимости от доступности. Добавление дополнительных роботов требует определения дополнительных зарядных станций.
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];
Дополнительные блоки дифференциальной кинематической модели также должны соответствовать количеству роботов. 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

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


