Перейти до основного вмісту

Рух

За допомогою інструментів для моделювання поступального та обертального руху користувач може задавати відносне переміщення або швидкість зміни положення двох тіл, з'єднаних шарнірами. Це можна використовувати, наприклад, під час моделювання роботи роботизованих маніпуляторів або аналогічних механізмів: користувач задає відносне кутове переміщення в шарнірі (у вигляді ступінчастої або іншої функції), а розв'язувач обчислює крутний момент, необхідний приводу цього шарніра для забезпечення заданого руху.

Математична основа для моделювання руху​

Облік кінематичного руху означає перехід від зв'язків, які не залежать від часу: Φ(q)= 0\Phi ( q ) = \ 0) до зв'язків, які залежать від часу:

Φ(q, t)=p(q)−f(t)=0\Phi \left( q , \ t \right) = p ( q ) - f ( t ) = 0,

де:

  • p(q)p ( q ) — це фактичний фізичний геометричний стан (відстань або кут), що витягується з поточних абсолютних координат тіл qq;
  • f(t)f ( t ) — це користувацька функція, що залежить від часу.

Відсутні значення швидкості та прискорення руху користувача автоматично обчислюються всередині компілятора рухів із використанням високоточного методу скінченних різниць:

Швидкість: v(t)=f(t+h)−f(t−h)2hv ( t ) = \frac{f ( t + h ) - f ( t - h )}{2 h}

Прискорення: a(t)=f(t+h)−2f(t)+f(t−h)h2a ( t ) = \frac{f ( t + h ) - 2 f ( t ) + f ( t - h )}{h^{2}}

Де: h=dth = d t – часовий крок.

На основі заданих обмежень руху оновлюються матриця Якобі (Φq\Phi_{q}$) та вектор правої частини для швидкостей і прискорень (γ∗\gamma^{*}) з урахуванням стабілізації за методом Баумгарте.

Отриманий у результаті розв'язання задачі множник Лагранжа (λ), що відповідає даному обмеженню руху, являє собою саме той крутний момент або силу приводу, які необхідні для здійснення руху. Це значення включається до вихідних даних телеметрії.

Визначення руху​

Рух (Motion) задається такими параметрами в інтерфейсі користувача:

  • Joint: шарнір, якому задається рух. Підтримуються такі з'єднання: петльові, призматичні та циліндричні (Revolute, Prismatic, Cylindrical).
  • Translational/ Rotational Motion: Розкривне меню лінійного/обертального руху: Прямолінійний рух застосовується до призматичних і циліндричних з'єднань. Обертальний рух застосовується для петльових і циліндричних з'єднань.
  • Displacement/ Velocity Motion: Випадне меню: Зсув/Швидкість.
  • Поле введення для задання функції руху — це користувацька функція руху, що залежить від часуf(t)f ( t ).

Приклади функцій руху:

  • 0: Рух обмежений для цього ступеня свободи;
  • t*10: Рух пропорційний часу.
  • 100*sin(pi*t): тіло зазнає гармонійних коливань з кутовою частотою π (див. графік нижче).
    • Рух (заданий), мм: x(t)=100⋅sin⁡(πt)x ( t ) = 1 0 0 \cdot \sin ( \pi t )
    • Швидкість (результат), мм/с: v(t)=100π⋅cos⁡(πt)v ( t ) = 1 0 0 \pi \cdot \cos ( \pi t )
    • Прискорення (результат), мм/с^2: a(t)=−100π2⋅sin⁡(πt)a ( t ) = - 1 0 0 \pi^{2} \cdot \sin ( \pi t )

Математичні функції для визначення руху​

Рухи можна визначити як комбінацію математичних функцій часу. У полі введення можна безпосередньо ввести такі функції:

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» широко використовується в комп'ютерній графіці та математиці, відома як кубічна інтерполяція Ерміта або функція плавного кроку.

За умовиx0<x1x_{0} < x_{1}, функція виражається таким чином:

f(x) ={h0, if x≤x0h0+(h1−h0)(3−2u)u2, if x0<x<x1h1,if x≥x1f ( x ) \ = \begin{cases}h_{0} , \ i f \ x \leq x_{0} \\ h_{0} + \left( h_{1} - h_{0} \right) ( 3 - 2 u ) u^{2} , \ i f \ x_{0} < x < x_{1} \\ h_{1} , i f \ x \geq x_{1}\end{cases}

де — нормоване положення xx між x0x_{0} і x1x_{1}:

u=x−x0x1−x0u = \frac{x - x_{0}}{x_{1} - x_{0}}

Функція IF

Синтаксис: if(<умова>; <значення, якщо менше або дорівнює 0>; <значення, якщо більше 0>).

Приклад: if(t-1; 0; 2)

Результат: якщо t ≤1, вивід 0. Якщо t > 1, вивід 2.

Тіло залишається нерухомим до першої секунди, потім миттєво починає обертатися зі швидкістю 2 радіани на секунду.

Попередження: Як показано в цьому прикладі, функція демонструє розрив при t=1, що може призвести до нестійкого рішення або навіть до збою розв'язувача. Тому краще використовувати функцію STEP з плавним переходом параметрів.

Призначення траєкторії (сплайну) за точками з файлу даних​

Сила, крутний момент та рух можуть бути задані у вигляді сплайну користувача - траєкторії, побудованої на основі часового ряду, імпортованого з файлу даних (формату DAT або CSV).

Кнопка «Spline» відкриває спеціальне діалогове вікно, що містить кнопку «Browse...» для вибору файлу даних, а також область побудови графіка, де відображаються точки з файлу користувача і сплайн (крива лінія), що з'єднує їх. Шлях до файлу даних сплайна зберігається у полі формули сили/моменту або руху у такому вигляді: spline(шлях\ім'я_файлу).

Після завантаження файлу даних готується об'єкт-інтерполятор, що з'єднує точки в криву лінію (scipy.interpolate.Akima1DInterpolator), завдяки чому вирішувач може звертатися до нього безпосередньо в будь-який момент часу.

Під час створення сплайну враховуються такі правила:

  1. Для моментів часу, що виходять за межі діапазону, вказаного у файлі, до початкового моменту використовується перше значення, а після кінцевого останнє.
  2. Одиниці вимірювання значень у файлі відповідають одиницям, що використовуються у поточних полях інтерфейсу:
  • Сила: Н,
  • Крутний момент: Н·мм,
  • Переміщення: мм або радий (залежно від режиму: поступальне або обертальне),
  • Швидкість руху: мм/с або рад/с (залежно від режиму).
  1. Режим сплайну недоступний для траєкторій приводів та електродвигунів.
  2. Перевірка коректності файлу даних користувача:
  • мінімум 2 коректні рядки,
  • перший числовий стовпець - час, другий числовий стовпець - значення,
  • додаткові стовпці ігноруються, рядки заголовка пропускаються,
  • автоматично визначається роздільник: кома, точка з комою, табуляція або пробіл,
  • відхилення або нормалізація значень часу, що дублюються,
  • сортування за часом (за потреби).