Spin7ion писал(а):Скорость регулируется PID регулятором, зависит от отклонения от положения равновесия. Разве не так надо?
Нет. Скорость не регулируется - твоим пидом наоборот регулируется положение равновесия при помощи скорости, а вернее даже даже не скорости, а ШИМа. Поэтому скорость и получается какая попало. Попробуй вот так, balanceAt преврати в переменную:
- Код: Выделить всё • Развернуть
balanceAt = updatePID(last_speed, speedAt);
pid=updatePID(actualAngle,balanceAt);
lMotorSpeed=-pid;
rMotorSpeed=-pid;
last_speed=-pid;
Это не совсем корректно, но должно помочь от беспорядочного укатывания. Первый PID должен быть сильно медленнее второго, добавь в параметры updatePID ссылочку на набор коэффициентов, чтоб функция одна, а регуляторов было два разных. И следи за периодом цикла - для ПИД это очень важно.