Съдържание:

Самобалансиращ се робот - ПИД контрол алгоритъм: 3 стъпки
Самобалансиращ се робот - ПИД контрол алгоритъм: 3 стъпки

Видео: Самобалансиращ се робот - ПИД контрол алгоритъм: 3 стъпки

Видео: Самобалансиращ се робот - ПИД контрол алгоритъм: 3 стъпки
Видео: Уроки Ардуино. ПИД регулятор 2024, Ноември
Anonim
Самобалансиращ се робот - ПИД контрол алгоритъм
Самобалансиращ се робот - ПИД контрол алгоритъм

Този проект е замислен, защото имах интерес да науча повече за контролните алгоритми и как ефективно да внедря функционални PID цикли. Проектът все още е във фаза на разработка, тъй като тепърва ще бъде добавен Bluetooth модул, който ще позволи контрол над робота от смартфон с Bluetooth.

Използваните постояннотокови двигатели N20 бяха сравнително евтини и следователно имат значително количество игра в тях. Това води до малък шум, тъй като двигателите преодоляват „отпускането“, тъй като прилагат въртящ момент към колелата. Следователно е почти невъзможно да се постигне идеално гладко движение. Кодът, който написах, е сравнително прост, но ефективно демонстрира възможностите на PID алгоритъма.

Обобщение на проект:

Шасито на робота е 3D отпечатано с помощта на принтер Ender 3 и е проектирано да се прилепва заедно.

Роботът се управлява от Arduino Uno, който взема сензорни данни от MPU6050 и контролира DC двигателите чрез външен драйвер на двигателя. Той работи от 7.4V, 1500mAh батерия. Шофьорът на двигателя регулира това до 5V за захранване на Arduino и захранва 7.4V към двигателите.

Софтуерът е написан от нулата с помощта на библиотеките „Arduino-KalmanFilter-master“и „Arduino-MPU6050-master“от gitHub.

Консумативи:

  • 3D отпечатани части
  • Arduino UNO
  • MPU6050 6-осен сензор
  • DC шофьор на мотор
  • N20 DC двигатели (x2)
  • 9V батерия

Стъпка 1: Изграждане на робот

Изграждане на робот
Изграждане на робот
Изграждане на робот
Изграждане на робот
Изграждане на робот
Изграждане на робот

Печат и монтаж

Цялата конструкция трябва да бъде прилепнала, но използвах суперлепило, за да закрепя компонентите, за да гарантирам, че роботът е напълно твърд при балансиране.

Проектирах частите във Fusion 360 и оптимизирах всяка част за печат без опори, за да се осигурят по -строги допустими отклонения и по -чисто повърхностно покритие.

Настройките, използвани на принтера Ender 3 бяха: 0,16 мм височина на слоя при 40% пълнене за всички части.

Стъпка 2: Робот за 3D печат

Робот за 3D печат
Робот за 3D печат

Шаси (x1)

Ляво колело (x2)

Ляв корпус на двигателя (x2)

Калъф Arduino (x1)

Стъпка 3: Алгоритъм за PID контрол

PID контролен алгоритъм
PID контролен алгоритъм

Написах алгоритъм за PID контрол от нулата, използвайки библиотеките „Arduino-KalmanFilter-master“и „Arduino-MPU6050-master“от gitHub.

Предпоставката на алгоритъма е следната:

  • Прочетете необработени данни от MPU6050
  • Използвайте Kalman Filter, за да анализирате данни както от жироскопа, така и от акселерометъра, за да отмените неточностите в показанията на жироскопа поради ускорение на сензора. Това връща относително изгладена стойност за височината на сензора в градуси до две десетични знака.
  • Изчислете грешката в ъгъла, т.е.: ъгълът между сензора и зададената точка.
  • Изчислете пропорционалната грешка като (Константа на пропорционалност x грешка).
  • Изчислете интегралната грешка като текуща сума от (Константа на интеграция x грешка).
  • Изчислете производната грешка като константа като [(Константа на диференциация) x (Промяна на грешка / Промяна на времето)]
  • Сумирайте всички грешки, за да дадете скоростта, която трябва да бъде изпратена до двигателите.
  • Изчислете в каква посока да завъртите двигателите въз основа на знака на ъгъла на грешка.
  • Цикълът ще работи неограничено и ще надгражда изхода, тъй като входът варира. Това е контур за обратна връзка, използващ изходните стойности като новите входни стойности за следващата итерация.

Последната стъпка е да настроите параметрите на PID контура Kp, Ki & Kd.

  1. Добра отправна точка е бавното увеличаване на Kp, докато роботът се колебае около точката на баланс и може да хване падане.
  2. След това стартирайте Kd на около 1% от стойността на Kp и бавно увеличавайте, докато трептенията изчезнат и роботът се плъзга гладко при натискане.
  3. И накрая, започнете с Ki около 20% от Kp и променяйте, докато роботът "прескочи" зададената стойност, за да улови активно падане и да се върне във вертикала.

Препоръчано: