Используйте theaterPlot визуализировать сценарий отслеживания

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

Введение

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

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

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

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

  • platformPlotter — Постройте платформы в сценарии отслеживания

  • trajectoryPlotter — Постройте траектории в сценарии отслеживания

  • orientationPlotter — Постройте ориентацию платформ в сценарии отслеживания

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

  • detectionPlotter — Постройте обнаружения датчика в сценарии отслеживания

  • trackPlotter — Постройте дорожки в сценарии отслеживания

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

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

Создайте theaterPlot и trackingScenario Объекты

Создайте trackingScenario возразите и theaterPlot объект.

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

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

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

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 функционируйте, чтобы построить waypoint траекторию.

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

Снабдите подсказкой Вас, может построить несколько функций того-же-типа (платформы, траектории, ориентации, покрытия, обнаружения или дорожки) вместе использование одного плоттера. Например, можно построить несколько траекторий вместе путем определения массива ячеек 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]));

Отобразите башню с помощью плоттера платформы.

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

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

radar = fusionRadarSensor(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 объект.

Для просмотра документации необходимо авторизоваться на сайте