В этом примере описывается, как генерировать синтетические радиолокационные обнаружения в сценарии слежения, который моделирует движения цели и обнаружения датчиков. В частности, в этом примере показано:
Моделирование движения целей с помощью 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
![]()
По результатам в течение некоторого периода времени радар на самолете может непрерывно обнаруживать цель. Радар на самолете также генерирует несколько ложных обнаружений. Два радара на башне могут обнаружить самолет.
В этом примере показано, как создать сценарий слежения, имитировать движение цели и моделировать радиолокационные обнаружения в трех различных подходах на основе датчика, платформы и всего сценария. В нем также показано, как визуализировать траекторию цели, мгновенные положения, лучи радиолокационного обзора и обнаружения.