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

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

  • Как симулировать движение целей с помощью trackingScenario.

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

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

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

Симулируйте Движущийся Объект и его Атрибуты

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

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

rng(2020); % For repeatable results.
scene = trackingScenario('UpdateRate',2.5)
scene = 
  trackingScenario with properties:

     IsEarthCentered: 0
          UpdateRate: 2.5000
      SimulationTime: 0
            StopTime: Inf
    SimulationStatus: NotStarted
           Platforms: {}

По умолчанию сценарий отслеживания запускается от SimulationTime к StopTime. Размер шага дан UpdateRate в Гц. На основе частоты обновления 2,5 Гц, размера шага scene 0,4 секунды. В настоящее время нет никаких целей (заданное использование platform) заданный в сценарии. Когда StopTime задан как Inf, запуски сценария до движения всех платформ в концах сценария. Задайте платформу в сценарии под названием target:

target = platform(scene);

Можно проверять, что цель теперь задана в сценарии, scene.

scene.Platforms{1}
ans = 
  Platform with properties:

       PlatformID: 1
          ClassID: 0
         Position: [0 0 0]
      Orientation: [0 0 0]
       Dimensions: [1×1 struct]
             Mesh: [1×1 extendedObjectMesh]
       Trajectory: [1×1 kinematicTrajectory]
    PoseEstimator: [1×1 insSensor]
         Emitters: {}
          Sensors: {}
       Signatures: {[1×1 rcsSignature]  [1×1 irSignature]  [1×1 tsSignature]}

По умолчанию безразмерный точечный объект создается, но можно задать объектную степень в длине, ширине и высоте. Кроме того, тривиальный kinematicTrajectory сопоставлен с целью. Чтобы создать траекторию для цели, можно использовать waypointTrajectory объект. Можно настроить waypoint траекторию путем определения серии waypoints цели и соответствующее время посещения. Можно также задать другие свойства траектории, такие как скорость и курс. Смотрите waypointTrajectory для получения дополнительной информации.

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

h = 3; % Unit in km
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]';% unit in degree
timeOfArrival = 60*[  0   1.5  1.8  2.1  5.1  5.4  5.7  7.2]';
targetTrajectory = waypointTrajectory('Waypoints', waypoints, 'TimeOfArrival', timeOfArrival);
target.Trajectory = targetTrajectory;

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

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

tp = theaterPlot('XLimits',[-12 12]*1e3,'Ylimits',[-12 12]*1e3,'ZLimits',[-1e4 1e4]);
trajPlotter = trajectoryPlotter(tp,'DisplayName','Trajectory');
plotTrajectory(trajPlotter,{waypoints})
targetPlotter = platformPlotter(tp,'DisplayName','Target');

Запустите сценарий отслеживания и визуализируйте целевое движение в виде с высоты птичьего полета.

while advance(scene) && ishghandle(tp.Parent)
    targetPose = pose(target,'true');
    plotPlatform(targetPlotter, targetPose.Position);
end

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

В сценарии отслеживания можно сгенерировать обнаружения целей в трех разных подходах:

Смоделируйте Радарный Датчик и Симулируйте его Обнаружения

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

Создайте башню и радар

Затем вы создаете платформу мачты с размерностями 5 м, 5 м и 30 м в длине, ширине и высоте, соответственно. Расположите башню налево целевой путь. Установите z координату положения башни к-15 м, таким образом, что нижняя часть башни находится на горизонтальной плоскости системы координат сценария.

tower = platform(scene);
tower.Dimensions = struct ('Length',5,'Width',5,'Height',30,'OriginOffset', [0 0 0]);
tower.Trajectory.Position = [-1e4 0 15];

Задайте плоттер платформы, чтобы показать башню.

towerPlotter = platformPlotter(tp,'DisplayName','Tower','Marker','o','MarkerFaceColor',[0 0 0]);
plotPlatform(towerPlotter,tower.Trajectory.Position,tower.Dimensions,tower.Trajectory.Orientation);

Используйте fusionRadarSensor в моностатическом режиме, чтобы реализовать моностатический радарный датчик сканирования. По умолчанию, датчик возражают обнаружениям отчетов в координатной системе координат платформы, на которой смонтирован датчик. Можно изменить выходную систему координат координаты с помощью DetectionsCoordinates свойство fusionRadarSensor. Доступными выходными системами координат является 'Body'(значение по умолчанию), 'Scenario', 'Sensor rectangular', и 'Sensor spherical'.

radar1 = fusionRadarSensor(1,'UpdateRate',2.5,...
    'MountingLocation',[0 0 -15],'FieldOfView',[4;45],...
    'MechanicalAzimuthLimits',[-60 60],'MechanicalElevationLimits',[0 0],...
    'HasElevation',true,'FalseAlarmRate',1e-7)
radar1 = 
  fusionRadarSensor with properties:

              SensorIndex: 1
               UpdateRate: 2.5000
            DetectionMode: 'Monostatic'
                 ScanMode: 'Mechanical'
    InterferenceInputPort: 0
       EmissionsInputPort: 0

         MountingLocation: [0 0 -15]
           MountingAngles: [0 0 0]

              FieldOfView: [4 45]
              RangeLimits: [0 100000]

     DetectionProbability: 0.9000
           FalseAlarmRate: 1.0000e-07
           ReferenceRange: 100000

       TargetReportFormat: 'Clustered detections'

  Show all properties

Смонтируйте датчик на платформе мачты.

tower.Sensors = radar1;

Сгенерируйте и симулируйте обнаружения

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

radar1Plotter = coveragePlotter(tp,'DisplayName','Radar1 Beam','Color','b');
detPlotter = detectionPlotter(tp,'DisplayName','Detections',...
    'Marker','o','MarkerFaceColor',[1 0 0]);

