Innehållsförteckning:

Self Balancing Robot - PID Control Algoritm: 3 steg
Self Balancing Robot - PID Control Algoritm: 3 steg

Video: Self Balancing Robot - PID Control Algoritm: 3 steg

Video: Self Balancing Robot - PID Control Algoritm: 3 steg
Video: PID Control: Arduino Self-Balancing Robot 2024, November
Anonim
Self Balancing Robot - PID Control Algoritm
Self Balancing Robot - PID Control Algoritm

Detta projekt är tänkt eftersom jag var intresserad av att lära mig mer om kontrollalgoritmer och hur man effektivt implementerar funktionella PID -slingor. Projektet är fortfarande i utvecklingsfas eftersom en Bluetooth -modul ännu inte ska läggas till som gör det möjligt att styra roboten från en Bluetooth -aktiverad smartphone.

N20 likströmsmotorerna som använts var relativt billiga och har därför mycket spel. Detta leder till en liten ryckning när motorerna övervinner "slack" eftersom det tillämpar vridmoment på hjulen. Därför är det näst intill omöjligt att uppnå perfekt jämn rörelse. Koden jag har skrivit är ganska enkel men demonstrerar effektivt PID -algoritmens funktioner.

Projekt sammanfattning:

Robotens chassi är 3D-tryckt med en Ender 3-skrivare och är utformad för att passa ihop.

Roboten styrs av en Arduino Uno som tar sensordata från MPU6050 och styr likströmsmotorerna genom en extern motordrivrutin. Den körs på ett 7,4V, 1500mAh batteri. Motorföraren reglerar detta till 5V för att driva Arduino och levererar 7,4V till motorerna.

Programvaran skrevs från grunden med hjälp av biblioteken "Arduino-KalmanFilter-master" och "Arduino-MPU6050-master" från gitHub.

Tillbehör:

  • 3D -tryckta delar
  • Arduino UNO
  • MPU6050 6-axlig sensor
  • D. C motorförare
  • N20 DC -motorer (x2)
  • 9V batteri

Steg 1: Robotbyggnad

Robotbyggnad
Robotbyggnad
Robotbyggnad
Robotbyggnad
Robotbyggnad
Robotbyggnad

Tryck och montering

Hela konstruktionen ska vara presspassad men jag har använt superlim för att säkra komponenterna för att säkerställa att roboten är helt stel vid balansering.

Jag har designat delarna i Fusion 360 och har optimerat varje del för att skriva ut utan stöd för att möjliggöra snävare toleranser och en renare ytfinish.

Inställningar som användes på Ender 3 -skrivaren var: 0,16 mm lagerhöjder @ 40% fyllning för alla delar.

Steg 2: 3D -utskriftsrobot

3D -utskriftsrobot
3D -utskriftsrobot

Chassi (x1)

Vänster hjul (x2)

Vänster motorhus (x2)

Arduino -fodral (x1)

Steg 3: PID -kontrollalgoritm

PID -kontrollalgoritm
PID -kontrollalgoritm

Jag har skrivit en PID-kontrollalgoritm från grunden med hjälp av biblioteken 'Arduino-KalmanFilter-master' och 'Arduino-MPU6050-master' från gitHub.

Grunden för algoritmen är följande:

  • Läs rådata från MPU6050
  • Använd Kalman -filter för att analysera data från både gyroskop och accelerometer för att avbryta felaktigheter i gyroskopavläsningar på grund av acceleration av sensorn. Detta ger ett relativt utjämnat värde för sensorns tonhöjd i grader till två decimaler.
  • Beräkna Error i vinkeln, dvs: Vinkeln mellan sensorn och börvärdet.
  • Beräkna proportionellt fel som (Constant of Proportionalality x error).
  • Beräkna integreringsfel som löpningssumma för (konstant av integration x fel).
  • Beräkna derivatfel som konstant som [(differentieringskonstant) x (förändring av fel / tidsändring)]
  • Summa alla fel för att ge den hastighetsutmatning som ska skickas till motorer.
  • Beräkna vilken riktning motorerna ska vridas utifrån tecknet på felvinkeln.
  • Slingan kommer att köras på obestämd tid och bygga på utgången när ingången varierar. Det är en återkopplingsslinga som använder utgångsvärdena som de nya ingångsvärdena för nästa iteration.

Det sista steget är att ställa in PID -loop Kp, Ki & Kd parametrar.

  1. En bra utgångspunkt är att långsamt öka Kp tills roboten oscillerar runt balanspunkten och kan få ett fall.
  2. Starta sedan Kd med cirka 1% av värdet på Kp och öka långsamt tills oscillationerna försvinner och roboten glider mjukt när den trycks.
  3. Slutligen, börja med Ki på cirka 20% av Kp och variera tills roboten "överskjuter" börvärdet för att aktivt fånga ett fall och återgå till vertikal.

Rekommenderad: