Это связано с тем, что, как следует из сообщения об ошибке, передаточная функция идеального компенсатора ПД не является "правильной" и не может быть представлена или смоделирована.
Чтобы обойти эту проблему,на практике принято иметь термин «примерный производный», чтобы вместо:
comp_pd = Kp + Kd*s
у вас было что-то вроде
comp_pd = Kp + Kd*s/(1+Tf*s)
Это соответствующий раздел документация по теме:
Так в вашем коде просто замените:
comp_pd = pid(Kp, Ki, Kd)
на
comp_pd = pid(Kp, Ki, Kd, Tf)
где Tf
мало, скажем 1e-3
, хотя вам, возможно, придется экспериментировать, пока вы не найдете правильное значение в зависимости от постоянной времени вашей системы.