Я пытаюсь построить двухколесный балансировочный робот для развлечения. У меня есть все оборудование, собранное и собранное, и я думаю, что оно также закодировано. Я использую IMU с гироскопом и акселерометрами, чтобы найти угол наклона с помощью дополнительного фильтра для сглаживания сигнала. Входной сигнал от IMU кажется довольно плавным, так как дисперсия менее 0,7 или — фактический угол наклона.
Моя частота дискретизации IMU составляет 50 Гц, и я делаю PID расчет на 50 Гц тоже, который, я думаю, должен быть достаточно быстрым.
В основном я использую библиотеку PID, найденную на PID библиотека .
Когда я устанавливаю значение P на что-то низкое, колеса вращаются в правильном направлении.
Когда я устанавливаю значение P на что-то большое, я получаю вывод, такой как график.
Из графика видно, что ваша система не стабильна.
Я надеюсь, что вы протестировали каждую подсистему своего робота, прежде чем приступить к настройке. Это означает, что датчики и исполнительные механизмы реагируют правильно и с приемлемой ошибкой. Однажды каждый подсистема правильно откалиброван на наличие внешней ошибки. Вы можете начать настройку.
После того, как это сделано, вы можете начать с действительного значения P, которое может быть (0,5), чтобы сначала достичь правильного времени отклика, вам нужно будет провести здесь несколько испытаний, постепенно увеличивая их значение I, чтобы уменьшить ошибку устойчивого состояния, если таковые имеются, и используйте D только тогда, когда требуется (в случае колебаний).
Я бы посоветовал обрабатывать P, I и D один за другим, а не настраивать все одновременно.
Также во время тестирования вам нужно будет постоянно контролировать данные вашего датчика и привода, чтобы увидеть, находятся ли они в допустимом диапазоне.
Как писал Praks, ваша система выглядит так, как будто она нестабильна или, возможно, незначительно стабильна.
Как правило, двухколесных роботов трудно контролировать, поскольку они нестабильны без контроллера.
Сначала я лично попробовал бы контроллер PD, и если у вас есть проблемы с точностью заданного значения, я бы использовал PID, но просто помните, что если вы хотите иметь дифференциальное усиление в вашем контроллере (часть D), крайне важно, чтобы вы есть очень плавный сигнал.
Кроме того, значения контроллера в значительной степени зависят от вашей аппаратной настройки (распределение веса и веса робота, коэффициенты двигателя и уровни напряжения) и единиц измерения, которые вы используете внутри своего программного обеспечения для сигналов управления (например, мВ В, градусы / радианы ). Это влечет за собой то, что почти никто не сможет угадать правильные параметры для вас.
Что мог бы сделать инженер по управлению, так это сделать математическую модель робота и проанализировать расположение полюсов / нулей.
Если у вас есть опыт работы с теорией управления, вы можете взглянуть на следующую статью и посмотреть, имеет ли она для вас смысл.
http://dspace.mit.edu/bitstream/handle/1721.1/69500/775672333.pdf
Если вы еще этого не сделали, я бы предложил вам выполнить поиск по условиям Arduino PID (очевидное предположение, но многие люди шли по этому пути). Я помню, когда писалась эта библиотека PID, автор опубликовал немало учебников и т. Д. (пример). И наткнулся на это PIDAutotuneLibrary.
Я написал свои собственные процедуры PID, но у меня также была чертова настройка времени, и я так и не понял это правильно.