exponenta event banner

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

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

Этот сценарий сортировки пакетов можно смоделировать в 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);

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.

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

Условие достижения цели возникает, если робот находится в пределах порога расстояния, 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

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

Панель мониторинга показателей и состояния

Для каждого из пакетов на панели мониторинга в модели отображается, является ли пакет «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

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

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

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