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

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

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

Обзор модели

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

Плановик MATLAB ® Function Block теперь использует plannerAStarGrid (Navigation Toolbox), чтобы запустить алгоритм планирования пути A *.

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

open_system("aStarPathPlanningAndObstacleAvoidanceInWarehouse.slx");

Setup

Склад

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

Карта основана на obstacleAvoidanceWorld.world, который загружается в VM. Был сгенерирован PNG-файл для использования в качестве матрицы карты с collision_map_creator_plugin плагин. Для получения дополнительной информации см. Раздел «Плагин Collision Map Creator».

close
figure("Name","Warehouse Map","Visible","on")
load exampleHelperWarehouseRobotWithGazeboBuses.mat
load helperPlanningAndObstacleAvoidanceWarehouseMap.mat map
logicalMap = map.getOccupancy;
mapScalingFactor = 100;
show(map)

Присвойте местоположения xy зарядной станции, сортировочной станции и места разгрузки вблизи полок на складе. Выбранные значения основаны на моделируемом мире в 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 Simulator. В виртуальной машине щелкните значок Gazebo Warehouse Robot with Obstacles. Если симулятор Gazebo не откроется, возможно, потребуется переустановить плагин. См. раздел Установка плагина Gazebo вручную в разделе «Совместное моделирование между Simulink и Gazebo».

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

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

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

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

sim("aStarPathPlanningAndObstacleAvoidanceInWarehouse.slx");

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

Зеленая лампа AvaidingObstacle загорается, когда робот пытается избежать препятствия.