ПИД-регулятор очень чувствителен к временным шагам

Я использую ПИД-контроллеры в коде игры все время. Будь то для контроля AI или камеры управления.

Код, который я использую для своего ПИД-регулятора, прост. Я определяю производную ошибки просто как:

float derivativeError = ( error - p.previousError ) / dt;

И интеграл ошибки с использованием фильтра нижних частот по значениям ошибки:

p.integralError = ( 1.0f - dt ) * p.integralError +  dt * error;

Я обновляю контроллеры с фиксированным временным шагом, скажем, 1/60. Так что используйте эту дельту-т для расчета ошибок I и D.

Моя проблема в том, что если я когда-либо изменю свой фиксированный временной шаг, например, перейду на 120 Гц вместо 60 Гц, я обнаружу, что мои контроллеры должны быть полностью перенастроены.

Это известная проблема с кодом контроллера PID? Это нормально для ПИД-контроллеров, чтобы быть настолько чувствительным к частоте обновления?

0 ответов

Другие вопросы по тегам