Съдържание:

Самобалансиращ се робот на две колела: 7 стъпки
Самобалансиращ се робот на две колела: 7 стъпки

Видео: Самобалансиращ се робот на две колела: 7 стъпки

Видео: Самобалансиращ се робот на две колела: 7 стъпки
Видео: 30 Amazing Gadgets You Should See on Amazon 2024, Ноември
Anonim
Самобалансиращ се робот на две колела
Самобалансиращ се робот на две колела

Тази инструкция ще премине през процеса на проектиране и изграждане на самобалансиращ се робот. Като бележка, просто искам да кажа, че самобалансиращите се роботи не са нова концепция и са създадени и документирани от други. Искам да използвам тази възможност да споделя с вас моята интерпретация на този робот.

Какво е самобалансиращ се робот?

Самобалансиращият се робот е система, която използва инерционни измервателни данни, събрани от вграден сензор, за непрекъснато регулиране на позицията си, за да се държи изправено.

Как работи?

Една проста аналогия за разглеждане е обърнато махало. Когато центърът на масата е над точката на завъртане. В нашия случай обаче ние ограничаваме махалото до 1 степен на свобода, като имаме една ос на въртене, в нашия случай оста на въртене на двете колела. Тъй като всякакъв вид смущения ще доведат до падане на робота, ние се нуждаем от метод за активно поддържане на робота в баланс. Тук влиза в действие нашият алгоритъм със затворен контур (PID контролер), като знаем в коя посока пада нашият робот, можем да регулираме посоката на въртене на нашите двигатели, за да поддържаме системата балансирана.

Как работи алгоритъмът със затворен цикъл?

Основният принцип за поддържане на баланса на робота е, че ако роботът пада напред, той ще компенсира, като премести долната част на робота напред, за да се хване и следователно да остане вертикален. По същия начин, ако роботът пада назад, той ще компенсира, като премести дъното на робота назад, за да се хване.

Така че, тук трябва да направим две неща, първо, трябва да изчислим ъгъла на наклон (Roll), който роботът изпитва и в резултат на това трябва да контролираме посоката на въртене на двигателите.

Как ще измерим ъгъла на наклона?

За измерване на ъгъла на наклон ще използваме инерционна измервателна единица. Тези модули включват акселерометър и жироскоп.

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

Проблемът с използването на такива сензори обаче е, че:

  • Акселерометърът е много шумен, но е постоянен във времето, ъгълът варира при внезапни хоризонтални движения
  • Стойността на жироскопа, от друга страна, ще се отклонява с течение на времето, но първоначално е доста точна

За тази инструкция няма да прилагам филтър, а използвам вградената цифрова обработка на движението (DMP). Други са използвали допълващ филтър, за да получат плавен сигнал, можете да изберете кой метод ви харесва. тъй като роботът балансира с двете изпълнения.

Консумативи

Части:

  1. Arduino Pro Mini 3.3V 8 с 8 Mhz ATMEGA328
  2. FT232RL 3.3V 5.5V FTDI модул USB към TTL сериен адаптер
  3. Модул GY-521 с MPU-6050
  4. Чифт N20 микроредукторен двигател 6V - 300rpm
  5. L298N шофьор на мотор
  6. LM2596S конвертор за постоянен ток в постоянен ток
  7. Батерия (Акумулаторна 9.7V литиево-йонна батерия)
  8. Каишка за батерията
  9. Две прототипни печатни платки
  10. Мъжки и женски заглавни щифтове джъмпер проводници

Инструменти:

  1. Поялник и спойка
  2. Найлонов шестостен дистанционер
  3. Комплект прецизни отвертки
  4. 3D принтер

Стъпка 1: Строителство

Тъй като имах достъп до 3D принтер, реших да отпечатам 3D шасито и да използвам стойки, за да свържа всичко заедно.

Роботът се състои от 4 слоя

  1. Долният слой свързва двигателите и има точки за монтаж за модула на драйвера на двигателя L298N
  2. Следващият слой съдържа прототипната платка с Arduino pro mini и заглавки, запоени към нея
  3. Третият слой монтира IMU
  4. Най -горният слой, който наричам „слой на бронята“, побира батерията, доларовия конвертор и паричния превключвател

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

Стъпка 2: Окабеляване

Електрически инсталации
Електрически инсталации

Запоях няколко пинти за женски заглавки към перф дъска, за да съвпадна с щифтовете за заглавки Arduino pro mini. След това запоявах мъжки заглавни щифтове на дъската, за да позволя достъп до I/O. Останалите компоненти бяха монтирани към 3D отпечатаната рамка и свързани с помощта на джъмперни проводници.

Стъпка 3: Теория на контрола

Сега преминаваме към същността на проекта. За да поддържаме робота балансиран, трябва да генерираме подходящ управляващ сигнал, за да задвижваме двигателите в правилната посока и с правилната скорост, за да поддържаме робота балансиран и стабилен. За да направим това, ще използваме популярен алгоритъм за управление, известен като PID контролер. Както акронимът предполага, че има три термина за този контролер, това са пропорционалните, интегралните и производни термини. Всеки от тях е придружен от коефициенти, които определят влиянието им върху системата. Често най-отнемащата време част от внедряването на контролера е настройката на печалбите за всяка уникална система, за да се получи най-оптималната реакция.

  • Пропорционалният термин директно умножава грешката, за да даде резултат, така че колкото по -голяма е грешката, толкова по -голям е отговорът
  • Интегралният термин генерира отговор въз основа на натрупване на грешката за намаляване на стационарната грешка. Колкото по -дълго системата е небалансирана, толкова по -бързо двигателите ще реагират
  • Производният термин е дериват на грешката, която се използва за прогнозиране на бъдещия отговор и по този начин намалява колебанията поради превишаване на стационарното състояние.

