За допомогою 6-осевого робота, заданого положення кінцевого ефектора та діапазону орієнтацій, як знайти оптимальні значення з'єднання


10

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

http://en.wikipedia.org/wiki/Robotic_arm

Але якщо робот тримає щось подібне до ручки, і я хочу, щоб робот позначив певну точку цією ручкою на мішені, то мені не байдуже, як ручка орієнтована, доки вона перпендикулярна позначеній поверхні.

Тож рівняння зворотної кінематики матиме нескінченно багато рішень.

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

Відповіді:


9

По-перше, нам потрібно визначити оптимальний . Оскільки ви не кажете те, що вважаєте оптимальним, більшість людей вибирають квадратичний вираз. Наприклад, припустимо, що ваші поточні кути суглоба задані векторомα. Ми можемо розглянути можливість мінімізації необхідного руху - з помилкоюх=α-αстаrт, Ви можете визначити функцію витрат J=хТQх для деякої матриці Q. Ми зазвичай використовуємо діагональну матрицю, але будь-яка матриця, що визначається позитивом, буде робити.

На спрощеному прикладі з двома суглобами кута, якщо спільними а був дешевший мотор (можливо, ближче до кінцевого ефектора), ми можемо мати функцію витрат

J=[хахб][1002][хахб], тобто. рух суглобаб вдвічі дорожче, ніж спільне а.

Тепер кінематичне рівняння є матричною формулою, і в позначенні Денавіт-Гартенберга може бути:

Тi=[100х010у001z0001], де права рука представляє положення (х,у,z) та орієнтація (в даний час встановлена ​​нульовим обертанням), враховуючи кути з'єднання.

Оскільки нас не хвилює орієнтація, а лише положення, ми можемо усікати перші 3 стовпчики останньої матриці перетворення та останній рядок першої матриці перетворення. Ми можемо так само виразити цю формулу:

[100001000010]Тi[0001]=[хуz]

Помноживши ліву частину, отримаємо три рівняння. Якби параметри були лінійними, вирішити їх було б просто. Це так, якщо всі приводи є лінійними приводами. У цьому випадку проблема насправді є квадратичною програмою . Ми можемо переставити ліву частину, щоб отримати рівняння:

Кх=[хуz], для деякої матриці К.

Квадратична програма - це проблема, яка може бути виражена у вигляді:

Мінімізуйте J=12хТQх+cТх

На тему Ахб, Ех=г

Для вирішення цього питання існує ряд алгоритмів, якими ви можете скористатися, наприклад, внутрішня точка, активний набір, .... Просто знайдіть підходящу бібліотеку, і вона вирішить її для вас.

Нелінійну систему рівнянь вирішити важче. Це називається нелінійним програмуванням , але це те, що у вас є, якщо у вас є обертові суглоби.

По суті, замість матричних рівнянь у вас є нелінійні функції.

Мінімізуйте f(х) на тему год(х)=0, г(х)0 (переупорядкуйте, якщо необхідно, щоб РЗС обмежень було нульовим)

Алгоритми, що використовуються для вирішення цього питання, ще складніші, але включають внутрішню точку, послідовне квадратичне програмування (SQP), активний набір, відображаючі алгоритми довіреної області. Очевидно, що пояснення того, як працюють ці алгоритми, є дуже тривалим, і я не залишатиму його поза рамками цієї відповіді. Досить сказати, що кількість вмісту в алгоритмах, що використовуються для просто квадратичного програмування, може скласти сам курс.

Вам слід просто знайти бібліотеку, щоб вирішити проблему, для кодування ефективної реалізації знадобиться багато часу, і ефективні реалізації можуть обробляти 100 (або більше) змінних одночасно. Наприклад, якщо ви використовуєте MATLAB, то є документація щодо використання функції fmincon з Панелі оптимізації.

