au:kuk:пид_для_kk
Почему-то вращение управляется НЕ ПИДР
Схема однокоптера -
M1 CCW
|
|
.
M2 (Servo)
|
|
M5 ---- ---- M3
(Servo) | (Servo)
|
M4 (Servo)
итак,
//Пид-регулятор, желаемое положение RxInRoll, текущее - gyroADC[ROLL].
if (0) {
error = RxInRoll - gyroADC[ROLL];
integral[ROLL]+= error;
derivative = error - last_error[ROLL];
last_error[ROLL] = error;
RxInRoll+= error + (integral[ROLL] >> 2) + (derivative >> 2);
} else {
RxInRoll-= gyroADC[ROLL];
}
//применяем результат (MotorOut2 - константа)
MotorOut2+=RxInRoll;
Сразу бросается в глаза, что это НЕ ПИД-регулятор. Расстройка должна добавляться не к RxInRoll, а к gyroADC[ROLL], и уже этот результат заводИться на MotorOut2. Поэтому оригинальный код похож на ПИД-регулятор, но таким не является, например, если промоделировать в сравнении с нормальным ПИДР -

Здесь синяя линия - положения стиков, красная - как ведет к ним ПИДР, зеленая - «ПИДР» от КК. В принципе, одинаково, но если приблизить -

Когда вращение постоянно, то они совпадают по поведению, а вот если скорость вращения будет линейно расти, то будет разница, в примере ~0.15.
Много это или мало? В принципе пофигу, может, автор кода пожертвовал точностью в угоду простоте кода.
au/kuk/пид_для_kk.txt · Последнее изменение: 2022/07/23 05:13 — setproperty