exponenta event banner

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

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

  • Моделирование движения целей с помощью 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 объект. Можно настроить траекторию ППМ, указав последовательность ППМ цели и соответствующее время посещения. Можно также задать другие свойства траектории, такие как скорость и курс. Посмотрите 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.

Чтобы проиллюстрировать этот подход, добавьте плоскость в сценарий и определите траекторию его ППМ. Самолёт летит с юго-запада на северо-восток на высоте 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');

Установите кадры отчетов всех трех радаров в кадр сценария. Перед установкой координат обнаружения в кадр сценария необходимо включить инерциальную навигационную систему (ИНС).

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

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

Резюме

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