Движение
С помощью инструментов для моделирования поступательного и вращательного движения пользователь может задавать относительное перемещение или скорость изменения положения двух тел, соединенных шарнирами. Это можно использовать, например, при моделировании работы роботизированных манипуляторов или аналогичных механизмов: пользователь задает относительное угловое перемещение в шарнире (в виде ступенчатой или иной функции), а решатель вычисляет крутящий момент, необходимый приводу этого шарнира для обеспечения заданного движения.
Математическая основа для моделирования движения
Учет кинематического движения означает переход от связей, не зависящих от времени: ) к связям, зависящим от времени:
,
где:
- — это фактическое физическое геометрическое состояние (расстояние или угол), извлекаемое из текущих абсолютных координат тел ;
- — это пользовательская функция, зависящая от времени.
Недостающие значения скорости и ускорения движения пользователя автоматически вычисляются внутри компилятора движений с использованием высокоточного метода центральных конечных разностей.:
Скорость:
Ускорение:
Где: – временной шаг.
На основе заданных ограничений движения обновляются матрица Якоби ($) и вектор правой части для скоростей и ускорений () с учетом стабилизации по методу Баумгарте.
Полученный в результате решения задачи множитель Лагранжа (λ), соответствующий данному ограничению движения, представляет собой именно тот крутящий момент или силу привода, которые необходимы для осуществления движения. Это значение включается в выходные данные телеметрии.
Определение движения
Движение (Motion) задается следующими параметрами в пользовательском интерфейсе:
- Joint: шарнир, которому задается движение. Поддерживаются следующие соединения: петлевые, призматические и цилиндрические (Revolute, Prismatic, Cylindrical).
- Translational/ Rotational Motion: Выпадающее меню линейного/вращательного движения: Прямолинейное движение применимо к призматическим и цилиндрическим суставам. Вращательное движение применимо для петлевых и цилиндрических соединений.
- Displacement/ Velocity Motion: Выпадающее меню Смещение /Скорость.
- Поле ввода для задания функции движения — это пользовательская функция движения, зависящая от времени .

Примеры функций движения:
- 0: Движение ограничено для этой степени свободы;
- t*10: Движение пропорционально времени.
- 100*sin(pi*t): тело подвергается гармоническим колебаниям с угловой частотой π (см. график ниже).
- Движение (задано), мм:
- Скорость (результат), мм/с:
- Ускорение (результат), мм/с^2:

Математические функции для определения движения
Движения можно определить как комбинацию математических функций времени. В поле ввода можно напрямую ввести следующие функции:
sin(t), cos(t), tan(t), sqrt(t) (квадратный корень), exp(t) (экспоненция), abs(t) (абсолютное значение), pi (константа π ≈ 3.14159).
Можно использовать 'np.' для вызова любой стандартной математической функции NumPy, например:
np.cosh(t), np.round(t), np.sign(t) и т.д.
Полный список поддерживаемых математических функций:
https://numpy.org/doc/stable/reference/routines.math.html
Пользовательские функции: STEP, IF
В программе поддерживаются следующие пользовательские функции:
Функция STEP
Шаговая функция плавно меняется между двумя заданными значениями.
Синтаксис: step(t; t0; F0; t1; F1)
Пример прямолинейного движения (мм): step(t; 1; 0; 2; 50)

В результате: тело остаётся в положении 0 мм до 1 секунды, затем плавно перемещается на 50 мм к моменту времени 2 секунды. Красная кривая на графике показывает заданное движение, синяя — результат скорости.

Математическая формула для функции «step» широко используется в компьютерной графике и математике, известная как кубическая интерполяция Эрмита или функция гладкого шага.
При условии , функция выражается следующим образом:
где — нормированное положение между и :
Функция IF
Синтаксис: if(<условие>; <значение, если меньше или равно 0>; <значение, если больше 0>).
Пример: if(t-1; 0; 2)

Результат: если t ≤1, вывод 0. Если t > 1, вывод 2.
Тело остаётся неподвижным до первой секунды, затем мгновенно начинает вращаться со скоростью 2 радиана в секунду.

Предупреждение: Как показано в этом примере, функция демонстрирует разрыв при t=1, что может привести к неустойчивому решению или даже к сбою решателя. Поэтому предпочтительнее использовать функцию STEP с плавным переходом параметров.
Назначение траектории (сплайна) по точкам из файла данных
Сила, крутящий момент и движение могут быть заданы в виде пользовательского сплайна - траектории, построенной на основе временного ряда, импортированного из файла данных (формата DAT или CSV).
Кнопка «Spline» открывает специальное диалоговое окно, содержащее кнопку «Browse...» для выбора файла данных, а также область построения графика, где отображаются точки из файла пользователя и соединяющий их сплайн (кривая линия). Путь к файлу данных сплайна сохраняется в поле формулы силы/момента или движения в следующем виде: spline(path\file_name).

После загрузки файла данных подготавливается объект-интерполятор, соединяющий точки в кривую линию (scipy.interpolate.Akima1DInterpolator), благодаря чему решатель может обращаться к нему напрямую в любой необходимый момент времени.
При создании сплайна учитываются следующие правила:
- Для моментов времени, выходящих за пределы диапазона, указанного в файле, до начального момента используется первое значение, а после конечного — последнее.
- Единицы измерения значений в файле соответствуют единицам, используемым в текущих полях интерфейса:
- Сила: Н,
- Крутящий момент: Н·мм,
- Перемещение: мм или рад (в зависимости от режима: поступательное или вращательное),
- Скорость движения: мм/с или рад/с (в зависимости от режима).
- Режим сплайна недоступен для траекторий приводов и электродвигателей.
- Проверка корректности пользовательского файла данных:
- минимум 2 корректные строки,
- первый числовой столбец — время, второй числовой столбец — значение,
- дополнительные столбцы игнорируются,
- строки заголовка пропускаются,
- автоматически определяется разделитель: запятая, точка с запятой, табуляция или пробел,
- отклонение или нормализация дублирующихся значений времени,
- сортировка по времени (при необходимости).