Симулируйте мобильного робота на складе с помощью Gazebo

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

Необходимые условия

Обзор модели

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

open_system('simulateWarehouseRobotInGazebo.slx')

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

  • Sense: Считайте данные с датчиков в Gazebo.

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

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

  • Приведите в действие: Отправляйте команды в Gazebo, чтобы привести робота в действие в окружении.

График

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

Смысл

Текущее положение робота, скорости вращения колеса и показания датчика области значений считываются из моделируемого окружения в Gazebo. Рисунок ниже представляет собой расширенное представление подсистемы Read From Gazebo Sensors.

Контроль

Контроллер генерирует команды управления для следования за путевыми точками с помощью блока Pure Pursuit. Если датчик области значений на роботе обнаруживает препятствие в avoidCollisionDistance порог, робот останавливается. Кроме того, робот останавливается, когда приближается достаточно к цели.

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

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

Setup

Склад

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

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

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

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

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;

Датчик области значений

Блок Read Lidar Scan в разделе Sensing используется, чтобы считать значения области значений от моделируемого датчика области значений. The 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] После ненулевого чтения в этой области значений и представлении робот останавливается и возобновляется только после того, как область значений будет очищаема. Функциональный блок «Stop Robot On Sensing Bostacles» включает в себя эту логику.

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

avoidCollisionDistance = 2; 

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

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

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

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

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

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

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