Предотвращение препятствия UAV в Simulink

Эта модель реализует waypoint после наряду с предотвращением препятствия на UAV в симулированном сценарии. Модель берет набор waypoints и использует 3D VFH + алгоритм, чтобы обеспечить путь без препятствий.

Создайте сценарий UAV с пользовательским датчиком лидара и препятствиями

Создайте сценарий

Создайте сценарий UAV и установите его локальный источник.

Scenario = uavScenario("UpdateRate",100,"ReferenceLocation",[0 0 0]);

Добавьте маркер, чтобы указать на положение запуска UAV.

addMesh(Scenario,"cylinder",{[0 0 1] [0 .01]},[0 1 0]);

Задайте платформу UAV

Задайте исходное положение и ориентацию UAV на северо-востоке вниз (NED) система координат.

InitialPosition = [0 0 -7];
InitialOrientation = [0 0 0];

Создайте платформу UAV в сценарии.

platUAV = uavPlatform("UAV",Scenario, ...
                      "ReferenceFrame","NED", ...
                      "InitialPosition",InitialPosition, ...
                      "InitialOrientation",eul2quat(InitialOrientation));

Добавьте mesh quadrotor для визуализации.

updateMesh(platUAV,"quadrotor",{1.2},[0 0 1],eul2tform([0 0 pi]));

Создайте и смонтируйте модель датчика

Задайте разрешение лидара.

AzimuthResolution = 0.5;      
ElevationResolution = 2;

Укажите диапазон лидара.

MaxRange = 7;
AzimuthLimits = [-179 179];
ElevationLimits = [-15 15];

Создайте статистическую модель датчика, чтобы сгенерировать облака точек для датчика лидара.

LidarModel = uavLidarPointCloudGenerator("UpdateRate",10, ...
                                         "MaxRange",MaxRange, ...
                                         "RangeAccuracy",3, ...
                                         "AzimuthResolution",AzimuthResolution, ...
                                         "ElevationResolution",ElevationResolution, ...
                                         "AzimuthLimits",AzimuthLimits, ...
                                         "ElevationLimits",ElevationLimits, ...                                       
                                         "HasOrganizedOutput",true);

Создайте датчик лидара и смонтируйте датчик на quadrotor.

uavSensor("Lidar",platUAV,LidarModel, ...
          "MountingLocation",[0 0 -0.4], ...
          "MountingAngles",[0 0 180]);

Предварительно просмотрите сценарий с помощью show3D функция.

show3D(Scenario);

Figure contains an axes object. The axes object contains 2 objects of type patch.

Добавьте препятствия сценарию

Добавьте препятствия кубоида, представляя создания, к сценарию.

ObstaclePositions = [10 0; 20 10; 10 20]; % Locations of the obstacles
ObstacleHeight = 15;                      % Height of the obstacles
ObstaclesWidth = 3;                       % Width of the obstacles

for i = 1:size(ObstaclePositions,1)
    addMesh(Scenario,"polygon", ...
        {[ObstaclePositions(i,1)-ObstaclesWidth/2 ObstaclePositions(i,2)-ObstaclesWidth/2; ...
        ObstaclePositions(i,1)+ObstaclesWidth/2 ObstaclePositions(i,2)-ObstaclesWidth/2; ...
        ObstaclePositions(i,1)+ObstaclesWidth/2 ObstaclePositions(i,2)+ObstaclesWidth/2; ...
        ObstaclePositions(i,1)-ObstaclesWidth/2 ObstaclePositions(i,2)+ObstaclesWidth/2], ...
        [0 ObstacleHeight]},0.651*ones(1,3));
end
show3D(Scenario);
legend("Start Position","Obstacles")

Figure contains an axes object. The axes object contains 5 objects of type patch. These objects represent Start Position, Obstacles.

Обзор модели

Модель состоит из этих основных компонентов:

  • UAV scenario — Конфигурирует сценарий и визуализирует траекторию.

  • Waypoint following and obstacle avoidance — Реализации waypoint после с предотвращением препятствия.

  • Controller and plant — Контроллер положения для UAV.

  • Control Panel — Используйте эту панель, чтобы включить или отключить предотвращение препятствия, а также изменить предварительное расстояние для предотвращения препятствия.

Откройте модель.

open_system("ObstacleAvoidanceDemo.slx");

Сценарий UAV

Блоки сценария конфигурируют сценарий и визуализируют препятствия, траекторию и данные об облаке точек лидара.

Эта подсистема содержит эти блоки:

  • Настройка Сценария UAV — Конфигурирует блоки сценария, чтобы использовать сгенерированный сценарий для симуляции.

  • Чтение Движения Сценария UAV — Чтения текущий UAV утверждают из сценария.

  • Лидар Сценария UAV — Считывает данные об облаке точек из сценария.

  • Запись Движения Сценария UAV — Обновления новое состояние UAV.

  • Осциллограф Сценария UAV — Визуализирует траекторию UAV и данные об облаке точек лидара.

Waypoint после и предотвращение препятствия

Waypoint following and obstacle avoidance подсистема находит желаемое положение без препятствий и желаемое рыскание согласно текущему состоянию UAV и данным об облаке точек.

Эта подсистема включает эти блоки и подсистемы:

  • Последователь Waypoint — Вычисляет предварительную точку для UAV в направлении следующего waypoint.

  • Предотвращение препятствия — Использование 3D VFH + алгоритм, чтобы вычислить направление без препятствий и рыскание для рейса без коллизий и обновлений предварительная точка, вычисленная блоком Waypoint Follower.

  • Преобразование — Эта подсистема управляет частотой, на которой предотвращение препятствия используется во время рейса и другого типа данных, и преобразуйте преобразования.

  • Предварительный блок Distance — Constant, значение которого умножается на единичный вектор в желаемом направлении, и затем добавляется к текущему положению UAV, чтобы вычислить желаемое положение.

  • Включите Предотвращение Препятствия — Эта подсистема включает или отключает предотвращение препятствия.

  • 'Waypoints' Набор waypoints, через который UAV, как ожидают, полетит.

Задайте waypoints для UAV.

Waypoints = [InitialPosition; 0 20 -7; 20 20 -7; 20 0 -7];

Добавьте маркеры, чтобы указать на waypoints.

for i = 2:size(Waypoints,1)
    addMesh(Scenario,"cylinder",{[Waypoints(i,2) Waypoints(i,1) 1] [0 0.1]},[1 0 0]);
end
show3D(Scenario);
hold on
plot3([InitialPosition(1,2); Waypoints(:,2)],[InitialPosition(1,2); Waypoints(:,1)],[-InitialPosition(1,3); -Waypoints(:,3)],"-g")
legend(["Start Position","Obstacles","","","Waypoints","","","Direct Path"])

Figure contains an axes object. The axes object contains 9 objects of type patch, line. These objects represent Start Position, Obstacles, Waypoints, Direct Path.

Контроллер и объект

Controller and plant подсистема генерирует команды управления и обновляет состояние UAV на основе предварительной точки.

Эта подсистема включает эти блоки:

  • Controller — Эта подсистема вычисляет команды управления (крен, тангаж, рыскание и тяга), чтобы переместить UAV к желаемой позиции. Это использует несколько циклов ПИДа, чтобы реализовать управление положением.

  • Quadrotor Plant — Этот блок Model Руководства обновляет состояние UAV использование команд управления.

  • Преобразование — Эта подсистема извлекает положение и ориентацию от состояния UAV, и выполняет данные, и координата преобразовывает для визуализации.

Задайте параметры контроллера. Эти параметры основаны на подходе хита-и-испытания и могут быть настроены для более сглаженного рейса.

% Proportional Gains
Px = 6;
Py = 6;
Pz = 6.5;

% Derivative Gains
Dx = 1.5;
Dy = 1.5;
Dz = 2.5;

% Integral Gains
Ix = 0;
Iy = 0;
Iz = 0;

% Filter Coefficients
Nx = 10;
Ny = 10;
Nz = 14.4947065605712; 

Задайте силу тяжести, массу беспилотника и шаг расчета для блоков объекта и контроллера.

UAVSampleTime = 0.001;
Gravity = 9.81;
DroneMass = 0.1;

Панель управления

Переключатель включает или отключает обновления предварительной точки от блока Obstacle Avoidance.

Ползунок обновляется, предварительное расстояние использовалось для расчета предварительной точки.

  • На больших предварительных расстояниях рейс UAV быстрее, но имеет больший риск столкновения с препятствием.

  • В нижних значениях рейс медленнее, но имеет более низкий риск столкновения с препятствием.

Модель симулируется

Сконфигурируйте и запустите модель и наблюдайте движение UAV.

  • UAV летит через waypoints при предотвращении препятствий, и затем остановок симуляции.

  • Измените предварительное расстояние, чтобы изменить скорость UAV.

  • Измените параметры блока Obstacle Avoidance и обратите внимание на изменения в угле тангажа.

out = sim("ObstacleAvoidanceDemo.slx");

Figure UAV Scenario Scope contains an axes object. The axes object contains 10 objects of type patch, scatter, line.

Визуализируйте траекторию UAV без Препятствий

Постройте фактическую траекторию UAV и waypoints, чтобы показать эффект предотвращения препятствия на рейсе UAV.

hold on
points = squeeze(out.trajectoryPoints(1,:,:))';
plot3(points(:,2),points(:,1),-points(:,3),"-r");
legend(["Start Position","Obstacles","","","Waypoints","","","Direct Path","UAV Trajectory"])

Figure contains an axes object. The axes object contains 10 objects of type patch, line. These objects represent Start Position, Obstacles, Waypoints, Direct Path, UAV Trajectory.

Для просмотра документации необходимо авторизоваться на сайте