ПИД-регулятор очень чувствителен к временным шагам
Я использую ПИД-контроллеры в коде игры все время. Будь то для контроля AI или камеры управления.
Код, который я использую для своего ПИД-регулятора, прост. Я определяю производную ошибки просто как:
float derivativeError = ( error - p.previousError ) / dt;
И интеграл ошибки с использованием фильтра нижних частот по значениям ошибки:
p.integralError = ( 1.0f - dt ) * p.integralError + dt * error;
Я обновляю контроллеры с фиксированным временным шагом, скажем, 1/60. Так что используйте эту дельту-т для расчета ошибок I и D.
Моя проблема в том, что если я когда-либо изменю свой фиксированный временной шаг, например, перейду на 120 Гц вместо 60 Гц, я обнаружу, что мои контроллеры должны быть полностью перенастроены.
Это известная проблема с кодом контроллера PID? Это нормально для ПИД-контроллеров, чтобы быть настолько чувствительным к частоте обновления?