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