Этот пример показов, как моделировать складской робота в Gazebo. Gazebo позволила вам симулировать мобильного робота, который использует датчик области значений, при выполнении определенных задач в моделируемом окружении. В этом примере подробно описывается использование симулятора для применения примера Выполнение задач для робота-склада, в котором робот поставляет пакеты в сценарии склада. Робот использует датчик моделируемой области значений в Gazebo, чтобы обнаружить возможные столкновения с динамическим окружением и избежать их.
Необходимые условия
Загрузите виртуальную машину с ROS и Gazebo, чтобы настроить моделируемого робота.
Рассмотрим пример выполнения задач для робота для рабочего процесса планирования пути и навигации по сценарию склада.
Ознакомьтесь с примером Control a Робот с Дифференциальным Приводом в Gazebo с Simulink для основных шагов сбора данных о датчике и управления роботом в Gazebo.
Откройте модель.
open_system('simulateWarehouseRobotInGazebo.slx')
Модель может быть разделена на следующие элементы:
Sense: Считайте данные с датчиков в Gazebo.
Расписание: Назначьте пакеты и планируйте пути для роботов, чтобы доставить пакеты.
Управление: Сгенерируйте команды, чтобы следовать предопределенному пути и избегать препятствий.
Приведите в действие: Отправляйте команды в Gazebo, чтобы привести робота в действие в окружении.
Робот выполняет задачу перехода между зарядной станцией, загрузочной станцией и разгрузочной станцией, руководствуясь планировщиком.
Текущее положение робота, скорости вращения колеса и показания датчика области значений считываются из моделируемого окружения в Gazebo. Рисунок ниже представляет собой расширенное представление подсистемы Read From Gazebo Sensors.
Контроллер генерирует команды управления для следования за путевыми точками с помощью блока Pure Pursuit. Если датчик области значений на роботе обнаруживает препятствие в avoidCollisionDistance
порог, робот останавливается. Кроме того, робот останавливается, когда приближается достаточно к цели.
На основе сгенерированных команд управления подсистема Pioneer Wheel Control генерирует значение крутящего момента для каждого колеса. Крутящий момент прикладывается как ApplyJointTorque
команда.
Загрузите пример файла карты, 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 в верхней части модели, чтобы инициализировать все переменные, объявленные выше.
Запустите симуляцию. Робот вращается вокруг окружения и останавливается всякий раз, когда рабочий достигает заданного порога.