Этот пример является расширением примера моделирования мобильного робота на складе с использованием Gazebo. Пример показывает, чтобы изменить планировщик пути PRM с помощью планировщика A * и добавить алгоритм гистограммы векторного поля (VFH), чтобы избежать препятствий .
Необходимые условия
Проверьте пример «Моделирование мобильного робота на складе с использованием Gazebo», чтобы настроить элементы измерения и приведения в действие. В этом примере описывается загрузка и использование виртуальной машины (VM) для настройки моделируемого робота.
Рассмотрим пример выполнения задач для робота для рабочего процесса планирования пути и навигации по сценарию склада.
Из примера «Выполнение задач для робота» в эту модель внесены два основных изменения. Цель состоит в том, чтобы заменить используемый алгоритм планировщика пути и добавить контроллер, который избегает препятствий в окружении.
Плановик MATLAB ® Function Block теперь использует plannerAStarGrid
(Navigation Toolbox), чтобы запустить алгоритм планирования пути A *.
Подсистема предотвращения препятствий теперь использует блок Векторное Поле Histogram в качестве части контроллера. The rangeReadings
функциональный блок выводит области значений и углы, когда полученные данные не пусты. Блок VFH затем генерирует направление рулевого управления на основе препятствий в области значений скана. За близкими препятствиями робот должен развернуться, чтобы объехать их. Настройте параметры VFH для различной эффективности предотвращения препятствий.
open_system("aStarPathPlanningAndObstacleAvoidanceInWarehouse.slx");
Загрузите пример файла карты, 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 загорается, когда робот пытается избежать препятствия.