Этим примером является расширение Симулирования Мобильного Робота на Складе Используя пример Gazebo. Пример показывает, чтобы изменить планировщика пути PRM с* планировщик и добавить алгоритм векторной полевой гистограммы (VFH), чтобы избежать препятствий.
Необходимые условия
Рассмотрите Симулирование Мобильного Робота на Складе Используя пример Gazebo, чтобы установить элементы обнаружения и приведения в действие. Этот пример переходит, как загрузить и использовать виртуальную машину (VM), чтобы установить симулированного робота.
Рассмотрите Выполнить Задачи для Складского примера Робота для рабочего процесса планирования пути и перешедший в складском сценарии.
Существует два существенных изменения к этой модели от Выполнить Задач для Складского примера Робота. Цель состоит в том, чтобы заменить используемый алгоритм планировщика пути и добавить контроллер, который избегает препятствий в среде.
Планировщик MATLAB® Function Block теперь использует plannerAStarGrid
Объект (Navigation Toolbox) запуститься* алгоритм планирования пути.
Подсистема Предотвращения Препятствия теперь использует блок Vector Field Histogram в качестве части контроллера. rangeReadings
функциональный блок выводит области значений и углы, когда полученные данные не пусты. Блок VFH затем генерирует держащееся направление на основе препятствий в области значений скана. Для близких препятствий робот должен повернуться, чтобы управлять вокруг них. Настройте параметры VFH для различной эффективности предотвращения препятствия.
open_system("aStarPathPlanningAndObstacleAvoidanceInWarehouse.slx");
Загрузите файл карты в качестве примера, map
, который является матрицей логических значений, указывающих на занятое место на складе. Инвертируйте эту матрицу, чтобы указать на свободное пространство и создать binaryOccupancyMap
объект. Задайте разрешение 100 ячеек на метр.
Карта базируется прочь obstacleAvoidanceWorld.world
, который загружается в VM. Файл PNG был сгенерирован, чтобы использовать в качестве матрицы карты с collision_map_creator_plugin
плагин. Для получения дополнительной информации смотрите Плагин Создателя Карты Столкновения.
close figure("Name","Warehouse Map","Visible","on") load exampleHelperWarehouseRobotWithGazeboBuses.mat load helperPlanningAndObstacleAvoidanceWarehouseMap.mat map logicalMap = map.getOccupancy; mapScalingFactor = 100; show(map)
Присвойте xy-местоположения заряжающейся станции, сортировав станцию и разгружающееся местоположение около полок на складе. Выбранные значения основаны на simlated мире в Gazebo.
chargingStn = [2, 13]; loadingStn = [15, 5]; unloadingStn = [15, 15];
Покажите различные местоположения на карте.
hold on; localOrigin = map.LocalOriginInWorld; localTform = trvec2tform([localOrigin 0]); text(chargingStn(1), chargingStn(2),1,'Charging'); plotTransforms([chargingStn, 0],[1 0 0 0]) text(loadingStn(1), loadingStn(2),1,'Loading 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;
Чтобы симулировать сценарий, настройте связь с 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 наверху модели, чтобы инициализировать все переменные, объявленные выше.
Запустите симуляцию. Робот управляет вокруг среды и избегает unexepected препятствий.
sim("aStarPathPlanningAndObstacleAvoidanceInWarehouse.slx");
Заметьте, что существует два цилиндрические препятствия, которые не присутствуют на карте заполнения. Робот все еще избегает их, обнаружено с помощью алгоритма VFH.
Зеленый AvoidingObstacle лампы освещает, когда робот старается избегать препятствия.