waypointTrajectory

Генератор траектории путевой точки

Описание

The waypointTrajectory Системная object™ генерирует траектории, используя заданные точки пути. При создании системного объекта можно опционально задать время прибытия, скорость и ориентацию в каждой путевой точке. Смотрите Алгоритмы для получения дополнительной информации.

Чтобы сгенерировать траекторию из путевых точек:

  1. Создайте waypointTrajectory Объекту и установите его свойства.

  2. Вызовите объект, как если бы он был функцией.

Дополнительные сведения о работе системных объектов см. в разделе «Что такое системные объекты?».

Создание

Описание

пример

trajectory = waypointTrajectory возвращает Системный объект, trajectory, который генерирует траекторию, основанную на стационарных путевых точках по умолчанию.

пример

trajectory = waypointTrajectory(Waypoints,TimeOfArrival) задает Waypoints что сгенерированная траектория проходит, а TimeOfArrival в каждой путевой точке.

пример

trajectory = waypointTrajectory(Waypoints,TimeOfArrival,Name,Value) устанавливает каждый аргумент или свойство создания Name к заданной Value. Неопределенные свойства и аргументы создания имеют значения по умолчанию или предполагаемые значения.

Пример: trajectory = waypointTrajectory([10,10,0;20,20,0;20,20,10],[0,0.5,10]) создает траекторию путевой точки Системного объекта, trajectory, который начинается с путевой точки [10,10,0], и затем проходит через [20,20,0] через 0,5 секунды и [20,20,10] через 10 секунд.

Аргументы создания

Аргументы создания являются свойствами, которые задаются во время создания Системного объекта и не могут быть изменены позже. Если вы явным образом не задаете значение аргумента создания, значение свойства выводится.

Если вы задаете любой аргумент создания, то необходимо задать как аргументы создания точек пути, так и аргументы создания TimeOfArrivate. Можно задать Waypoints и TimeOfArrival как аргументы только для значения или пар "имя-значение".

Свойства

расширить все

Если не указано иное, свойства являются нетронутыми, что означает, что вы не можете изменить их значения после вызова объекта. Объекты блокируются, когда вы вызываете их, и release функция разблокирует их.

Если свойство настраивается, можно изменить его значение в любой момент.

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Использование Системных объектов.

Частота дискретизации траектории в Гц, заданная в виде положительной скалярной величины.

Настраиваемый: Да

Типы данных: double

Количество выборок в выходной системе координат, заданное как положительное скалярное целое число.

Настраиваемый: Да

Типы данных: double

Положения в системе координат навигации в метрах, заданные как матрица N -by-3. Столбцы матрицы соответствуют первой, второй и третьей осям, соответственно. Строки матрицы, N, соответствуют отдельным путевым точкам.

Зависимости

Чтобы задать это свойство, необходимо также задать допустимые значения для свойства TimeOfArrivation.

Типы данных: double

Время, соответствующее прибытию в каждую путевую точку в секундах, задается как вектор-столбец N-element. Первый элемент TimeOfArrival должен быть 0. Количество выборок, N, должно совпадать с количеством выборок (строк), заданным Waypoints.

Зависимости

Чтобы задать это свойство, вы также должны задать допустимые значения для свойства Waypoints.

Типы данных: double

Скорость в системе координат навигации в каждой точке пути в метрах в секунду, заданная как матрица N -by-3. Столбцы матрицы соответствуют первой, второй и третьей осям, соответственно. Количество выборок, N, должно совпадать с количеством выборок (строк), заданным Waypoints.

Если скорость задана как ненулевое значение, объект автоматически вычисляет курс траектории. Если скорость задана как нуль, объект выводит курс траектории из смежных точек пути.

Зависимости

Чтобы задать это свойство, необходимо также задать допустимые значения для свойств Waypoints и TimeOfArrivation.

Типы данных: double

Горизонтальное направление движения, заданное как N-вектор элемента в степенях. Количество выборок, N, должно совпадать с количеством выборок (строк), заданным Waypoints. Если ни один из них Velocitiesни Course задан, курс выводится из путевых точек.

