В этом примере показано, как сгенерировать и визуализировать траектории нескольких самолетов с помощью trackingScenario
и waypointTrajectory
.
Шесть траекторий самолета, смоделированные в этом примере, описаны в [1]. Самолет летает в расположении, предназначенном для приема радаром, расположенным в источник.
Концептуально говоря, траектория является кривой через пространство, которое объект перемещается как функция времени. Чтобы определить кривую, можно думать о кривой через пространство, которая проходит через набор точек, называемых путевыми точками, соединенными интерполирующей функцией, называемой интерполяцией. Интерполяция позволяет вам задать путь между путевыми точками через непрерывную функцию. Общие интерполяции основаны на полиномах (для примера, кусочно-линейных или кубических сплайнов). Для быстро изменяющейся траектории требуется больше точек пути, чтобы сохранить интерполированную кривую как можно ближе к истинной кривой; однако мы можем уменьшить количество необходимых точек путем тщательного выбора интерполяторов.
Многие модели движения, используемые в фильтрах дорожек, состоят из профилей «постоянная скорость», «постоянный поворот» или «постоянное ускорение». Чтобы вместить эти модели движения, интерполяция, используемая в waypointTrajectory
объект основан на кусочно-клочкоидном сплайне (горизонтально) и кубическом сплайне (вертикально). Кривизна хлороидного сплайна изменяется линейно относительно пройденного расстояния; это позволяет нам легко моделировать прямые и постоянные повороты, имея одну дополнительную степень свободы для плавного перехода между прямыми и изогнутыми сегментами. Точно так же объекты в воздухе испытывают эффекты гравитации, следуя параболическим (квадратичным) путем. Наличие кубического сплайна для моделирования вертикального повышения позволяет нам смоделировать путь с аналогичной дополнительной степенью свободы.
Когда физический путь через пространство объекта известен (и установлен), скорость объекта как функции пройденного расстояния определяется посредством кубической эрмитовой интерполяции. Это полезно для моделирования траекторий объектов, которые ускоряются через повороты или прямые сегменты.
Траектории бенчмарка, которые мы используем, состоят из прямых, постоянных оборотов и поворотов с ускорением.
Следующий файл содержит таблицы путевых точек и скоростей (в единицах измерения и метрах в секунду), которые могут использоваться для восстановления шести траекторий самолета. Загрузите его в MATLAB и исследуйте таблицу, содержащую первую траекторию.
load('benchmarkTrajectoryTables.mat', 'trajTable'); trajTable{1}
ans = 14x3 table Time Waypoints Velocities _____ _________________________ _____________________________ 0 72947 29474 -1258 -258.9 -129.69 0 60 57413 21695 -1258 -258.9 -129.66 0 62 56905 21417 -1258 -245.3 -153.89 0 78.1 54591 17566 -1258 -20.635 -288.86 0 80 54573 17016 -1258 -2.8042 -289.59 0 83 54571 16147 -1258 -0.061 -289.56 0 110 54571 8329 -1258 0 -289.56 0 112.7 54634 7551.5 -1258 58.979 -283.56 0 120 55718 5785.5 -1258 226.41 -180.59 0 129 58170 5172.8 -1258 284.74 52.88 0 132 59004 5413.9 -1258 274.26 93.05 0 137.8 60592 5962.2 -1258 273.62 94.76 0 147.8 63328 6909.9 -1258 273.62 94.76 0 185 73508 10435 -1258 273.62 94.76 0
Таблица содержит набор путевых точек и скоростей, через которые самолет проходит в соответствующее время.
Чтобы использовать контрольные точки, можно создать сценарий с шестью платформами и назначить траекторию каждой:
scene = trackingScenario('UpdateRate',10); for n=1:6 plat = platform(scene); traj = trajTable{n}; plat.Trajectory = waypointTrajectory(traj.Waypoints, traj.Time, 'Velocities', traj.Velocities); end
После настройки сценария и плоттера можно настроить theaterPlot
создание анимированного представления местоположений самолета по мере продвижения времени.
helperPlot = helperBenchmarkPlotter(numel(scene.Platforms)); while advance(scene) % extract the pose of each of the six aircraft poses = platformPoses(scene); % update the plot update(helperPlot, poses, scene.SimulationTime); end
Траектории, нанесенные выше, трехмерны. Можно повернуть график так, чтобы повышение траекторий была легко видное. Можно использовать view
и axis
команды для настройки графика. Поскольку траектории используют систему координат NED (северо-восток-вниз), повышение над землей имеет отрицательный компонент z.
view(60,10); axis square grid minor set(gca,'ZDir','reverse');
Может быть поучительным просматривать контрольные точки, используемые для генерации траекторий. Следующий рисунок показывает первую траекторию, которая является репрезентативной для большого самолета.
Контрольные точки, используемые для построения пути, строятся на крайнем левом графике. Для маркировки изменений кривизны необходимо лишь несколько точек пути, когда плоскость принимает постоянный поворот.
Графики справа показывают высоту, величину скорости (скорость) и величину ускорения, соответственно. Скорость остается почти постоянной, несмотря на резкое изменение кривизны. Это является преимуществом использования lothoid interpolant.
[time, position, velocity, acceleration] = cumulativeHistory(helperPlot); helperTrajectoryViewer(1, time, position, velocity, acceleration, trajTable);
Вторая траектория, показанная ниже, представляет траекторию небольшого маневренного самолёта. Состоит из двух поворотов, имеющих несколько изменений ускорения сразу после первого поворота и во время второго поворота. Для корректировки этих изменений необходимо больше точек пути, однако остальная траектория требует меньшего количества точек.
helperTrajectoryViewer(2, time, position, velocity, acceleration, trajTable);
Третья траектория, показанная ниже, является репрезентативной для самолета более высокой скорости. Он состоит из двух постоянных поворотов, где самолет замедляется в середине всего второго поворота. Вы можете увидеть контрольные точки, которые были использованы, чтобы отметить изменения скорости и ускорения на графике x-y слева.
helperTrajectoryViewer(3, time, position, velocity, acceleration, trajTable);
Четвертая траектория, также представляющая самолет более высокой скорости, показана ниже. Состоит из двух поворотов, где самолёт разгоняется и поднимается на более высокую высоту.
helperTrajectoryViewer(4, time, position, velocity, acceleration, trajTable);
Пятая траектория является репрезентативной для маневренного скоростного самолета. Состоит из трёх постоянных поворотов; однако он значительно ускоряется на протяжении всей длительности рейса. После третьего поворота самолет поднимается на ровный рейс.
helperTrajectoryViewer(5, time, position, velocity, acceleration, trajTable);
Шестая траектория также является репрезентативной для маневренного скоростного самолета. Состоит из четырёх оборотов. После второго поворота самолет уменьшает высоту и скорость и входит в третий поворот. После третьего поворота быстро разгоняется и входит в четвёртый поворот, продолжаясь прямым и горизонтальным рейсом.
helperTrajectoryViewer(6, time, position, velocity, acceleration, trajTable);
В этом примере показано, как использовать waypointTrajectory
и trackingScenario
для создания мультиобъекта сценария отслеживания. В этом примере вы узнали концепции, лежащие в основе интерполяции, используемой внутри waypointTrajectory
и были показаны способы воспроизведения сценария с небольшим количеством путевых точек.
W.D. Блэр, Г. А. Уотсон, Т. Кирубараджан, Я. Бар-Шалом, «Бенчмарк для распределения радаров и отслеживания в ECM». Аэрокосмические и электронные системы IEEE Trans on, vol. 34. № 4. 1998