exponenta event banner

Использовать 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;

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

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

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]));

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

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