Использование theaterPlot Визуализация радиолокационного сценария

В этом примере показано, как использовать theaterPlot визуализация различных аспектов радиолокационного сценария.

Введение

theaterPlot является эффективным инструментом для визуализации различных аспектов радиолокационного сценария. Он состоит из первичного объекта, который принимает окружение графического изображения на основе родительских осей, и плоттеров, чтобы построить график желаемых аспектов функций из радиолокационного сценария.

Этот рисунок показывает структурное представление theaterPlot объект.

The Parent свойство задает оси, на которых включен график театра. Можно задать родительские оси графика театра во время создания объекта. Если вы не задаете родительские оси, theaterPlot создает новый рисунок и использует в качестве своей Parent текущие системы координат созданного рисунка свойство. Можно также задать пределы осей родительских осей с помощью XLimits, YLimits, и Zlimits свойства при помощи аргументов пары "имя-значение" во время создания объекта. Установите единицы измерения для каждой оси с помощью AxesUnits свойство.

The Plotters свойство содержит плоттеры, которые вы добавили в theaterPlot объект.

  • platformPlotter - Постройте графики платформ в радиолокационном сценарии

  • trajectoryPlotter - Постройте траектории в радиолокационном сценарии

  • orientationPlotter - Построение графика ориентации платформ в радиолокационном сценарии

  • coveragePlotter - Постройте покрытие датчика и лучи датчика в радиолокационном сценарии

  • detectionPlotter - Построение графиков обнаружения датчиков в радиолокационном сценарии

  • trackPlotter - Постройте графики в радиолокационном сценарии

Можно задать визуальные элементы и эффекты для каждого плоттера во время создания плоттера. Каждый плоттер также работает в паре с theaterPlot функция объекта, которую необходимо вызвать, чтобы построить график результатов. Для примера, a coveragePlotter работает в паре с plotCoverage функция объекта, которая показывает покрытие датчика.

Этот пример демонстрирует несколько плоттеров для визуализации радиолокационного сценария. theaterPlot может эффективно работать с radarScenario хотя вам не обязательно нужен радар Scenario использовать theaterPlot объект.

Создание theaterPlot и радиолокационные Scenario Объекты

Создайте радиолокационный Scenario объект и theaterPlot объект.

simulationDuration = 100;
scene = radarScenario('StopTime',simulationDuration);
tp = theaterPlot('XLimits',[-250 250],'YLimits',[-250 250],'ZLimits',[0 120]);
view(3);grid on;

Создайте плоттер траектории и плоттер платформы для цели

Создайте траекторию путевой точки для целевой платформы.

timeOfArrival = [0  simulationDuration];
waypoints = [100 -100 10; 100 100 80];
trajectory = waypointTrajectory(waypoints,timeOfArrival);

Добавьте кубоидную целевую платформу, которая следует указанной траектории. Сначала добавьте целевую платформу в радиолокационный сценарий.

target = platform(scene,'Trajectory',trajectory,'Dimensions', ...
    struct('Length',35,'Width',15,'Height',5.5,'OriginOffset',[0 0 0]));

Затем добавьте trajectoryPlotter объект для theaterPlot объект, и использовать plotTrajectory функция для построения графика траектории путевой точки.

trajPlotter = trajectoryPlotter(tp,'DisplayName','Trajectory','Color','k','LineWidth',1.2);
plotTrajectory(trajPlotter,{trajectory.Waypoints})

Советы Вы можете построить график нескольких функций одного типа (платформы, траектории, ориентации, покрытия, обнаружения или дорожки) вместе с помощью одного плоттера. Например, можно построить несколько траекторий вместе, задав массив ячеек путевых точек как второй аргумент plotTrajectory функция. Смотрите синтаксическое описание plotTrajectory для получения дополнительной информации.

Задайте плоттер для целевой платформы.

targetPlotter = platformPlotter(tp,'DisplayName','Target', ...
    'Marker','s','MarkerEdgeColor','g','MarkerSize',2);
