Этот пример является расширением примера «Моделирование мобильного робота на складе с помощью беседки». В примере показано изменение планировщика путей 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.
