В этом примере показано, как генерировать и визуализировать траектории нескольких самолетов с помощью radarScenario и waypointTrajectory.
Шесть траекторий самолета, смоделированных в этом примере, описаны в [1]. Летательный аппарат летит в устройстве, предназначенном для приема радаром, расположенным в месте происхождения.
Концептуально траектория - это кривая пространства, через которое объект перемещается как функция времени. Чтобы определить кривую, можно придумать кривую через пространство, которая проходит через набор точек, называемых ППМ, соединенных интерполяционной функцией, называемой интерполяцией. Интерполятор позволяет определить путь между ППМ с помощью непрерывной функции. Общими интерполяторами являются полиномиальные (например, кусочно-линейные или кубические сплайны). Для быстро изменяющейся траектории требуется большее количество ППМ для поддержания интерполированной кривой как можно ближе к истинной кривой; однако мы можем уменьшить количество требуемых точек, тщательно выбирая интерполяторы.
Многие модели движения, используемые в гусеничных фильтрах, состоят из профилей «постоянная скорость», «постоянный поворот» или «постоянное ускорение». Чтобы разместить эти модели движения, интерполятор, используемый в waypointTrajectory объект основан на кусочно-клотоидном сплайне (горизонтально) и кубическом сплайне (вертикально). Кривизна клотоидного сплайна линейно изменяется в зависимости от пройденного расстояния; это позволяет легко моделировать прямые и постоянные повороты, имея одну дополнительную степень свободы для плавного перехода между прямыми и кривыми сегментами. Аналогично, объекты в воздухе испытывают воздействие силы тяжести, следуя параболическому (квадратичному) пути. Наличие кубического сплайна для моделирования вертикальной отметки позволяет моделировать траекторию с аналогичной дополнительной степенью свободы.
Как только физический путь через пространство объекта известен (и установлен), скорость объекта как функция пройденного расстояния определяется посредством кубической эрмитовой интерполяции. Это полезно для моделирования траекторий объектов, которые ускоряются через витки или прямые сегменты.
Эталонные траектории, которые мы используем, состоят из прямых, постоянных поворотов и поворотов с ускорением.
Следующий файл содержит таблицы ППМ и скоростей (в единицах метров и метров в секунду), которые могут быть использованы для реконструкции шести траекторий самолета. Загрузите его в MATLAB и проверьте таблицу, содержащую первую траекторию.
load('radarBenchmarkTrajectoryTables.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 = radarScenario('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');
![]()
Может быть поучительным просматривать управляющие точки, используемые для формирования траекторий. На следующем рисунке показана первая траектория, представляющая большой самолёт.
Управляющие точки, используемые для построения траектории, отображаются на крайнем левом графике. Для обозначения изменений кривизны при постоянном повороте плоскости требуется лишь несколько ППМ.
Графики справа показывают высоту, величину скорости и величину ускорения соответственно. Скорость остается почти постоянной, несмотря на резкое изменение кривизны. Это является преимуществом использования клотоидного интерполятора.
[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 и radarScenario для создания многообъектного сценария отслеживания. В этом примере вы изучили понятия, лежащие в основе интерполятора, используемого внутри waypointTrajectory и были продемонстрированы способы воспроизведения сценария с небольшим числом ППМ.
W.D. Блэр, Г. А. Уотсон, Т. Кирубараджан, Я. Бар-Шалом, «Ориентир для распределения и отслеживания радаров в ECM». Аэрокосмические и электронные системы IEEE Trans on, том 34. № 4. 1998