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