одиниця 2 / 9

Штучний інтелект у робототехніці та управлінні рухом

Прибуток:

  • Можливість налаштовувати та вирішувати задачі прямої/зворотної кінематики та планування траєкторії за допомогою ШІ
  • Можливість створювати безпечну орбіту, надаючи обмеження суглобів робота, обмеження швидкості та прискорення як контекст підказки
  • Можливість чисельної та фізичної перевірки кінематичних і траєкторних вихідних даних, створених ШІ

Переведення захвату на кінці руки робота в певну точку простору, в певній орієнтації; Це звучить просто, але за цим стоять кінематичні рівняння, обмеження суглобів, сингулярності та планування траєкторії. Тут інженер-мехатронік разом використовує тригонометрію, лінійну алгебру та теорію управління. Штучний інтелект є потужним помічником у цьому процесі: він може створювати прямі кінематичні рівняння, пропонувати підходи до вирішення зворотної кінематики, параметризувати траєкторію відповідно до обмежень швидкості/прискорення. Однак робототехніка є однією з областей мехатроніки з найвищим фізичним ризиком; Якщо послідовність кутів, згенеровану штучним інтелектом, надсилається до робота без перевірки, рука може вдарити себе, навколишнє середовище або оператора. У цьому розділі ми побачимо, як налаштувати та перевірити кінематику та планування траєкторії за допомогою ШІ.

Пряма та зворотна кінематика

Пряма кінематика (FK): визначення положення та орієнтації кінцевого ефектора, якщо відомі кути з’єднання. Є тільки одне рішення, воно пряме.

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

концепція

введення

вихід

Кількість рішень

Передня кінематика

спільні кути

Крайнє положення/орієнтація

неодружений

Зворотна кінематика

Крайнє положення/орієнтація

спільні кути

Кілька/немає/нескінченність

Для двошарнірної планарної руки інверсну кінематику можна налаштувати в AI та перевірити вручну таким чином:

імпортувати numpy як npdef inverse_kinematik_2r(x, y, L1, L2): """IK для 2-х шарнірної планарної руки. Повертає кути в радіанах (розв'язок ліктя вниз).""" r2 = x**2 + y**2 # Перевірка доступності: чи є точка в робочій області? якщо np.sqrt(r2) > (L1 + L2) або np.sqrt(r2) < abs(L1 - L2): підняти ValueError("Точка знаходиться за межами доступного робочого простору") cos_t2 = (r2 - L1**2 - L2**2) / (2 * L1 * L2) cos_t2 = np.clip(cos_t2, -1.0, 1.0) # numericalsecurity t2 = np.arccos(cos_t2) # лікоть вниз t1 = np.arctan2(y, x) - np.arctan2(L2*np.sin(t2), L1 + L2*np.cos(t2)) return np.degrees(t1), np.degrees(t2)# Перевірка: L1=L2=1, ціль (1,1) -> очікуваний t2=90 градусівprint(inverse_kinematik_2r(1.0, 1.0, 1.0, 1.0)) # ~ (0.0, 90.0)

Тут ШІ часто пропускає критичні рядки: перевірку досяжності (це точка в робочому просторі) і `np.clip` (запобігає виходу введення arccos за межі ±1 через помилку округлення). Без цих двох засобів захисту код вироблятиме NaN або аварійно завершуватиме роботу в недійсній точці.

Порада: запитуючи роздільну здатність IK, чітко скажіть ШІ «додати контроль доступності та обмежити введення arccos до кліпу». Ці дві лінії запобігають тихим помилкам, які викликають найбільше головного болю в цій галузі.

Спільні межі, сингулярність і множинні рішення

Кожен шарнір справжнього робота має діапазон кутів (наприклад, від -170° до +170°), обмеження швидкості та обмеження прискорення. Навіть якщо IK дає математично дійсний кут, його не можна використовувати, якщо цей кут знаходиться за межами фізичного діапазону з’єднання. Крім того, у деяких конфігураціях робот потрапляє в унікальність: дві осі вирівнюються, один ступінь свободи втрачається, а швидкості суглобів намагаються досягти нескінченності для невеликого руху кінчика.

