Який правильний підхід написати спиновий контролер для футбольного робота?


14

Уявіть, що програмуєте футбольного робота на 3 колеса. Який тип контролера ви використовували б для його спінінгу? П? ПІД?

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

Я використовую крокові двигуни для свого робота, а не сервоприводи, тому мені потрібно реалізувати це у своєму програмному забезпеченні!

Я вже написав зразок контролера типу P і рух досить гарний. Але я хотів би зробити це краще, якщо можливо. Код такий:

void spinSpeed(int devidedValue, int addedValue, int correction) {

    if(degree<correction && degree>-correction) {
        motorSpeed = 0;
    } else {
        if(degree > 0) {
            motorSpeed = ((degree)/(devidedValue) + (addedValue));
        } else {
            motorSpeed = ((degree)/(devidedValue) - (addedValue));  
        }
    }
}

correctionявляє собою дальність, в якій робот не має руху. degreeце число між -127 і 128, яке повертається з циркуля. motorSpeedє числом від 0 до 255, яке застосовується до ШІМ.


Імовірно, ця рутина виконується кожного разу, коли компаси генерують нове значення degree?
Марк Бут

@MarkBooth Я маю свій код через деякий час (1), тому в кожному циклі він отримує значення від компаса, надає його функції, а потім застосовує результат до двигунів.
Miro Markaravanes

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

Я не використовую сервоприводи. Я використовую ступінчасті двигуни, тому в моторі вже немає такої поведінки.
Miro Markaravanes

2
Привіт Міро, при обміні стеками краще відредагувати своє запитання у відповіді на запитання в коментарях, щоб таким чином коментарі можна було прибрати (видалити), щоб вони не відволікали від самого питання.
Марк Бут

Відповіді:


7

Важливо пам’ятати про цикл управління PID - це те, що кожен термін призначений для домінування над контролем у різний час під час переміщення.

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

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

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

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

Через ці фактори ви не отримаєте мало користі від впровадження повного циклу PID, якщо ви також не плануєте профіль швидкості з чіткими фазами прискорення, круїзу та уповільнення.

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

Для отримання додаткової інформації про різницю між точністю, повторюваністю та роздільною здатністю див. Цей відмінний опис . У вашому випадку ваша роздільна здатність - ваш датчик компаса, в той час як обидві точність, повторюваність, швидше за все, обмежені вашим correctionзначенням, оскільки, якщо correctionзначення більше, ніж ваше дозвіл компаса, ви викидаєте частину своєї позиційної точності в обмін на можливість вимкніть мотор, коли ви поруч.


8

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

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


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