Введение в отслеживание сценария и симуляцию радарных обнаружений

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

Мотивация

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

Создайте сценарий отслеживания с одной движущейся целью

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

scene = trackingScenario('UpdateRate', 10)
scene = 

  trackingScenario with properties:

        UpdateRate: 10
          StopTime: Inf
    SimulationTime: 0
         IsRunning: 1
         Platforms: {}

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

plat = platform(scene)
plat = 

  Platform with properties:

       PlatformID: 1
          ClassID: 0
       Dimensions: [1x1 struct]
       Trajectory: [1x1 kinematicTrajectory]
    PoseEstimator: [1x1 insSensor]
         Emitters: {}
          Sensors: {}
       Signatures: {[1x1 rcsSignature]  [1x1 irSignature]  [1x1 tsSignature]}

Теперь, вы видите, что сценарию задали одну платформу в списке Platforms, и что платформа имеет информацию по умолчанию, которая задает его, но движение платформы все еще должно быть задано при помощи метода trajectory, который является следующим шагом.

Траектория платформы задана набором waypoints в 3 мерных пространствах и наборе информации о времени прибытия. Время прибытия задает, когда каждый waypoint достигнут. Между waypoints движение будет следовать за движением клотоиды, которое минимизирует скорость изменения в ориентации платформы относительно расстояния, которое это передает. Опционально, вы используете Course, указывают, что курс в учит waypoint гарантировать, что цель проходит определенное направление относительно земли.

Следующий код задает путь к трассе для цели с прямыми участками длина 20 километров и радиус поворота 2 километров. Цель летит на уровне приблизительно 150 метров в секунду. Высота над землей составляет 3 километра и задана как отрицательная в соглашении северо-востока Вниз, используемого в этом сценарии.

h = -3; % Altitude above ground, in Kilometers
waypoints = 1e3*   [  1    1    0   -1    -1   0     1    1
    0   10   12   10   -10  -12  -10    0
    h    h    h    h     h   h     h    h]';
course =           [ 90   90  180   270  270    0   90   90]';
timeOfArrival = 60*[  0   1.5  1.8  2.1  5.1  5.4  5.7  7.2]';
traj = waypointTrajectory('Waypoints', waypoints, 'TimeOfArrival', timeOfArrival);
plat.Trajectory = traj;

Визуализируйте и запустите сценарий отслеживания

Чтобы визуализировать сценарий как, его запускается, создайте и используйте theaterPlot и добавьте trajectoryPlotter и platformPlotter, чтобы визуализировать траекторию платформы, соответственно.

tp = theaterPlot('XLimits', [-12 12]*1e3, 'Ylimits', [-12 12]*1e3, 'ZLimits', [1.1*h 0]*1e3);
pPlotter = trajectoryPlotter(tp, 'DisplayName', 'Trajectory');
plotTrajectory(pPlotter, {waypoints})
aPlotter = platformPlotter(tp, 'DisplayName', 'Target');

Можно теперь визуализировать движение цели путем усовершенствования симуляции и использования метода plotPlatform, чтобы построить целевое положение.

while advance(scene)
    p = pose(plat,'true');
    plotPlatform(aPlotter, p.Position);
end

Создайте радар сканирования

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

  1. Вы добавляете платформу, которая представляет платформу, на которой смонтирован датчик. Это позволяет вам использовать метод targetPoses, чтобы извлечь положения всех других целей в сценарии относительно датчика. Вы располагаете платформу мачты слева от целевого пути.

  2. Вы добавляете датчик, смонтированный на платформе. Можно задать свойства MountingLocation и MountingAngles задать, как датчик смонтирован на платформе относительно кадра платформы осей.

tower = platform(scene);
tower.Trajectory.Position = [-10000 0 0];
radar = monostaticRadarSensor(1, 'UpdateRate',10, ... % In Hz
    'MountingLocation', [0 0 -30], 'FieldOfView', [1.5;45],...
    'MechanicalScanLimits', [-60 60; 0 0], 'HasElevation', true)