Зависимости

Чтобы задать это свойство, Velocities свойство не должно быть задано при создании объекта.

Типы данных: double

Скорость грунта в каждой путевой точке, заданная как N-элементный вектор действительных чисел в м/с. Если свойство не задано, оно выводится из путевых точек. Количество выборок, N, должно совпадать с количеством выборок (строк), заданным Waypoints.

Зависимости

Чтобы задать это свойство, Velocities свойство не должно быть задано при создании объекта.

Типы данных: double

Набор скорости в каждой путевой точке, заданный как N-элементный вектор действительных чисел в степенях. Количество выборок, N, должно совпадать с количеством выборок (строк), заданным Waypoints. Если ни один из них Velocitiesни Course задан, из путевых точек выводится климат.

Зависимости

Чтобы задать это свойство, Velocities свойство не должно быть задано при создании объекта.

Типы данных: double

Ориентация в каждой путевой точке, заданная как N -элемент quaternion Вектор-столбец или 3х3-бай- N массив вещественных чисел. Количество кватернионов или матриц вращения, N, должно совпадать с количеством выборок (строк), заданным Waypoints.

Если Orientation задается кватернионами, базовый класс должен быть double.

Зависимости

Чтобы задать это свойство, необходимо также задать допустимые значения для свойств Waypoints и TimeOfArrivation.

Типы данных: quaternion | double

Выравнивание угла тангажа по направлению движения, заданное как true или false. Если задано как trueугол тангажа автоматически выравнивается по направлению движения. Если задано как false, угол тангажа устанавливается на нуль (ориентация уровня).

Зависимости

Чтобы задать это свойство, Orientation свойство не должно быть задано при создании объекта.

Выровняйте угол крена, чтобы противостоять центростремительной силе, заданной как true или false. Если задано как trueугол крена автоматически противодействует центростремительной силе. Если задано как falseугол крена равен нулю (плоская ориентация).

Зависимости

Чтобы задать это свойство, Orientation свойство не должно быть задано при создании объекта.

Опорная система координат траектории, заданная как 'NED' (Северо-Восток-Даун) или 'ENU' (Восток-Север-Вверх).

Использование

Описание

пример

[position,orientation,velocity,acceleration,angularVelocity] = trajectory() выводит систему координат данных траектории на основе заданных аргументов и свойств создания.

Выходные аргументы

расширить все

Положение в локальной навигационной системе координат в метрах, возвращаемое как матрица M -by-3.

M задается свойством SamplesPerFrame.

Типы данных: double

Ориентация в локальной навигационной системе координат, возвращенная как M -by-1 quaternion Вектор-столбец или массив 3х3-by M real.

Каждый кватернион или матрица вращения 3 на 3 является поворотом системы координат локальной навигации в текущую систему координат тела.

M задается свойством SamplesPerFrame.

Типы данных: double

Скорость в локальной навигационной системе координат в метрах в секунду, возвращенная как матрица M -by-3.

M задается свойством SamplesPerFrame.

Типы данных: double

Ускорение в локальной навигационной системе координат в метрах в секунду в квадрате, возвращаемое как M-на-3 матрица.

M задается свойством SamplesPerFrame.

Типы данных: double

Скорость вращения в локальной навигационной системе координат в радианах в секунду, возвращаемая как M-на-3 матрица.

M задается свойством SamplesPerFrame.

Типы данных: double

Функции объекта

Чтобы использовать функцию объекта, задайте системный объект в качестве первого входного параметра. Например, чтобы освободить системные ресурсы системного объекта с именем obj, используйте следующий синтаксис:

release(obj)

расширить все

waypointInfoПолучите информационную таблицу путевой точки
lookupPoseПолучите информацию о положении за определенное время
perturbationsВозмущение, заданное для объекта
perturbПрименить возмущения к объекту
cloneСоздайте повторяющийся системный объект
stepЗапуск алгоритма системного объекта
releaseОтпустите ресурсы и допустите изменения в значениях свойств системного объекта и входных характеристиках
resetСброс внутренних состояний Системного объекта
isDoneСостояние конца данных

