* планирование пути и предотвращение препятствия на складе

Этим примером является расширение Симулирования Мобильного Робота на Складе Используя пример Gazebo. Пример показывает, чтобы изменить планировщика пути PRM с* планировщик и добавить алгоритм векторной полевой гистограммы (VFH), чтобы избежать препятствий.

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

Обзор модели

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

Планировщик 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 лампы освещает, когда робот старается избегать препятствия.