exponenta event banner

Моделирование мобильного робота на складе с помощью беседки

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

Предпосылки

Обзор модели

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

open_system('simulateWarehouseRobotInGazebo.slx')

Модель можно разделить на следующие элементы:

  • Прочтите данные с датчиков в Беседке.

  • Расписание: Назначение пакетов и планирование путей для роботов для доставки пакетов.

  • Управление: Создание команд для следования по предопределенному пути и избежания препятствий.

  • Включить: Отправить команды в Беседку для приведения робота в действие в окружающей среде.

График

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

Смысл

Текущая поза робота, скорости вращения колес и показания датчика дальности считываются из моделируемой среды в Gazebo. На рисунке ниже показан расширенный вид подсистемы «Считывание с датчиков беседки».

Контроль

Контроллер генерирует управляющие команды для отслеживания ППМ с помощью блока «Pure Purchasion». Если датчик дальности на роботе обнаруживает препятствие в пределах avoidCollisionDistance порог, робот останавливается. Также робот останавливается, когда достаточно приближается к цели.

Привести в действие

На основе сгенерированных команд управления подсистема управления колесом Pioneer генерирует значение крутящего момента для каждого колеса. Крутящий момент применяется как ApplyJointTorque команда.

Установка

Складское помещение

Загрузите пример файла карты, map, которая является матрицей логических значений, указывающих занимаемое пространство на складе. Инвертируйте эту матрицу, чтобы указать свободное пространство, и создайте binaryOccupancyMap объект. Задайте разрешение 100 ячеек на метр.

Карта основана на warehouseExtensions.world , который был создан с использованием Building Editor при том же коэффициенте масштабирования, что и указанный ниже. A .png файл для карты может быть создан с помощью collision_map_creator_plugin для создания матрицы карты. Подробную информацию об установке подключаемого модуля можно найти в приложении Collision Map Creator.

mapScalingFactor = 100;
load gazeboWarehouseMap.mat map
logicalMap = ~map;
map = binaryOccupancyMap(logicalMap,mapScalingFactor);
show(map)

Назначьте местоположения xy зарядной станции, сортировочной станции и места выгрузки рядом с полками на складе. Выбранные значения основаны на симулированном мире в Беседке.

chargingStn = [12,5];
loadingStn = [24,5];
unloadingStn = [15,24];

Отображение различных расположений на карте.

hold on;

text(chargingStn(1), chargingStn(2), 1, 'Charging');
plotTransforms([chargingStn, 0], [1 0 0 0])

text(loadingStn(1), loadingStn(2), 1, 'Sorting 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;

Датчик дальности

Блок считывания Lidar Scan в разделе Sensing используется для считывания значений диапазона с моделируемого датчика диапазона. warehouseExtensions.world содержит сведения о различных моделях и актерах (работниках склада) в сцене. Потому что <actor> теги являются статическими связями только с визуальными сетками, тип датчика диапазона - gpu_ray.

Кроме того, датчик диапазона использует диапазон 640, но по умолчанию используется диапазон 128. Это требует модификации шин, используемых в блоке «Read Lidar Scan». Загрузить exampleHelperWarehouseRobotWithGazeboBuses.mat файл для получения измененной шины с Gazebo_SL_Bus_gazebo_msgs_LaserScan.range значение 640. Модифицированные автобусы были сохранены в .mat с помощью редактора шины.

load exampleHelperWarehouseRobotWithGazeboBuses.mat

Предотвращение столкновений

Актеры в мире идут по предопределенной траектории. Робот использует датчик дальности для проверки препятствий в диапазоне 2,0 м (avoidCollisionDistance) с углами диапазона от [-pi/10, pi/10] При ненулевом показании в пределах этого диапазона и вида робот останавливается и возобновляет работу только после очистки диапазона. Функциональный блок «Остановить робота при обнаружении препятствий» включает эту логику.

Во время выполнения моделирования стоп-сигнал становится зеленым, когда робот чувствует, что это хорошо. Если лампа остановлена, лампа становится красной.

avoidCollisionDistance = 2; 

Моделировать

Чтобы смоделировать сценарий, установите соединение с Беседкой.

Сначала запустите тренажер «Беседка.» На виртуальной машине щелкните значок Робот склада беседки. Если симулятор Gazebo не открывается, может потребоваться переустановка плагина. См. раздел Установка подключаемого модуля беседки вручную в разделе Выполнение совместного моделирования между Simulink и Gazebo.

В Simulink откройте блок Gazebo Pacer и щелкните Настройка сети и параметров моделирования. Укажите сетевой адрес как пользовательский, имя хоста/IP-адрес для моделирования беседки и порт 14581, который является портом по умолчанию для Gazebo. На рабочем столе виртуальной машины отображается IP-адрес.

Дополнительные сведения о подключении к Gazebo для включения совместного моделирования см. в разделе Выполнение совместного моделирования между Simulink и Gazebo.

Нажмите кнопку Инициализировать модель (Initialize Model) в верхней части модели, чтобы инициализировать все переменные, объявленные выше.

Запустите моделирование. Робот передвигается по окружающей среде и останавливается всякий раз, когда работник попадает в заданное пороговое значение.