Примеры

свернуть все

trajectory = waypointTrajectory
trajectory = 
  waypointTrajectory with properties:

         SampleRate: 100
    SamplesPerFrame: 1
          Waypoints: [2x3 double]
      TimeOfArrival: [2x1 double]
         Velocities: [2x3 double]
             Course: [2x1 double]
        GroundSpeed: [2x1 double]
          ClimbRate: [2x1 double]
        Orientation: [2x1 quaternion]
          AutoPitch: 0
           AutoBank: 0
     ReferenceFrame: 'NED'

Просмотр путевых точек по умолчанию и времени прибытия по телефону waypointInfo. По умолчанию путевые точки указывают стационарное положение на одну секунду.

waypointInfo(trajectory)
ans=2×2 table
    TimeOfArrival     Waypoints 
    _____________    ___________

          0          0    0    0
          1          0    0    0

Создайте квадратную траекторию и исследуйте связь между ограничениями путевой точки, частотой дискретизации и сгенерированной траекторией.

Создайте квадратную траекторию путем определения вершин квадрата. Задайте ориентацию в каждой путевой точке как указывающую в направлении движения. Задайте частоту дискретизации 1 Гц и используйте SamplesPerFrame по умолчанию от 1.

waypoints = [0,0,0; ... % Initial position
             0,1,0; ...
             1,1,0; ...
             1,0,0; ...
             0,0,0];    % Final position

toa = 0:4; % time of arrival

orientation = quaternion([0,0,0; ...
                          45,0,0; ...
                          135,0,0; ...
                          225,0,0; ...
                          0,0,0], ...
                          'eulerd','ZYX','frame');

trajectory = waypointTrajectory(waypoints, ...
    'TimeOfArrival',toa, ...
    'Orientation',orientation, ...
    'SampleRate',1);

Создайте рисунок и постройте график начального положения платформы.

figure(1)
plot(waypoints(1,1),waypoints(1,2),'b*')
title('Position')
axis([-1,2,-1,2])
axis square
xlabel('X')
ylabel('Y')
grid on
hold on

В цикле пройдите по траектории, чтобы вывести текущее положение и текущую ориентацию. Постройте график текущего положения и логарифмируйте ориентацию. Использование pause для имитации обработки в реальном времени.

orientationLog = zeros(toa(end)*trajectory.SampleRate,1,'quaternion');
count = 1;
while ~isDone(trajectory)
   [currentPosition,orientationLog(count)] = trajectory();

   plot(currentPosition(1),currentPosition(2),'bo')

   pause(trajectory.SamplesPerFrame/trajectory.SampleRate)
   count = count + 1;
end
hold off

Преобразуйте кватернионы ориентации в углы Эйлера для простой интерпретации, а затем постройте график ориентации с течением времени.

figure(2)
eulerAngles = eulerd([orientation(1);orientationLog],'ZYX','frame');
plot(toa,eulerAngles(:,1),'ko', ...
     toa,eulerAngles(:,2),'bd', ...
     toa,eulerAngles(:,3),'r.');
title('Orientation Over Time')
legend('Rotation around Z-axis','Rotation around Y-axis','Rotation around X-axis')
xlabel('Time (seconds)')
ylabel('Rotation (degrees)')
grid on

Пока объект траектории выводит только путевые точки, которые были заданы во время конструкции. Чтобы интерполировать между путевыми точками, увеличьте частоту дискретизации до скорости быстрее, чем время прибытия путевых точек. Установите trajectory частота дискретизации до 100 Гц и вызов reset.

trajectory.SampleRate = 100;
reset(trajectory)

Создайте рисунок и постройте график начального положения платформы. В цикле пройдите по траектории, чтобы вывести текущее положение и текущую ориентацию. Постройте график текущего положения и логарифмируйте ориентацию. Использование pause для имитации обработки в реальном времени.

figure(1)
plot(waypoints(1,1),waypoints(1,2),'b*')
title('Position')
axis([-1,2,-1,2])
axis square
xlabel('X')
ylabel('Y')
grid on
hold on