Ось чому одного кадрового рішення недостатньо; Кожне рішення має пройти фільтр прийнятності:

def solution_gecerli_mi(acilar_deg, limits_deg): """болі: [t1,t2,...], обмеження: [(min,max),...]""" для болю, (amin, amax) в zip(acilar_deg, limits_deg): якщо ні (амін <= біль <= amax): повернути False, f"Обмеження суглоба перевищено: {pain:.1f} deg ({amine},{amax}) крім" return True, "OK"limits = [(-170, 170), (-120, 120)]print(cozum_valid_mi([0.0, 90.0], limits)) # (True, 'OK')print(cozum_valid_mi([0.0, 150.0], обмеження)) # (False, «Спільний ліміт перевищено...»)

AI може дати «математичне» рішення IK; але спільні обмеження та уникнення сингулярності є специфічними для вашої системи і повинні бути надані як контекст підказки.

Планування орбіти

Переміщення робота з точки А в точку Б не означає проведення прямої лінії між двома кутами. Різка зміна швидкості створює механічний удар і вібрацію. Замість цього використовуються м’які профілі: трапецієподібний профіль швидкості (постійне прискорення–постійна швидкість–постійне уповільнення) або S-крива (більш плавна, де прискорення також обмежене). Змушуючи AI генерувати траєкторію, ви повинні вказати ціль, тривалість і обмеження.

import numpy as npdef trapez_yorunge(q0, q1, v_max, a_max, dt=0.01): """Трапецієподібний профіль швидкості для одного суглоба. Масив позицій повертається.""" distance = abs(q1 - q0) direction = np.sign(q1 - q0) t_speed = v_max / a_max distance_speed = 0,5 * a_max * t_speed**2 if 2 * distance_speed > distance: # трикутний профіль (v_max недосяжний) t_speed = np.sqrt(distance / a_max) t_constant = 0,0 v_peak = a_max * t_speed else: t_constant = (distance - 2 * distance_speed) / v_max v_peak = v_max T = 2 * t_accelerate + t_constant t = np.arange(0, T, dt) # ... обчислення позиції для кожного t (на основі фаз прискорення/константи/уповільнення) return t, T, v_peak, duration, vz = trapezoidal_trajectory(0.0, 90.0, v_max=60.0, a_max=120.0)print(f"Загальна тривалість: {duration:.3f} с, пікова швидкість: {vz:.1f} град/с")

Логічна перевірка тут така: якщо відстань невелика, двигун ніколи не досягне v_max і профіль перетвориться з трапецієподібного на трикутний. Якщо ШІ пропустить цю умову, для коротких рухів буде розрахована неправильна тривалість. Ви можете перевірити це, протестувавши код із відомим значенням (наприклад, дуже коротка відстань).

Слабка підказка / Сильна підказка

СЛАБКО: «Напишіть траєкторію, за якою рука робота переміщається від А до В». (Немає обмежень: обмеження швидкості? прискорення? відстань між з’єднаннями? Сліпий вихід.) СИЛЬНИЙ: «Створіть траєкторію від точки до точки в просторі з’єднання для 6-осьового робота. Обмеження швидкості для кожного з’єднання становить 90 град/с, обмеження прискорення — 180 град/с^2, діапазон кутів указано в таблиці. Використовуйте трапецієподібний профіль швидкості, якщо відстань коротка, потрапляє в трикутний профіль.

Перевірка: від симуляції до робота