radarLocation = tower.Trajectory.Position + radar.MountingLocation;
rPlotter = platformPlotter(tp, 'DisplayName', 'Radar', 'Marker', 'o', 'MarkerFaceColor', [0 0 0]);
plotPlatform(rPlotter, tower.Trajectory.Position);
radar = 

  monostaticRadarSensor with properties:

                  SensorIndex: 1
                   UpdateRate: 10
                     ScanMode: 'Mechanical'

             MountingLocation: [0 0 -30]
               MountingAngles: [0 0 0]

          MaxUnambiguousRange: 100000
    MaxUnambiguousRadialSpeed: 200
                  FieldOfView: [2x1 double]
        MaxMechanicalScanRate: [2x1 double]
         MechanicalScanLimits: [2x2 double]
              MechanicalAngle: [2x1 double]
                    LookAngle: [2x1 double]

         DetectionProbability: 0.9000
               FalseAlarmRate: 1.0000e-06

  Use get to show all properties

Создайте обнаружения Используя радар сканирования

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

Можно визуализировать радар, сканируя луч с помощью trajectoryPlotter, сосредоточенного в радарном положении. detectionPlotter используется, чтобы визуализировать радарные обнаружения.

beamPlotter = trajectoryPlotter(tp, 'DisplayName', 'Radar Beam', 'LineStyle', '-');
detsPlotter = detectionPlotter(tp, 'DisplayName', 'Radar Detections', 'Marker', 'o', 'MarkerFaceColor', [1 0 0]);
restart(scene);
while advance(scene)
    % Move the platform
    p = pose(plat,'true');
    plotPlatform(aPlotter, p.Position);

    % Get the platform pose in the coordinates of the tower
    tgtPose = targetPoses(tower);

    % Simulate and plot the radar detections
    [detections, numDets] = radar(tgtPose, scene.SimulationTime);
    detPos = zeros(numDets,3);
    for i=1:numDets
        detPos(i,:) = radarLocation + detections{i}.Measurement';
    end
    if ~isempty(detPos)
        plotDetection(detsPlotter, detPos);
    end

    % Get and plot the radar beam in the horizontal plane
    angle = radar.MechanicalAngle(1);
    beamPosition = radarLocation + radar.MaxUnambiguousRange*[0 0 0; cosd(angle) sind(angle) 0];
    plotTrajectory(beamPlotter, {beamPosition})
end

Добавьте движущуюся радарную платформу

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

restart(scene);
reset(radar);

% Create the platform and add it to the scenario
pPlat = platform(scene);
% Make the platform move from bottom-left to top-down
traj = waypointTrajectory('Waypoints', 1e3*[-10 -10 -3; 10 10 -3], 'TimeOfArrival', [0; 100]);
pPlat.Trajectory = traj;
% Add a staring radar with 60 degrees field-of-view relative to the platform x-axis
pRadar = monostaticRadarSensor(2,'No scanning','UpdateRate',10,'FieldOfView',[60;20], ...
    'HasINS',true,'DetectionCoordinates','Scenario'); % Report detections in the scenario frame
% Pack the platform with a radar and INS-GPS sensor
pPlat.PoseEstimator = insSensor;
pPlat.Sensors = pRadar;
% Add a plotter to plot the platform position
pPlotter = platformPlotter(tp, 'DisplayName', 'Platform', 'Marker', 'd', 'MarkerFaceColor', [0 0 1]);
wasSnapped = false;

% Run the simulation with both platforms
while advance(scene)
    time = scene.SimulationTime;

    % Move the first platform
    p = pose(plat,'true');
    plotPlatform(aPlotter, p.Position);

    % Simulate tower detections
    tgtPose = targetPoses(tower); % Get the platform pose relative to the tower
    [detections1, numDets1] = radar(tgtPose, time); % Simulate the radar detections

    % Simulate platform detections
    [detections2, numDets2] = detect(pPlat, time); % Generate detections for platform
    p = pose(pPlat,'true');
    plotPlatform(pPlotter, p.Position); % Plot the platform position

    % Collect and plot the detections
    detPos = zeros(numDets1+numDets2,3);
    for i=1:numDets1
        detPos(i,:) = radarLocation + detections1{i}.Measurement';
    end
    for i=numDets1+1:numDets2
        detPos(i,:) = detections2{i-numDets1}.Measurement';
    end
    if numDets1 || numDets2
        plotDetection(detsPlotter, detPos);
        if ~wasSnapped
            snapnow
            wasSnapped = true;
        end
    end

    % Plot the radar beam in the horizontal plane
    angle = radar.MechanicalAngle(1);
    beamPosition = radarLocation + radar.MaxUnambiguousRange*[0 0 0; cosd(angle) sind(angle) 0];
    plotTrajectory(beamPlotter, {beamPosition})
end

Сводные данные

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

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