orientationLog = zeros(toa(end)*trajectory.SampleRate,1,'quaternion');
count = 1;
while ~isDone(trajectory)
   [currentPosition,orientationLog(count)] = trajectory();

   plot(currentPosition(1),currentPosition(2),'bo')

   pause(trajectory.SamplesPerFrame/trajectory.SampleRate)
   count = count + 1;
end
hold off

Выход траектории теперь выглядит округлым. Это потому, что waypointTrajectory Системная object™ минимизирует ускорение и скорость вращения при интерполяции, что приводит к более плавным, более реалистичным движениям в большинстве сценариев.

Преобразуйте кватернионы ориентации в углы Эйлера для простой интерпретации, а затем постройте график ориентации с течением времени. Ориентация также интерполирована.

figure(2)
eulerAngles = eulerd([orientation(1);orientationLog],'ZYX','frame');
t = 0:1/trajectory.SampleRate:4;
plot(t,eulerAngles(:,1),'ko', ...
     t,eulerAngles(:,2),'bd', ...
     t,eulerAngles(:,3),'r.');
title('Orientation Over Time')
legend('Rotation around Z-axis','Rotation around Y-axis','Rotation around X-axis')
xlabel('Time (seconds)')
ylabel('Rotation (degrees)')
grid on

The waypointTrajectory алгоритм интерполирует путевые точки, чтобы создать плавную траекторию. Чтобы вернуться к квадратной траектории, обеспечьте больше путевых точек, особенно вокруг резких изменений. Чтобы отслеживать соответствующее время, точки пути и ориентацию, задайте всю информацию о траектории в одной матрице.

               % Time, Waypoint, Orientation
trajectoryInfo = [0,   0,0,0,    0,0,0; ... % Initial position
                  0.1, 0,0.1,0,  0,0,0; ...

                  0.9, 0,0.9,0,  0,0,0; ...
                  1,   0,1,0,    45,0,0; ...
                  1.1, 0.1,1,0,  90,0,0; ...

                  1.9, 0.9,1,0,  90,0,0; ...
                  2,   1,1,0,    135,0,0; ...
                  2.1, 1,0.9,0,  180,0,0; ...

                  2.9, 1,0.1,0,  180,0,0; ...
                  3,   1,0,0,    225,0,0; ...
                  3.1, 0.9,0,0,  270,0,0; ...

                  3.9, 0.1,0,0,  270,0,0; ...
                  4,   0,0,0,    270,0,0];    % Final position

trajectory = waypointTrajectory(trajectoryInfo(:,2:4), ...
    'TimeOfArrival',trajectoryInfo(:,1), ...
    'Orientation',quaternion(trajectoryInfo(:,5:end),'eulerd','ZYX','frame'), ...
    'SampleRate',100);

Создайте рисунок и постройте график начального положения платформы. В цикле пройдите по траектории, чтобы вывести текущее положение и текущую ориентацию. Постройте график текущего положения и логарифмируйте ориентацию. Использование pause для имитации обработки в реальном времени.

figure(1)
plot(waypoints(1,1),waypoints(1,2),'b*')
title('Position')
axis([-1,2,-1,2])
axis square
xlabel('X')
ylabel('Y')
grid on
hold on

orientationLog = zeros(toa(end)*trajectory.SampleRate,1,'quaternion');
count = 1;
while ~isDone(trajectory)
   [currentPosition,orientationLog(count)] = trajectory();

   plot(currentPosition(1),currentPosition(2),'bo')

   pause(trajectory.SamplesPerFrame/trajectory.SampleRate)
   count = count+1;
end
hold off

Теперь вывод траектории выглядит более квадратным, особенно вокруг вершин с путевыми точками.

Преобразуйте кватернионы ориентации в углы Эйлера для простой интерпретации, а затем постройте график ориентации с течением времени.

