Используйте пользовательское масштабирование времени для траектории вращения

В этом примере показано, как задать пользовательское масштабирование по времени в блоке Rotation Trajectory, чтобы выполнить интерполированную траекторию. Два поворота заданы в блоке, чтобы сгенерировать траекторию между ними. Цель состоит в том, чтобы перемещаться между вращениями, используя нелинейное масштабирование времени с большим количеством выборок времени ближе к окончательному вращению.

Задайте масштабирование по времени

Создайте векторы для временного вектора масштабирования и значений временного масштабирования. Время масштабирования времени является линейным вектором от 0 до 5 секунд с интервалом 0,1 секунды. Значения масштабирования времени следуют кубической траектории с соответствующими производными, заданными для скорости и ускорения. Эти значения используются в модели.

tsTime = 0:0.1:5;
tsVals(1,:) = (tsTime/5).^3;        % Position
tsVals(2,:) = ((3/125).*tsTime).^2;  % Velocity
tsVals(3,:) = (18/125^2).*tsTime;   % Acceleration

Откройте модель

Блок Clock выходов время симуляции и используется для запроса траектории вращения в тех, которые задают временные точки. Полный набор времени масштабирования и значений входят в блок Rotation Trajectory, но вход Time задает, когда делать выборку из этой траектории. Функциональный блок MATLAB ® использует plotTransforms для построения координатной системы координат, которая перемещается по сгенерированной траектории вращения.

open_system("custom_time_scaling_rotation")

Симулируйте модель

Симулируйте модель. График показывает, как вращение следует нелинейной интерполированной траектории, параметризованной во времени. Модель запускается с помощью решателя с фиксированным шагом с интервалом 0,1 секунды, поэтому каждая система координат находится на расстоянии 0,1 секунды друг от друга. Заметьте, что преобразования отбираются более близко к окончательному вращению.

sim("custom_time_scaling_rotation")
hold off

Figure contains an axes. The axes contains 204 objects of type patch, line.