Траєкторія, згенерована ШІ, перевіряється в такому порядку перед тим, як перейти до робота:

  1. Числовий: чи кут з’єднання, швидкість і прискорення кожного кроку в межах обмежень?
  2. Зіткнення: чи стикається рука сама з собою чи з навколишнім середовищем уздовж траєкторії (візуалізуйте/імітуйте, якщо можливо)?
  3. Сингулярність: чи проходить орбіта через область сингулярності (чи наближається визначник Якобі до нуля)?
  4. Повільний тест апаратного забезпечення: керуйте роботом на низькій швидкості (наприклад, 10%) і спостерігайте за ним візуально.
  5. Поступове збільшення швидкості: коли все перевірено, швидкість поступово збільшується до номінального значення.
Застереження: під час запуску робота з нової траєкторії вперше, перевизначення швидкості завжди має бути низьким, а E-stop має бути доступним. Навіть якщо вихідні дані штучного інтелекту є «математично правильними», зсув, зворотна вісь або заминка кабелю у фізичному налаштуванні будуть виявлені лише під час повільного тестування.

Міні-чохол

Інженер з автоматизації Ece запитує у штучного інтелекту код траєкторії в просторі з’єднання для програми «вибери та розмісти». AI виробляє трапецієподібний профіль, але коли Ece тестує рух на коротку відстань, вона бачить, що час від’ємний: код не обробив випадок трикутного профілю, коли v_max не може бути досягнуто. Ece виправляє це, повідомляючи підказку "якщо відстань коротка, впадіть у трикутний профіль". Потім він перевіряє кути з’єднань, надані штучним інтелектом через свою функцію перевірки, з власною таблицею обмежень і виявляє, що з’єднання 5 хотіло +125° в одній точці, тоді як обмеження становило +120°. Він переплановує траєкторію та контролює її, цього разу запускаючи робота на 10% швидкості. У першому раунді він бачить, що захват підходить занадто близько до столу, і виправляє зсув Z. ШІ повернув робочий контур за лічені хвилини; але три окремі перевірки (трикутний профіль, межа з’єднання, повільний тест) виявили три окремі реальні проблеми.

Поширені помилки

  • Використання рішення IK без обмежень суглобів і контролю доступності.
  • Не відсікаючи записи arccos/arcsin, але виробляючи NaN у разі помилки округлення.
  • Запит на орбіту без обмеження швидкості/прискорення та створення механічного удару.
  • Ігноруючи зони сингулярності та дозволяючи швидкості з’єднання стрімко зростати.
  • Пропуск переходу трапецієподібно-трикутного профілю на короткій відстані та неправильний розрахунок часу.
  • Проведення першого орбітального випробування на повній швидкості та без доступу до E-stop.

Підсумовуючи

  • Передня кінематика має єдине рішення; обернена кінематика може створювати кілька, неіснуючих або нескінченних рішень.
  • Рішення IK обов'язково фільтруються з точки зору спільних обмежень, доступності та унікальності.
  • Планування траєкторії; Він використовує м’які профілі, сумісні з обмеженнями, наприклад трапецієподібні або S-подібні.
  • На невеликій відстані профіль змінюється від трапецієподібного до трикутного; це має бути оброблено в коді.
  • AI прискорює математику; Обмеження та контекст фізичної інсталяції мають увійти в підказку.
  • Нова траєкторія завжди запускається вперше з низьким коефіцієнтом швидкості та доступною зупинкою.

Аплікаційне завдання

Виберіть модель плеча з двома або трьома суглобами (з реальною чи уявною довжиною ланок і обмеженнями з’єднань). Попросіть ШІ створити зворотну кінематичну функцію та планувальник траєкторії з цим контекстом. Потім: (1) вручну перевірте вихід IK за допомогою відомої цілі (чи повертаєте ви кути назад і повертаєтеся до тієї самої точки, що й FK), (2) перевірте, чи код захоплює їх, надаючи принаймні одну недоступну точку та одну спільну межу, що перевищує ціль, (3) перевірте, чи на короткій відстані орбітальний час виявляється прийнятним. Запишіть, скільки проблем перевірки ви знайшли в першій версії коду та який рівень виявив кожну з них.