figure(2)
eulerAngles = eulerd([orientation(1);orientationLog],'ZYX','frame');
t = 0:1/trajectory.SampleRate:4;
eulerAngles = plot(t,eulerAngles(:,1),'ko', ...
                   t,eulerAngles(:,2),'bd', ...
                   t,eulerAngles(:,3),'r.');
title('Orientation Over Time')
legend('Rotation around Z-axis', ...
       'Rotation around Y-axis', ...
       'Rotation around X-axis', ...
       'Location', 'SouthWest')
xlabel('Time (seconds)')
ylabel('Rotation (degrees)')
grid on

В этом примере показано, как создать дуговую траекторию с помощью waypointTrajectory Системные object™. waypointTrajectory создает путь через указанные путевые точки, который минимизирует ускорение и скорость вращения. После создания траектории дуги можно ограничить траекторию заданными границами.

Создайте дуговую траекторию

Задайте матрицу ограничений, состоящую из точек пути, времени прибытия и ориентации для дуговой траектории. Сгенерированная траектория проходит через точки пути в заданное время с заданной ориентацией. The waypointTrajectory Системный объект требует, чтобы ориентация была задана с помощью кватернионов или матриц вращения. Преобразуйте углы Эйлера, сохраненные в матрице ограничений, в кватернионы при задании Orientation свойство.

          % Arrival, Waypoints, Orientation
constraints = [0,    20,20,0,    90,0,0;
               3,    50,20,0,    90,0,0;
               4,    58,15.5,0,  162,0,0;
               5.5,  59.5,0,0    180,0,0];

trajectory = waypointTrajectory(constraints(:,2:4), ...
    'TimeOfArrival',constraints(:,1), ...
    'Orientation',quaternion(constraints(:,5:7),'eulerd','ZYX','frame'));

Функции waypointInfo на trajectory для возврата таблицы с указанными ограничениями. Свойства создания Waypoints, TimeOfArrival, и Orientation являются переменными таблицы. Таблица удобна для индексации во время построения графиков.

tInfo = waypointInfo(trajectory)
tInfo =

  4x3 table

    TimeOfArrival         Waypoints            Orientation   
    _____________    ____________________    ________________

           0           20      20       0    {1x1 quaternion}
           3           50      20       0    {1x1 quaternion}
           4           58    15.5       0    {1x1 quaternion}
         5.5         59.5       0       0    {1x1 quaternion}

Объект траектории выводит текущее положение, скорость, ускорение и скорость вращения при каждом вызове. Функции trajectory в цикле и постройте график положения с течением времени. Кэшируйте другие выходы.

figure(1)
plot(tInfo.Waypoints(1,1),tInfo.Waypoints(1,2),'b*')
title('Position')
axis([20,65,0,25])
xlabel('North')
ylabel('East')
grid on
daspect([1 1 1])
hold on

orient = zeros(tInfo.TimeOfArrival(end)*trajectory.SampleRate,1,'quaternion');
vel = zeros(tInfo.TimeOfArrival(end)*trajectory.SampleRate,3);
acc = vel;
angVel = vel;

count = 1;
while ~isDone(trajectory)
   [pos,orient(count),vel(count,:),acc(count,:),angVel(count,:)] = trajectory();

   plot(pos(1),pos(2),'bo')

   pause(trajectory.SamplesPerFrame/trajectory.SampleRate)
   count = count + 1;
end

Смотрите ориентацию, скорость, ускорение и скорость вращения с течением времени. The waypointTrajectory Система object™ создает путь через заданные ограничения, которые минимизируют ускорение и скорость вращения.

figure(2)
timeVector = 0:(1/trajectory.SampleRate):tInfo.TimeOfArrival(end);
eulerAngles = eulerd([tInfo.Orientation{1};orient],'ZYX','frame');
plot(timeVector,eulerAngles(:,1), ...
     timeVector,eulerAngles(:,2), ...
     timeVector,eulerAngles(:,3));
title('Orientation Over Time')
legend('Rotation around Z-axis', ...
       'Rotation around Y-axis', ...
       'Rotation around X-axis', ...
       'Location','southwest')
xlabel('Time (seconds)')
ylabel('Rotation (degrees)')
grid on