Перезапустите сценарий, сгенерируйте обнаружения и постройте обнаружения. Можно наблюдать несколько ложных обнаружений.

restart(scene);
while advance(scene) && ishghandle(tp.Parent)
    
    view(70,40); % Comment this to show the bird's eye view;
    time = scene.SimulationTime;

    % Obtain the target pose and plot it.
    poseTarget = pose(target,'true');
    plotPlatform(targetPlotter,poseTarget.Position);
    
    % Obtain the target pose expressed in the tower's coordinate frame.
    poseInTower = targetPoses(tower);
    
    % Obtain the radar detections using the radar object.
    [detections, numDets] = radar1(poseInTower,time);
    
    % Extract detection positions and transform them to the scenario frame.
    detPos = zeros(numDets,3);
    for i=1:numDets
        detPos(i,:) = tower.Trajectory.Position + detections{i}.Measurement';
    end

    % Plot detections.
    if ~isempty(detPos)
        plotDetection(detPlotter,detPos);
    end
    
    % Plot the radar beam and coverage area.
    plotCoverage(radar1Plotter,coverageConfig(scene));
    
end

Сгенерируйте обнаружения для всех датчиков, смонтированных на платформе

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

radar2 = fusionRadarSensor(2,'Rotator','UpdateRate',2.5, ...
    'MountingLocation',[0 0 -15], 'FieldOfView',[4; 45], ...
    'HasElevation',true,'FalseAlarmRate',1e-7);
tower.Sensors{2} = radar2;
radar2Plotter = coveragePlotter(tp,'DisplayName','Radar 2 Beam', 'Color','g');

Перезапустите сценарий, сгенерируйте обнаружения на основе башни и постройте обнаружения. Как показано в симуляции, оба эти два радара генерируют обнаружения цели.

restart(scene);
while advance(scene) && ishghandle(tp.Parent)
    
    time = scene.SimulationTime;

    % Obtain the target pose and plot it.
    poseTarget = pose(target,'true');
    plotPlatform(targetPlotter,poseTarget.Position);

    % Plot the coverage of sensors.
    configs = coverageConfig(scene);
    plotCoverage(radar1Plotter,configs(1));
    plotCoverage(radar2Plotter,configs(2));

    % Generate the detections.
    [towerDetections, numDets] = detect(tower,time);

    % Extract detection positions and transform them to the scenario frame.
    detPos = NaN(numDets,3);
    for i=1:numDets
        detPos(i,:) = tower.Trajectory.Position + towerDetections{i}.Measurement';    
    end

    % Plot detections.
    if numDets
        plotDetection(detPlotter,detPos);
    end
    
end

Сгенерируйте обнаружения от всех датчиков в сценарии

Можно также сгенерировать обнаружения от всех датчиков в сценарии отслеживания с помощью detect функция trackingScenario.

Чтобы проиллюстрировать этот подход, вы добавляете плоскость в сценарии и задаете его waypoint траекторию. Плоскость летит с юго-запада на северо-восток на высоте 2,9 км. Создайте плоттер платформы для плоскости.

plane = platform(scene);
planeTrajectory = waypointTrajectory('Waypoints',1e3*[-10 -10 -2.9; 12 12 -2.9],'TimeOfArrival',[0 80]);
plane.Trajectory = planeTrajectory;
planePlotter = platformPlotter(tp,'DisplayName','Plane','Marker','d','MarkerEdgeColor','k');

Смонтируйте пристальный радар на плоскости с полем зрения 50 градусов. Создайте плоттер для радара.

radar3 = fusionRadarSensor(3,'No scanning','UpdateRate',2.5,'FieldOfView',[60,20], ...
    'HasElevation',true,'FalseAlarmRate',1e-7);
plane.Sensors = radar3;
radar3Plotter = coveragePlotter(tp,'DisplayName','Radar 3 Beam', 'Color','y');

Установите системы координат создания отчетов всех этих трех радаров к системе координат сценария. Необходимо включить инерционную систему навигации (INS) прежде, чем установить координату обнаружения на систему координат сценария.

release(radar1);
radar1.HasINS = true;
radar1.DetectionCoordinates = 'Scenario';
release(radar2);
radar2.HasINS = true;
radar2.DetectionCoordinates = 'Scenario';
radar3.HasINS = true;
radar3.DetectionCoordinates = 'Scenario';

Перезапустите и запустите сценарий, сгенерируйте все обнаружения в сценарии и постройте обнаружения.

% Hide the published figure. Show a pre-recorded animation instead.
f = tp.Parent.Parent;
if numel(dbstack) > 5
    f.Visible = 'on';
    f.Visible = 'off';
end

restart(scene);
while advance(scene) && ishghandle(tp.Parent)
     
    % Obtain the target pose and plot it.
    poseTarget = pose(target,'true');
    plotPlatform(targetPlotter,poseTarget.Position);
    
    % Obtain the plane pose and plot it.
    posePlane = pose(plane,'true');
    plotPlatform(planePlotter,posePlane.Position);
    
    % Plot the coverage of sensors.
    configs = coverageConfig(scene);
    plotCoverage(radar1Plotter,configs(1));
    plotCoverage(radar2Plotter,configs(2));
    plotCoverage(radar3Plotter,configs(3));
    
    % Generate the detections.
    scenarioDetections = detect(scene);
    numDets = numel(scenarioDetections);
    
    % Extract detection positions in the scenario frame.
    detPos = NaN(numDets,3);
    for i=1:numDets
        detPos(i,:) = scenarioDetections{i}.Measurement';    
    end
    
    % Plot detections.
    if numDets
        plotDetection(detPlotter,detPos);
    end
    
end

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

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

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