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
Можно масштабировать обнаружение на рисунке, чтобы визуализировать нанесенные ковариационные эллипсы сгенерированных обнаружений.
В этом примере вы узнали об организации theaterPlot
объект. Вы также научились визуализировать простой сценарий отслеживания с помощью theaterPlot
объект.