figure(3)
plot(timeVector(2:end),vel(:,1), ...
     timeVector(2:end),vel(:,2), ...
     timeVector(2:end),vel(:,3));
title('Velocity Over Time')
legend('North','East','Down')
xlabel('Time (seconds)')
ylabel('Velocity (m/s)')
grid on

figure(4)
plot(timeVector(2:end),acc(:,1), ...
     timeVector(2:end),acc(:,2), ...
     timeVector(2:end),acc(:,3));
title('Acceleration Over Time')
legend('North','East','Down','Location','southwest')
xlabel('Time (seconds)')
ylabel('Acceleration (m/s^2)')
grid on

figure(5)
plot(timeVector(2:end),angVel(:,1), ...
     timeVector(2:end),angVel(:,2), ...
     timeVector(2:end),angVel(:,3));
title('Angular Velocity Over Time')
legend('North','East','Down')
xlabel('Time (seconds)')
ylabel('Angular Velocity (rad/s)')
grid on

Ограничение дуговой траектории в заданных границах

Можно задать дополнительные точки пути, чтобы создать траектории в заданных границах. Создайте верхнюю и нижнюю границы для дуговой траектории.

figure(1)
xUpperBound = [(20:50)';50+10*sin(0:0.1:pi/2)';60*ones(11,1)];
yUpperBound = [20.5.*ones(31,1);10.5+10*cos(0:0.1:pi/2)';(10:-1:0)'];

xLowerBound = [(20:49)';50+9*sin(0:0.1:pi/2)';59*ones(11,1)];
yLowerBound = [19.5.*ones(30,1);10.5+9*cos(0:0.1:pi/2)';(10:-1:0)'];

plot(xUpperBound,yUpperBound,'r','LineWidth',2);
plot(xLowerBound,yLowerBound,'r','LineWidth',2)

Чтобы создать траекторию в границах, добавьте дополнительные путевые точки. Создайте новую waypointTrajectory Система object™, а затем вызывает его в цикле, чтобы построить график сгенерированной траектории. Кэшируйте ориентацию, скорость, ускорение и скорость вращения выхода от trajectory объект.

            % Time,  Waypoint,     Orientation
constraints = [0,    20,20,0,      90,0,0;
               1.5,  35,20,0,      90,0,0;
               2.5   45,20,0,      90,0,0;
               3,    50,20,0,      90,0,0;
               3.3,  53,19.5,0,    108,0,0;
               3.6,  55.5,18.25,0, 126,0,0;
               3.9,  57.5,16,0,    144,0,0;
               4.2,  59,14,0,      162,0,0;
               4.5,  59.5,10,0     180,0,0;
               5,    59.5,5,0      180,0,0;
               5.5,  59.5,0,0      180,0,0];

trajectory = waypointTrajectory(constraints(:,2:4), ...
    'TimeOfArrival',constraints(:,1), ...
    'Orientation',quaternion(constraints(:,5:7),'eulerd','ZYX','frame'));
tInfo = waypointInfo(trajectory);

figure(1)
plot(tInfo.Waypoints(1,1),tInfo.Waypoints(1,2),'b*')

count = 1;
while ~isDone(trajectory)
   [pos,orient(count),vel(count,:),acc(count,:),angVel(count,:)] = trajectory();

   plot(pos(1),pos(2),'gd')

   pause(trajectory.SamplesPerFrame/trajectory.SampleRate)
   count = count + 1;
end

Сгенерированная траектория теперь находится в заданных контурах. Визуализируйте ориентацию, скорость, ускорение и скорость вращения сгенерированной траектории.

figure(2)
timeVector = 0:(1/trajectory.SampleRate):tInfo.TimeOfArrival(end);
eulerAngles = eulerd(orient,'ZYX','frame');
plot(timeVector(2:end),eulerAngles(:,1), ...
     timeVector(2:end),eulerAngles(:,2), ...
     timeVector(2:end),eulerAngles(:,3));
title('Orientation Over Time')
legend('Rotation around Z-axis', ...
       'Rotation around Y-axis', ...
       'Rotation around X-axis', ...
       'Location','southwest')
