В этом примере показано, как симулировать движение целей на пробеле с помощью trackingScenario
и как сгенерировать синтетические радарные обнаружения с помощью monostaticRadarSensor
. Это также показывает, как использовать различные плоттеры, предлагаемые theaterPlot
визуализировать сценарий и обнаружения.
Основное преимущество использования генерации сценария и симуляции датчика по записи датчика является способностью создать редкие и потенциально опасные события и тестовые алгоритмы сплава датчика с ними. Этот пример покрывает целый синтетический рабочий процесс данных: как создать синтетические сценарии и как симулировать радарные обнаружения. Эти радарные обнаружения могут использоваться, чтобы разработать и протестировать алгоритмы сплава и отслеживания датчика, включая trackerGNN
.
Первый шаг в генерации симулированных радарных обнаружений создает сценарий отслеживания, в котором симулировано движение одной или нескольких движущихся целей. Чтобы сделать это, вы сначала создаете trackingScenario
, который служит средой симуляции для всех движущихся целей, которые добавляются позже.
scene = trackingScenario('UpdateRate', 10)
scene = trackingScenario with properties: UpdateRate: 10 StopTime: Inf SimulationTime: 0 IsRunning: 1 Platforms: {}
Сценарий отслеживания значения по умолчанию сконфигурирован, чтобы запуститься от SimulationTime
к StopTime
обновление в UpdateRate
герц. Первоначально, нет никаких движущихся целей, названных Platforms
, заданный в сценарии. Чтобы добавить их, используйте platform
метод.
plat = platform(scene)
plat = Platform with properties: PlatformID: 1 ClassID: 0 Dimensions: [1x1 struct] Trajectory: [1x1 kinematicTrajectory] PoseEstimator: [1x1 insSensor] Emitters: {} Sensors: {} Signatures: {[1x1 rcsSignature] [1x1 irSignature] [1x1 tsSignature]}
Теперь вы видите, что сценарию задали одну платформу в списке Platforms
, и та платформа имеет информацию по умолчанию, которая задает ее, но движение платформы все еще должно быть задано при помощи trajectory
метод, который является следующим шагом.
Траектория платформы задана набором waypoints
, в 3 мерных пространствах и наборе информации о времени прибытия. Время прибытия задает, когда каждый waypoint достигнут. Между waypoints движение будет следовать за движением клотоиды, которое минимизирует скорость изменения в ориентации платформы относительно расстояния, которое это передает. Опционально, вы используете Course
укажите, что курс в учит waypoint гарантировать, что цель проходит определенное направление относительно земли.
Следующий код задает путь к трассе для цели с прямыми участками длина 20 километров и радиус поворота 2 километров. Цель летит на уровне приблизительно 150 метров в секунду. Высота над землей составляет 3 километра и задана как отрицательная в соглашении северо-востока Вниз, используемого в этом сценарии.
h = -3; % Altitude above ground, in Kilometers 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]'; timeOfArrival = 60*[ 0 1.5 1.8 2.1 5.1 5.4 5.7 7.2]'; traj = waypointTrajectory('Waypoints', waypoints, 'TimeOfArrival', timeOfArrival); plat.Trajectory = traj;
Чтобы визуализировать сценарий как, его запускается, создайте и используйте theaterPlot
и добавьте trajectoryPlotter
и platformPlotter
визуализировать траекторию платформы, соответственно.
tp = theaterPlot('XLimits', [-12 12]*1e3, 'Ylimits', [-12 12]*1e3, 'ZLimits', [1.1*h 0]*1e3); pPlotter = trajectoryPlotter(tp, 'DisplayName', 'Trajectory'); plotTrajectory(pPlotter, {waypoints}) aPlotter = platformPlotter(tp, 'DisplayName', 'Target');
Можно теперь визуализировать движение цели путем усовершенствования симуляции и использования plotPlatform
метод, чтобы построить целевое положение.
while advance(scene) p = pose(plat,'true'); plotPlatform(aPlotter, p.Position); end
До сих пор сценарий, который вы создали только, имеет цель, но никакой датчик, который может обнаружить его. Существует два необходимых шага при добавлении датчика в сценарий:
Вы добавляете платформу, которая представляет платформу, на которой смонтирован датчик. Это позволяет вам использовать targetPoses
метод, чтобы извлечь положения всех других целей в сценарии относительно датчика. Вы располагаете платформу мачты слева от целевого пути.
Вы добавляете датчик, смонтированный на платформе. Можно задать MountingLocation
и MountingAngles
свойства задать, как датчик смонтирован на платформе относительно системы координат платформы осей.
tower = platform(scene); tower.Trajectory.Position = [-10000 0 0]; radar = monostaticRadarSensor(1, 'UpdateRate',10, ... % In Hz 'MountingLocation', [0 0 -30], 'FieldOfView', [1.5;45],... 'MechanicalScanLimits', [-60 60; 0 0], 'HasElevation', true) radarLocation = tower.Trajectory.Position + radar.MountingLocation; rPlotter = platformPlotter(tp, 'DisplayName', 'Radar', 'Marker', 'o', 'MarkerFaceColor', [0 0 0]); plotPlatform(rPlotter, tower.Trajectory.Position);
radar = monostaticRadarSensor with properties: SensorIndex: 1 UpdateRate: 10 ScanMode: 'Mechanical' MountingLocation: [0 0 -30] MountingAngles: [0 0 0] MaxUnambiguousRange: 100000 MaxUnambiguousRadialSpeed: 200 FieldOfView: [2x1 double] MaxMechanicalScanRate: [2x1 double] MechanicalScanLimits: [2x2 double] MechanicalAngle: [2x1 double] LookAngle: [2x1 double] DetectionProbability: 0.9000 FalseAlarmRate: 1.0000e-06 Use get to show all properties
Чтобы создать обнаружения, вы перезапускаете и совершенствуете сценарий и шаг радарная симуляция.
Можно визуализировать радар, сканируя луч с помощью trajectoryPlotter
сосредоточенный в радарном положении. detectionPlotter
используется, чтобы визуализировать радарные обнаружения.
beamPlotter = trajectoryPlotter(tp, 'DisplayName', 'Radar Beam', 'LineStyle', '-'); detsPlotter = detectionPlotter(tp, 'DisplayName', 'Radar Detections', 'Marker', 'o', 'MarkerFaceColor', [1 0 0]); restart(scene); while advance(scene) % Move the platform p = pose(plat,'true'); plotPlatform(aPlotter, p.Position); % Get the platform pose in the coordinates of the tower tgtPose = targetPoses(tower); % Simulate and plot the radar detections [detections, numDets] = radar(tgtPose, scene.SimulationTime); detPos = zeros(numDets,3); for i=1:numDets detPos(i,:) = radarLocation + detections{i}.Measurement'; end if ~isempty(detPos) plotDetection(detsPlotter, detPos); end % Get and plot the radar beam in the horizontal plane angle = radar.MechanicalAngle(1); beamPosition = radarLocation + radar.MaxUnambiguousRange*[0 0 0; cosd(angle) sind(angle) 0]; plotTrajectory(beamPlotter, {beamPosition}) end
Вы хотите добавить движущуюся платформу, оборудованную поэтапным массивом, смотря радар к сценарию. Мы используем термин платформа, чтобы обозначить комбинацию движущейся платформы и датчика. Платформа является платформой, заданной с траекторией, которая несет радар.
restart(scene); reset(radar); % Create the platform and add it to the scenario pPlat = platform(scene); % Make the platform move from bottom-left to top-down traj = waypointTrajectory('Waypoints', 1e3*[-10 -10 -3; 10 10 -3], 'TimeOfArrival', [0; 100]); pPlat.Trajectory = traj; % Add a staring radar with 60 degrees field-of-view relative to the platform x-axis pRadar = monostaticRadarSensor(2,'No scanning','UpdateRate',10,'FieldOfView',[60;20], ... 'HasINS',true,'DetectionCoordinates','Scenario'); % Report detections in the scenario frame % Pack the platform with a radar and INS-GPS sensor pPlat.PoseEstimator = insSensor; pPlat.Sensors = pRadar; % Add a plotter to plot the platform position pPlotter = platformPlotter(tp, 'DisplayName', 'Platform', 'Marker', 'd', 'MarkerFaceColor', [0 0 1]); wasSnapped = false; % Run the simulation with both platforms while advance(scene) time = scene.SimulationTime; % Move the first platform p = pose(plat,'true'); plotPlatform(aPlotter, p.Position); % Simulate tower detections tgtPose = targetPoses(tower); % Get the platform pose relative to the tower [detections1, numDets1] = radar(tgtPose, time); % Simulate the radar detections % Simulate platform detections [detections2, numDets2] = detect(pPlat, time); % Generate detections for platform p = pose(pPlat,'true'); plotPlatform(pPlotter, p.Position); % Plot the platform position % Collect and plot the detections detPos = zeros(numDets1+numDets2,3); for i=1:numDets1 detPos(i,:) = radarLocation + detections1{i}.Measurement'; end for i=numDets1+1:numDets2 detPos(i,:) = detections2{i-numDets1}.Measurement'; end if numDets1 || numDets2 plotDetection(detsPlotter, detPos); if ~wasSnapped snapnow wasSnapped = true; end end % Plot the radar beam in the horizontal plane angle = radar.MechanicalAngle(1); beamPosition = radarLocation + radar.MaxUnambiguousRange*[0 0 0; cosd(angle) sind(angle) 0]; plotTrajectory(beamPlotter, {beamPosition}) end
Этот пример показывает вам, как создать сценарий отслеживания, чтобы симулировать целевое движение и радарные обнаружения. Это показывает вам, как визуализировать целевую траекторию и мгновенное положение, и как визуализировать радарный луч сканирования и обнаружения. Это также показывает вам, как симулировать радар, смонтированный на движущейся платформе.