Использование 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 может эффективно работать с 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;

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

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

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

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