Основният принцип на този алгоритъм е непрекъснато да се изчислява ъгълът на наклон, който е разликата между желаната позиция и текущата позиция, това е известно като грешка. След това той използва тези стойности на грешка и изчислява сумата от пропорционалните, интегралните и производни отговори, за да получи изход, който е управляващите сигнали, които се изпращат към двигателите. В резултат на това, ако грешката е голяма, управляващият сигнал, изпратен до двигателите, ще завърти двигателите с висока скорост, за да достигне балансирано състояние. По същия начин, ако грешката е малка, управляващият сигнал ще завърти двигателите с ниска скорост, за да поддържа балансиран робота.

Стъпка 4: Използване на MPU 6050

Библиотека MPU6050

github.com/jrowberg/i2cdevlib/tree/master/…

Калибриране на компенсиране Не всички сензори са точни копия един на друг. В резултат на това, ако тествате два MPU 6050, може да получите различни стойности за акселерометъра и жироскопа, когато сте поставени неподвижно на една и съща повърхност. За да преодолеем това постоянно изместване на ъгъла, трябва да отпразнуваме всеки сензор, който използваме. Изпълнение на този скрипт:

www.i2cdevlib.com/forums/topic/96-arduino-…

написано от Луис Роденас, ще получим компенсиране. Грешките при отместването могат да бъдат елиминирани чрез дефиниране на стойностите на отместване в рутината setup ().

Използване на цифров процесор за движение

MPU6050 съдържа DMP (цифров процесор за движение).

Какво е DMP? Можете да мислите за DMP като вграден микроконтролер, който обработва сложното движение от 3-осния жироскоп и 3-осния акселерометър на борда на mpu6050, използвайки свои собствени алгоритми за синтез на движение. Разтоварване на обработката, която иначе би била извършена от Arduino

Как се използва? За да разберете как да използвате DMP, преминете през примерната скица MPU6050_DMP6, която се доставя с библиотеката MPU6050 (в Arduino IDE: Файл-> Пример-> MPU6050-> MPU6050_DMP6). Това също е добра възможност да проверите дали вашият сензор действително работи и дали окабеляването е правилно

Стъпка 5: Кодиране

Използвах Arduino IDE и FTDI интерфейс за програмиране на Arduino pro mini.

Използвайки примерната скица (MPU6050_DMP6), която се доставя с библиотеката MPU6050 като основен код, добавих функции PID () и MotorDriver ().

Добавете библиотеката

  • MPU6050: За да използваме сензора MPU6050, ще трябва да изтеглим библиотеката за разработчици на I2C от Джеф Роуберг и да я добавим към папката „библиотеки“на Arduino, която се намира в програмните файлове на вашия компютър.
  • Wire: Ние също се нуждаем от библиотеката Wire, за да можем да комуникираме с I2C устройства.

Псевдо код

Включете библиотеки:

  • Wire.h
  • MPU6050
  • I2Cdev.h

Инициализирайте променливи, константи и обекти

Настройвам ()

  • Задайте пинов режим за управление на двигатели
  • Задайте режим на закрепване за светодиода за състоянието
  • Инициализирайте MPU6050 и задайте стойности на отместване

PID ()

Изчислете стойността на PID

MotorDriver (PID отговор)

Използвайте PID стойност за контрол на скоростта и посоката на двигателите

Цикъл ()

  • Вземете данни от DMP
  • Извикайте PID () функция на MotorDriver ()

Стъпка 6: Процедура за настройка на PID

Това е най -досадната част от проекта и изисква малко търпение, освен ако нямате голям късмет. Ето стъпките:

  1. Задайте I и D термина на 0
  2. Като държите робота, регулирайте P така, че роботът да започне да се колебае около позицията на баланса
  3. С зададен Р, увеличете I, така че роботът да ускорява по -бързо, когато не е в равновесие. Когато P и I са правилно настроени, роботът трябва да може да се самобалансира поне за няколко секунди, с известно колебание
  4. И накрая, увеличете D, намалете трептенето

Ако първият опит не даде задоволителни резултати, повторете стъпките с различна стойност на P. Също така имайте предвид, че след това можете да настроите фино PID стойностите, за да увеличите допълнително производителността. Стойностите тук зависят от хардуера, не се изненадвайте, ако получите много големи или много малки PID стойности.

Стъпка 7: Заключение

Използваните микроредукторни двигатели бавно реагираха на големи смущения и тъй като системата беше твърде лека, нямаше достатъчно инерция, за да постигне желания ефект на махалото, така че ако роботът се наведе напред, той просто ще се наведе под ъгъл и ще се втурне напред. И накрая, 3D отпечатаните колела бяха лош избор, тъй като продължават да се плъзгат.

Предложения за подобрение:

  • По -бързите двигатели с по -висок въртящ момент, т.е.за двигатели с постоянен ток е по -високо напрежението по -висок въртящ момент
  • вземете по -тежка батерия или просто преместете масата малко по -високо
  • Сменете 3D отпечатаните колела с гумени, за да получите повече сцепление

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