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

В этом примере показано, как задать пользовательское масштабирование времени в блоке 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 object. The axes object contains 204 objects of type patch, line.