xlabel('Time (seconds)')
ylabel('Rotation (degrees)')
grid on

figure(3)
plot(timeVector(2:end),vel(:,1), ...
     timeVector(2:end),vel(:,2), ...
     timeVector(2:end),vel(:,3));
title('Velocity Over Time')
legend('North','East','Down')
xlabel('Time (seconds)')
ylabel('Velocity (m/s)')
grid on

figure(4)
plot(timeVector(2:end),acc(:,1), ...
     timeVector(2:end),acc(:,2), ...
     timeVector(2:end),acc(:,3));
title('Acceleration Over Time')
legend('North','East','Down')
xlabel('Time (seconds)')
ylabel('Acceleration (m/s^2)')
grid on

figure(5)
plot(timeVector(2:end),angVel(:,1), ...
     timeVector(2:end),angVel(:,2), ...
     timeVector(2:end),angVel(:,3));
title('Angular Velocity Over Time')
legend('North','East','Down')
xlabel('Time (seconds)')
ylabel('Angular Velocity (rad/s)')
grid on

Обратите внимание, что хотя сгенерированная траектория теперь находится в пространственных контурах, ускорение и скорость вращения траектории являются несколько изменчивыми. Это связано с переопределением путевых точек.

Алгоритмы

The waypointTrajectory Системный объект определяет траекторию, которая плавно проходит через путевые точки. Траектория соединяет точки пути через интерполяцию, которая принимает, что направление тяжести, выраженное в опорной системе координат траектории, является постоянным. Обычно можно использовать waypointTrajectory для моделирования траекторий платформы или транспортного средства в пределах расстояния в сотни километров.

Планарный путь траектории (проекция x - y плоскость) состоит из кусочно-хлороидных кривых. Кривизна кривой между двумя последовательными путевыми точками изменяется линейно с длиной кривой между ними. Направление тангенса пути в каждой точке пути выбирается таким образом, чтобы минимизировать разрывы в кривизне, если только курс не задан явным образом через Course свойство или неявно через Velocities свойство. Когда путь установлен, объект использует кубическую интерполяцию Гермита, чтобы вычислить местоположение транспортного средства на протяжении пути как функцию времени и пройденного планарного расстояния.

Нормальный компонент (z -компонент) траектории впоследствии выбирается, чтобы удовлетворить сохраняющему форму кусочно-сплайну (PCHIP), если только скорость набора высоты не задана явно через ClimbRate свойство или третий столбец Velocities свойство. Выберите знак скорости подъема на основе выбранных ReferenceFrame:

  • Когда выбирается система координат 'ENU', установка положительной скорости подъема приводит к увеличению значения z.

  • Когда выбирается система координат 'NED', установка положительной скорости подъема приводит к уменьшению значения z.

Вы можете задать ориентацию транспортного средства через путь двумя основными способами:

  • Если на Orientation задано свойство, тогда объект использует кусочно-кубический кватернионный сплайн, чтобы вычислить ориентацию вдоль пути как функцию времени.

  • Если на Orientation свойство не задано, тогда рыскание транспортного средства всегда выравнивается по пути. Затем крен и тангаж управляются AutoBank и AutoPitch значения свойств, соответственно.

    AutoBankAutoPitchОписание
    falsefalseТранспортное средство всегда ровно (нулевой тангаж и крен). Обычно это используется для крупных морских судов.
    falsetrueШаг транспортного средства совмещается с путем, и его крен всегда равен нулю. Обычно это используется для наземных транспортных средств.
    truefalseТангаж и крен транспортного средства выбираются так, чтобы его локальная ось z была выровнена с ускорением сети (включая силу тяжести). Обычно это используется для винтокрылых судов.
    truetrueТранспортное средство крен выбрано так, чтобы его локальная поперечная плоскость совпала с ускорением сети (включая силу тяжести). Шаг транспортного средства совмещен с путем. Обычно это используется для двухколесных транспортных средств и самолетов.

Расширенные возможности

.
Введенный в R2020b