Как правильно написать контроллер вращения для футбольного робота?

14

Представьте себе программирование трехколесного футбольного робота. Какой тип контроллера вы бы использовали для его вращения? П? PID?

Цель этого контроллера - заставить робот стоять под определенным углом (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, которое применяется к ШИМ.

Миро Маркараванес
источник
Предположительно, эта процедура запускается каждый раз, когда compas генерирует новое значение для degree?
Марк Бут
@MarkBooth У меня есть код некоторое время (1), поэтому в каждом цикле он получает значение от компаса, передает его функции, а затем применяет результат к двигателям.
Миро Маркараванес
Я бы исследовал, какой контроллер использует сервопривод, поскольку вы пытаетесь дублировать поведение сервопривода в программном обеспечении.
Крис Лапланте
Я не использую сервоприводы. Я использую шаговые двигатели, поэтому в двигателе такого поведения уже нет.
Миро Маркараванес
2
Привет Миро, на стеке обмена лучше отредактировать свой вопрос в ответ на вопросы в комментариях, чтобы комментарии можно было убирать (удалять), чтобы они не отвлекали от самого вопроса.
Марк Бут

Ответы:

7

Важно помнить о цикле управления ПИД- регуляторами в том, что каждый член должен доминировать в управлении в разное время во время движения.

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

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

Если вы используете регулятор скорости, а не регулятор крутящего момента, то производный термин может фактически быть скрыт внутри вашего регулятора скорости и не доступен напрямую для вашего ПИД-регулятора. Это может упростить управление (обычно оно будет ускоряться настолько быстро, насколько это возможно, до желаемой скорости или максимальной скорости, в зависимости от того, что ниже), но также может сделать его менее предсказуемым. Часто чрезмерно агрессивный D (или P) член может привести к тому, что он входит в предельный цикл (часто неправильно называемый резонанс или колебание из-за звука двигателей, гудящих или даже кричащих в этом состоянии, хотя предельный цикл является гораздо более точным описанием ).

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

Благодаря этим факторам вы мало выиграете от реализации полного цикла ПИД, если только вы не планируете в профиле скорости с четко выраженными фазами ускорения, круиза и замедления.

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

Для получения дополнительной информации о разнице между точностью, повторяемостью и разрешением см. Это превосходное описание . В вашем случае ваше разрешение - это ваш датчик компаса, в то время как точность и повторяемость, скорее всего, ограничены вашим correctionзначением, поскольку, если correctionзначение больше, чем ваше разрешение компаса, вы теряете часть своей точности позиционирования в обмен на возможность выключите мотор, когда будете рядом.

Марк Бут
источник
8

ПИД-регулятор был бы лучшим, используя компас, тогда это относительно простая задача - получить подшипник вашего робота и сравнить его с подшипником, который вы хотите достичь, и использовать некоторые методы настройки ПИД-регулятора для достижения плавного поворота, чтобы Ваш желаемый заголовок. Этот подход также может применяться для точного вращения на заданную величину.

Я уже занимался некоторыми роботами в этой области, это то, что мы использовали в нашем роботе, выполняя не слишком отличную задачу от вашей ...

Njdart
источник
1
Спасибо за Ваш ответ. Я хотел принять ответ, но я хотел бы видеть больше ответов, поэтому я приму, когда было больше ответов;)
Миро Маркараванес