Sadržaj:

Samobalansirajući robot - PID kontrolni algoritam: 3 koraka
Samobalansirajući robot - PID kontrolni algoritam: 3 koraka

Video: Samobalansirajući robot - PID kontrolni algoritam: 3 koraka

Video: Samobalansirajući robot - PID kontrolni algoritam: 3 koraka
Video: Overview of Syncopal Disorders 2024, Novembar
Anonim
Samo balansirajući robot - PID kontrolni algoritam
Samo balansirajući robot - PID kontrolni algoritam

Ovaj projekt je zamišljen jer sam bio zainteresiran za saznanje više o kontrolnim algoritmima i kako učinkovito implementirati funkcionalne PID petlje. Projekt je još uvijek u fazi razvoja jer Bluetooth modul tek treba biti dodat, što će omogućiti kontrolu nad robotom sa pametnog telefona s omogućenim Bluetooth -om.

Korišteni istosmjerni motori N20 bili su relativno jeftini i stoga imaju znatnu količinu igre. To dovodi do male količine trzanja jer motori prevladavaju „labavost“jer primjenjuje okretni moment na kotače. Stoga je gotovo nemoguće postići savršeno glatko kretanje. Kod koji sam napisao je prilično jednostavan, ali efikasno demonstrira mogućnosti PID algoritma.

Sažetak projekta:

Šasija robota je 3D štampana pomoću štampača Ender 3 i dizajnirana je za međusobno prešanje.

Robotom upravlja Arduino Uno koji uzima podatke senzora iz MPU6050 i kontrolira istosmjerne motore putem vanjskog upravljačkog programa motora. Radi na 7,4V, 1500mAh bateriji. Vozač motora regulira ovo na 5V za napajanje Arduina i napaja 7.4V motore.

Softver je napisan od nule uz pomoć biblioteka 'Arduino-KalmanFilter-master' i 'Arduino-MPU6050-master' iz gitHub-a.

Potrošni materijal:

  • 3D štampani delovi
  • Arduino UNO
  • MPU6050 6-osni osjetnik
  • DC vozač motora
  • N20 DC motori (x2)
  • 9V baterija

Korak 1: Izrada robota

Robot Build
Robot Build
Robot Build
Robot Build
Robot Build
Robot Build

Štampanje i montaža

Cijela konstrukcija bi trebala biti uklopljena pritiskom, ali koristio sam super ljepilo za pričvršćivanje komponenti kako bi robot bio potpuno čvrst pri balansiranju.

Dizajnirao sam dijelove u Fusion 360 i optimizirao svaki dio za štampanje bez nosača kako bi se omogućila stroža odstupanja i čistija površina.

Postavke korištene na pisaču Ender 3 bile su: 0,16 mm visine slojeva @ 40% ispune za sve dijelove.

Korak 2: Robot za 3D štampanje

Robot za 3D štampanje
Robot za 3D štampanje

Šasija (x1)

Lijevi kotač (x2)

Lijevo kućište motora (x2)

Arduino kućište (x1)

Korak 3: Algoritam PID kontrole

Algoritam PID kontrole
Algoritam PID kontrole

Napisao sam PID kontrolni algoritam od nule koristeći biblioteke 'Arduino-KalmanFilter-master' i 'Arduino-MPU6050-master' sa gitHub-a.

Pretpostavka Algoritma je sljedeća:

  • Pročitajte neobrađene podatke sa MPU6050
  • Upotrijebite Kalmanov filter za analizu podataka i sa žiroskopa i sa akcelerometra kako biste poništili netočnosti u očitanjima žiroskopa zbog ubrzanja senzora. Ovo vraća relativno uglađenu vrijednost visine senzora u stupnjevima na dvije decimale.
  • Izračunajte grešku u kutu, to jest: kut između senzora i zadane vrijednosti.
  • Izračunajte proporcionalnu grešku kao (Konstanta proporcionalnosti x greška).
  • Izračunajte integralnu grešku kao tekući zbir (konstanta integracije x greška).
  • Izračunaj grešku izvedenice kao konstantu kao [(Diferencijalna konstanta) x (Promjena greške / Promjena vremena)]
  • Zbrojite sve greške kako biste dobili izlaznu brzinu koja se šalje motorima.
  • Izračunajte smjer okretanja motora na osnovu predznaka kuta greške.
  • Petlja će raditi neograničeno dugo i nadograđivat će se na izlazu kako ulaz varira. To je povratna sprega, koja koristi izlazne vrijednosti kao nove ulazne vrijednosti za sljedeću iteraciju.

Posljednji korak je podešavanje parametara Kp, Ki & Kd PID petlje.

  1. Dobro polazište je polako povećavati Kp sve dok robot ne oscilira oko točke ravnoteže i ne uhvati pad.
  2. Zatim pokrenite Kd na oko 1% vrijednosti Kp i polako povećavajte dok oscilacije ne nestanu i robot glatko klizi kada se pritisne.
  3. Konačno, počnite s Ki oko 20% Kp i mijenjajte se sve dok robot "ne prekorači" zadanu vrijednost kako bi aktivno uhvatio pad i vratio se u vertikalu.

Preporučuje se: