Постарайтесь не перемещать препятствия на основе радарных обнаружений

Этот пример демонстрирует, как избежать столкновения с движущимися препятствиями на основе концепции [1] препятствия скорости.The uavScenario используемый в этом примере на основе, "Симулируют Радарный Датчик, Смонтированный На UAV" пример, который показывает, как сгенерировать обнаружения дорожки движущихся БПЛА близко к автомобилю, оборудованному датчиком.

Сценарий тестирования Setup

Сценарий тестирования имеет два БПЛА, из которых одно эго UAV несет радарный датчик и другие действия UAV как движущееся препятствие. Радарный датчик на автомобиле, оборудованном датчиком генерирует целевые дорожки, содержащие целевую информацию о положении и скорости на основе обнаружений. Эго UAV может выполнить маневр предотвращения на основе информации об обнаружении.

rng(0) % For repeatable results.

% Create a scenario that runs for 10 seconds.
s = uavScenario("StopTime",30,"HistoryBufferSize",200);

% Create a fixed-wing target that moves from [30 0 0] to [20 10 0].
target = uavPlatform("Target",s,"Trajectory",waypointTrajectory([30 0 0; 0 30 0],"TimeOfArrival",[0 30]));
updateMesh(target,"fixedwing",{1},[1 0 0],eul2tform([0 0 pi]));

% Create a quadrotor as the ego vehicle.
egoVelocity = [1 1 0];
egoMultirotor = uavPlatform("EgoVehicle",s,"InitialVelocity", egoVelocity);
updateMesh(egoMultirotor,"quadrotor",{1},[0 1 0],eul2tform([0 0 pi]));

% Create a radar sensor and set up its properties.
radarSensor = radarDataGenerator("no scanning","SensorIndex",1,"UpdateRate",10,...
    "FieldOfView",[120 80],...
    "HasElevation", true,...
    "ElevationResolution", 3,...
    "AzimuthResolution", 1, ...
    "RangeResolution", 10, ... meters
    "RangeRateResolution",3,...
    "RangeLimits", [0 750],...
    "TargetReportFormat","Tracks",...
    "TrackCoordinates",'Scenario',...
    "HasINS", true,...
    "HasFalseAlarms",true,...
    "FalseAlarmRate",1e-5,...
    "HasRangeRate",true,...
    "FalseAlarmRate", 1e-7);

% Mount the radar sensor on the ego vehicle. ExampleHelperUAVRadar inherits
% from the uav.SensorAdaptor class.
radar = uavSensor("Radar",egoMultirotor,ExampleHelperUAVRadar(radarSensor),"MountingAngles", [0 0 0]);

Симулируйте сценарий без предотвращения препятствия

В сценарии, если вы позволяете эго, UAV продолжает лететь вдоль его начального направления, это в конечном счете столкнется с фиксированным крылом UAV как показано в симуляции.

% Set up the 3D view of the scenario.
[ax, plotFrames] = show3D(s);
% Represent the ego UAV as a green marker.
plot3(0,0,0,"Marker","diamond","MarkerFaceColor","green","Parent",plotFrames.EgoVehicle.BodyFrame);
% Represent the other UAV as a red marker.
plot3(0,0,0,"Marker","diamond","MarkerFaceColor","red","Parent",plotFrames.Target.BodyFrame);
xlim([-5,35]);
ylim([-5,35]);

% Start simulation.
setup(s);
while advance(s)
    % Move ego UAV along its velocity vector.
    motion = read(egoMultirotor);
    motion(1:2) = motion(1:2) + motion(4:5)/s.UpdateRate;
    move(egoMultirotor, motion);

    show3D(s,"FastUpdate", true,"Parent",ax);
    pause(0.02);
end

Figure contains an axes object. The axes object contains 4 objects of type patch, line.

Сконфигурируйте поведение предотвращения препятствия

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

% Set up safety radius
radiusUAV = 0.5;  % UAV radius (m)
radiusObs = 2;  % Obstacle radius (m)
safetyDist = 2;  % Collision safety radius (m) - same for all obstacles
effectiveRadius = radiusUAV+radiusObs+safetyDist;

% Time Horizon (time until collision to perform avoidance maneuver)
Th = 10;  % sec

Симулируйте сценарий и протестируйте поведение предотвращения препятствия

В этом разделе вы симулируете сценарий UAV, чтобы протестировать алгоритм предотвращения препятствия. Алгоритм предотвращения управляет движением мультиротора эго согласно желаемой скорости выход для предотвращения столкновения. Алгоритм предотвращения пытается найти столкновение свободным направлением на основе скоростей и автомобиля, оборудованного датчиком и целевого транспортного средства, и затем направить автомобиль, оборудованный датчиком к столкновению свободное направление при поддержании той же величины скорости.

% Set up the 3D view of the scenario.
[ax,plotFrames] = show3D(s);
% Represent the ego UAV as a green marker.
plot3(0,0,0,"Marker","diamond","MarkerFaceColor","green","Parent",plotFrames.EgoVehicle.BodyFrame);
% Represent the other UAV as a red marker.
plot3(0,0,0,"Marker","diamond","MarkerFaceColor","red","Parent",plotFrames.Target.BodyFrame);
xlim([-5,35]);
ylim([-5,35]);

% Start simulation.
restart(s);
setup(s);
desVel = egoVelocity(1:2);
while advance(s)

    % Move the ego UAV along its velocity vector.
    motion = read(egoMultirotor);
    motion(1:2) = motion(1:2) + desVel/s.UpdateRate;
    motion(4:5) = desVel;
    move(egoMultirotor, motion);

    % Update sensor readings and read data.
    updateSensors(s);

    % Obtain detections from the radar.
    [isUpdated,time,confTracks,numTracks,config] = read(radar);

    % Perform obstacle avoidance maneuver by adjusting ego vehicle's
    % velocity
    desVel = egoVelocity(1:2);
    if numTracks > 0
        % Detect imminent collision using
        % exampleHelperDetectImminentCollision function.
        obstacleStates = [confTracks.State];
        [isOnCollisionPath, VOFrontAngle, VOBackAngle, VOMinAngle, VOMaxAngle] ...
            = exampleHelperDetectImminentCollision(motion(1:2)', motion(4:5)', obstacleStates([1,3],:), ...
            obstacleStates([2,4],:),effectiveRadius,Th);

        % Find obstacles that are on imminent collision path.
        collisionObsIdx = find(isOnCollisionPath);
        if any(isOnCollisionPath)
            % Compute the velocity required to avoid collision using the
            % exampleHelperCVHeuristic2D function.
            desVel = exampleHelperCVHeuristic2D(norm(egoVelocity), ...
                motion(1:2)', ...
                motion(4:5)', ...
                obstacleStates([1,3],collisionObsIdx), ...
                obstacleStates([2,4],collisionObsIdx), ...
                effectiveRadius, ...
                VOFrontAngle(collisionObsIdx), ...
                VOBackAngle(collisionObsIdx), ...
                VOMinAngle(collisionObsIdx), ...
                VOMaxAngle(collisionObsIdx), Th);
            desVel = desVel';
        end
    end

    show3D(s,"FastUpdate", true,"Parent",ax);
    pause(0.02);
end

Figure contains an axes object. The axes object contains 4 objects of type patch, line.

Ссылка

[1] Fiorini P, Шиллер З. Моушн Плэннинг в Динамических средах Используя Препятствия Скорости. Международный журнал Исследования Робототехники. 1998; 17 (7):760-772. doi:10.1177/027836499801700706