В этом примере показано, как симулировать складского робота в Gazebo. Gazebo позволил вам симулировать мобильного робота, который использует датчик области значений при выполнении определенных задач в симулированной среде. Этот пример детализирует, как использовать средство моделирования, чтобы применить Выполнить Задачи для Складского примера Робота, куда робот поставляет пакеты в складском сценарии. Робот использует симулированный датчик области значений в Gazebo, чтобы обнаружить возможные столкновения с динамической средой и избежать их.
Необходимые условия
Загрузите Виртуальную машину ROS и Gazebo, чтобы настроить симулированного робота.
Рассмотрите Выполнить Задачи для Складского примера Робота для рабочего процесса планирования пути и перешедший в складском сценарии.
Рассмотрите Управление Робот с дифференциальным приводом в Gazebo с примером Simulink для основных шагов сбора данных о датчике и управления роботом в 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 наверху модели, чтобы инициализировать все переменные, объявленные выше.
Запустите симуляцию. Робот управляет вокруг среды и остановок каждый раз, когда рабочий добирается в заданном пороге.