Этот пример вводит, как сгенерировать синтетические радарные обнаружения в сценарии отслеживания, который симулирует целевое движение и обнаружения датчика. А именно, этот пример показывает:
Как симулировать движение целей с помощью 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 IsRunning: 1 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);
Создайте моностатический радарный датчик сканирования. По умолчанию, датчик возражают обнаружениям отчетов в координатной системе координат платформы, на которой смонтирован датчик. Можно изменить выходную систему координат координаты с помощью DetectionsCoordinates
свойство mononstaticRadarSensor
. Доступными выходными системами координат является 'Body'
(значение по умолчанию), 'Scenario'
, 'Sensor rectangular'
, и 'Sensor spherical'
.
radar1 = monostaticRadarSensor(1,'UpdateRate',2.5,... 'MountingLocation',[0 0 -15],'FieldOfView',[4;45],... 'MechanicalScanLimits',[-60 60;0 0],'HasElevation',true,'FalseAlarmRate',1e-7)
radar1 = monostaticRadarSensor with properties: SensorIndex: 1 UpdateRate: 2.5000 ScanMode: 'Mechanical' MountingLocation: [0 0 -15] MountingAngles: [0 0 0] MaxUnambiguousRange: 100000 MaxUnambiguousRadialSpeed: 200 FieldOfView: [2×1 double] MaxMechanicalScanRate: [2×1 double] MechanicalScanLimits: [2×2 double] MechanicalAngle: [2×1 double] LookAngle: [2×1 double] DetectionProbability: 0.9000 FalseAlarmRate: 1.0000e-07 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 = monostaticRadarSensor(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 = monostaticRadarSensor(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
От результатов, сроком на время, радар на плоскости может постоянно обнаруживать цель. Радар на плоскости также генерирует несколько ложных обнаружений. Эти два радара на башне могут обнаружить плоскость.
Этот пример показывает вам, как создать сценарий отслеживания, симулировать целевое движение и симулировать радарные обнаружения в трех разных подходах на основе датчика, платформы и целого сценария. Это также показывает вам, как визуализировать целевую траекторию, мгновенные положения, радарные лучи скана и обнаружения.