exponenta event banner

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

Этот пример является расширением примера «Моделирование мобильного робота на складе с помощью беседки». В примере показано изменение планировщика путей PRM с помощью планировщика A * и добавление алгоритма векторной гистограммы поля (VFH) во избежание препятствий .

Предпосылки

Обзор модели

Из примера «Выполнение задач для робота-склада» в эту модель внесены два основных изменения. Цель состоит в замене используемого алгоритма планировщика путей и добавлении контроллера, который позволяет избежать препятствий в среде.

Функциональный блок Planner MATLAB ® теперь использует plannerAStarGrid(Панель инструментов навигации) для запуска алгоритма планирования пути A *.

Подсистема предотвращения препятствий теперь использует блок векторной гистограммы поля как часть контроллера. rangeReadings функциональный блок выводит диапазоны и углы, когда полученные данные не пусты. Затем блок VFH генерирует направление управления на основе препятствий в пределах диапазона сканирования. Для близких препятствий робот должен поворачиваться, чтобы объехать их. Настройте параметры VFH для различных характеристик предотвращения препятствий.

open_system("aStarPathPlanningAndObstacleAvoidanceInWarehouse.slx");

Установка

Складское помещение

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

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

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 не открывается, может потребоваться переустановка плагина. См. раздел Установка подключаемого модуля беседки вручную в разделе Выполнение совместного моделирования между Simulink и Gazebo.

В Simulink откройте блок Gazebo Pacer и щелкните Настройка сети и параметров моделирования. Укажите сетевой адрес как пользовательский, имя хоста/IP-адрес для моделирования беседки и порт 14581, который является портом по умолчанию для Gazebo. На рабочем столе виртуальной машины отображается IP-адрес.

Дополнительные сведения о подключении к Gazebo для включения совместного моделирования см. в разделе Выполнение совместного моделирования между Simulink и Gazebo.

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

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

sim("aStarPathPlanningAndObstacleAvoidanceInWarehouse.slx");

Обратите внимание, что на карте заселения отсутствуют два цилиндрических препятствия. Робот по-прежнему избегает их при обнаружении с помощью алгоритма VFH.

При попытке робота избежать препятствия загорается зеленая лампа ProgrammedAlbedder.