Плавний рух сервоприводу для повзучого робота


11

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

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

Вирішіть для , a_1 , a_2 та a_3 :a 1a0a1a 3a2a3

position(t)=a0+a1t+a2t2+a3t3
rate(t)=position(t)=a1+2a2t+3a3t2

Дано: position(0) , position(tf) , rate(0) , rate(tf)

Я встановив швидкість сервоприводу між парою рухів рівним нулю, якщо рухи були в протилежних напрямках, і позитивним або негативним, якщо рухи були і в позитивному, і в негативному напрямку.

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

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

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


Код повинен був бути відносно прямим. Чи можете ви поговорити більше про те, чому це було пов'язано?
DaemonMaker

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

NURBS , нерівномірні раціональні B-шліци, може зробити цю роботу
Джеймс Уолдбі - jwpat7

@ jwpat7 дякую за ваш внесок, але я не думаю, що НУРБС спрацює, оскільки ці криві не гарантовано потраплять у надані точки
Робз

Це так просто, як зниження коефіцієнта ? Kp
Ян

Відповіді:


6

Генерування профілю руху

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

Встановіть попередню фільтрацію

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


+1: напевно генерація руху руху.
Гай Сіртон

2

Я думаю, що питання стосується такого типу пристрою: RC сервопривід

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.