Щоб вирішити це в Інтернеті, вам може знадобитися C ++ або інша власна реалізація, наприклад, NLopt. Зверніть увагу, що це може бути не те, що мікроконтролер може швидко вирішити, і багато бібліотек можуть мати інші залежності, які не просто використовувати у мікроконтролері (оскільки вони призначені для комп'ютера).


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

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

З новою передбачуваною орієнтацією просто перенесіть її через інверсну розв'язку і повторіть, поки точність не буде достатньою.

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


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

  • випадковий перезапуск (генерується випадковим чином)
  • на основі сітки

або інші користувацькі методи.

Однак зауважте, що якщо мінімумів багато, не існує хорошого способу гарантувати, що ви знайдете глобальні мінімуми. Ви можете лише поліпшити свої шанси.


2

Оскільки питання стосується промислового робота, ми, мабуть, не маємо моделі динаміки роботи, тому я припускаю, що ми шукаємо рішення, які оптимізують лише кінематичний критерій.

Робот має рішення закритої форми для своєї зворотної кінематики, але, на жаль, кінцевий ефектор має додаткову ступінь свободи обертання, а це означає, що робот має по суті 7 ступенів свободи. Але оскільки це лише ще один доф , це не стільки питання, скільки можна подумати.

Поширений трюк для таких майже не зайвих роботів - зафіксувати зайві ступені свободи та вирішити для решти спільні значення аналітично. Скажімо, ми пишемо ІК-вирішувач із закритою формою для робота 6 dof, який повертає рішення в0,05мс в середньому Ітерацією від1 до 360 тому ви можете знайти оптимальне рішення для дискретизації кута пера 1 в о 18 мс, що дано програмі, мабуть, більш ніж достатньо.

Якщо більшу частину часу ручка лише трохи рухається (наприклад, під час малювання лінійки), ще одним фокусом для прискорення пошуку є використання чисельного ІК, наприклад, метод псевдоінверсії:

Дозволяє q1 будь поточна конфігурація робота, нехай J будь його якобійським, і нехай Δx- переміщення цілі відносно поточного перетворення кінцевого ефектора. ВирішитиΔx=JΔq для Δq і обчислити нову конфігурацію q2=q1+Δq. Я пропускаю тут деталі, але рішенняΔq повинні мінімізувати Δq для правильно обраного показника.

Це робиться для робота 7 dof і знову потрібно брати лише частки мілісекунди. Хочаq2 може не бути коректною конфігурацією (спільні значення можуть бути поза межами) і може бути не точним рішенням ІК (однак, ви можете зробити більше псевдо зворотних кроків), більшість часу це буде гарною відправною точкою для пошуку за допомогою вирішувач із закритою формою.


1

Для цього є приємна закрита форма. Скажімо, що нам байдуже, щоrzє (тобто нам байдуже, як ми це змінимо ).

J-1Х˙=Θ˙=[j1j2j3j4j5j6][х˙у˙z˙rх˙rу˙rz˙]=[θ1˙θ2˙θ3˙θ4˙θ5˙θ6˙]
Де ji є iтгод стовпчик J-1. Ми можемо розійтисяΘ˙ в ту частину, від якої залежить rz˙ і частина, яка цього не робить.
Θ˙=Θ˙х˙rу˙+Θ˙rz˙Θ˙rz˙=j6rz˙
Отже тепер гра стала, давайте мінімізуємо
(Θ˙х˙rу˙+Θ˙rz˙)ТD(Θ˙х˙rу˙+Θ˙rz˙)
для деякої діагональної матриці Dяк Роналчн сказав вище. Я збираюся використовуватиА=Θ˙х˙rу˙ і Б=Θ˙rz˙ для легшого перегляду

Ми можемо розширити це до

АТDА+2БТDА+БТDБабоАТDА+2rz˙j6ТDА+rz˙2j6ТDj6

Тепер у нас є просте рівняння для диференціації rz˙. Ми знаходимо похідну відносноrz˙ і встановити його 0.

2j6ТDА+2rz˙j6ТDj6=0rz˙=-j6ТDАj6ТDj6
Це мінімізує кут з'єднання «відстань» між вашими двома позими.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.