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

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

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

Обзор модели

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

open_system('simulateWarehouseRobotInGazebo.slx')

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

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

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

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

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

Расписание

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

Смысл

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

Управление

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

Привести в движение

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

Настройка

Склад

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

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

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

Присвойте xy-местоположения заряжающейся станции, сортировав станцию и разгружающееся местоположение около полок на складе. Выбранные значения основаны на simlated мире в 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 используется, чтобы считать значения диапазона из симулированного датчика области значений. 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.

Во-первых, запустите Средство моделирования Gazebo. В виртуальной машине кликните по Складскому значку Робота Gazebo. Если средству моделирования Gazebo не удается открыться, вы, возможно, должны переустановить плагин. Смотрите Установку, Плагин Gazebo Вручную в Выполняет Co-симуляцию между Simulink и Gazebo.

В Simulink, открытом блок Gazebo Pacer и сеть Configure Gazebo нажатия кнопки и настройки симуляции. Задайте Сетевой Адрес как Пользовательский, ИМЯ УЗЛА/IP-АДРЕС для вашей симуляции Gazebo и Порт 14581, который является портом по умолчанию для Gazebo. Рабочий стол VM отображает IP-адрес.

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

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

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