plotPlatform(targetPlotter,target.Position, ...
    target.Dimensions,quaternion(target.Orientation,'rotvecd'))

Можно добавить графические объекты, отличные от объектов плоттера на theaterPlot путем прямого построения графика на родительских осях theaterPlot объект. Поставьте маркер круга в источник.

hold on
plot3(tp.Parent,0,0,0,'Color','k','Marker','o','MarkerSize',4)

Создайте платформу с установленным радарным датчиком

Добавьте платформу башни в сценарий.

tower = platform(scene,'Position',[-100,0,0],'Dimensions', ...
    struct('Length',5,'Width',5,'Height',30,'OriginOffset',[0 0 -15]));

Отобразите башню с помощью platform plotter.

towerPlotter = platformPlotter(tp,'DisplayName','Tower','Marker','s','MarkerSize',2);
plotPlatform(towerPlotter,tower.Position,tower.Dimensions,quaternion(tower.Orientation,'rotvecd'))

Монтируйте моностатический радар к верхней части башни.

radar = radarDataGenerator(1,'DetectionMode','Monostatic', ...
    'UpdateRate',5, ...
    'MountingLocation',[0, 0, 30], ...
    'FieldOfView',[4, 30],...
    'MechanicalAzimuthLimits',[-60 60], ...
    'MechanicalElevationLimits',[0 0], ...
    'HasElevation',true, ...
    'RangeResolution',200, ...
    'AzimuthResolution',20, ...
    'ElevationResolution',20);
tower.Sensors = radar;

Добавление coveragePlotter и постройте график покрытия и начальный луч для моностатического радара. При построении графика покрытия plotCoverage объект требует второго аргумента, который задает строение покрытия датчика. Получите строение при помощи coverageConfig функция на радарном сценарии scene.

radarPlotter = coveragePlotter(tp,'Color','b','DisplayName','radar beam');
plotCoverage(radarPlotter,coverageConfig(scene))

Создайте график обнаружения, чтобы построить график обнаружений, которые генерирует радар.

detPlotter = detectionPlotter(tp,'DisplayName','Detection','MarkerFaceColor','r','MarkerSize',4);

Запустите сценарий и обновите график театра

Итерация через радиолокационный сценарий и генерация радиолокационных обнаружений. Постройте график платформы, радиолокационного покрытия и обнаружений.

rng(2019) % for repeatable results
while advance(scene)
    % Plot target.
    plotPlatform(targetPlotter,target.Position, ...
        target.Dimensions,quaternion(target.Orientation,'rotvecd'))

    % Plot sensor coverage.
    plotCoverage(radarPlotter,coverageConfig(scene))

    % Extract target pose from the view of the tower and use the extracted
    % pose to generate detections.
    poseInTower = targetPoses(tower);
    [detections, numDets] = radar(poseInTower,scene.SimulationTime);
    detPos = zeros(numDets,3);
    detNoise = zeros(3,3,numDets);

    % Obtain detection pose relative to the scenario frame. Also, obtain
    % the covariance of the detection.
    for i=1:numDets
        a = detections;
        detPos(i,:) = tower.Trajectory.Position + detections{i}.Measurement';
        detNoise(:,:,i) = detections{i}.MeasurementNoise;
    end

    % Plot any generated detections with the covariance ellipses.
    if ~isempty(detPos)
        plotDetection(detPlotter,detPos,detNoise)
    end
end

Figure contains an axes. The axes contains 7 objects of type line, patch. These objects represent Trajectory, Target, Tower, radar beam, Detection.

Можно масштабировать обнаружение на рисунке, чтобы визуализировать нанесенные ковариационные эллипсы сгенерированных обнаружений.

Сводные данные

В этом примере вы узнали об организации theaterPlot объект. Вы также научились визуализировать простой радиолокационный сценарий с помощью theaterPlot объект.