Innholdsfortegnelse:

Selvbalanserende robot - PID -kontrollalgoritme: 3 trinn
Selvbalanserende robot - PID -kontrollalgoritme: 3 trinn

Video: Selvbalanserende robot - PID -kontrollalgoritme: 3 trinn

Video: Selvbalanserende robot - PID -kontrollalgoritme: 3 trinn
Video: ESIII Driving 2 --hjuls selvbalanserende kjøretøy 2024, November
Anonim
Selvbalanserende robot - PID -kontrollalgoritme
Selvbalanserende robot - PID -kontrollalgoritme

Dette prosjektet ble utviklet fordi jeg var interessert i å lære mer om kontrollalgoritmer og hvordan jeg effektivt kan implementere funksjonelle PID -løkker. Prosjektet er fortsatt i utviklingsfasen ettersom en Bluetooth -modul ennå ikke skal legges til, noe som vil tillate kontroll over roboten fra en Bluetooth -aktivert smarttelefon.

N20 DC -motorene som ble brukt var relativt billige, og har derfor mye spill i dem. Dette fører til en liten rykk når motorene overvinner "slakken" ettersom det påfører dreiemoment på hjulene. Derfor er det nesten umulig å oppnå perfekt jevn bevegelse. Koden jeg har skrevet er rimelig enkel, men demonstrerer effektivt funksjonene til PID -algoritmen.

Prosjektoppsummering:

Chassiset til roboten er 3D-trykt med en Ender 3-skriver og er designet for å passe sammen.

Roboten styres av en Arduino Uno som tar sensordata fra MPU6050 og styrer likestrømsmotorene gjennom en ekstern motordriver. Den går på et 7,4V, 1500mAh batteri. Motordriveren regulerer dette til 5V for å drive Arduino og leverer 7,4V til motorene.

Programvaren ble skrevet fra bunnen av ved hjelp av bibliotekene 'Arduino-KalmanFilter-master' og 'Arduino-MPU6050-master' fra gitHub.

Rekvisita:

  • 3D -trykte deler
  • Arduino UNO
  • MPU6050 6-akse sensor
  • D. C Motor Driver
  • N20 DC motorer (x2)
  • 9V batteri

Trinn 1: Robotbygg

Robotbygg
Robotbygg
Robotbygg
Robotbygg
Robotbygg
Robotbygg

Trykk og montering

Hele bygget skal være presspasset, men jeg har brukt superlim for å sikre komponentene for å sikre at roboten er helt stiv når den balanserer.

Jeg har designet delene i Fusion 360 og har optimalisert hver del for å skrive ut uten støtter for å gi strengere toleranser og en renere overflatebehandling.

Innstillingene som ble brukt på Ender 3 -skriveren var: 0,16 mm laghøyder @ 40% utfylling for alle deler.

Trinn 2: 3D -utskriftsrobot

3D -utskriftsrobot
3D -utskriftsrobot

Chassis (x1)

Venstre hjul (x2)

Venstre motorhus (x2)

Arduino -deksel (x1)

Trinn 3: PID -kontrollalgoritme

PID -kontrollalgoritme
PID -kontrollalgoritme

Jeg har skrevet en PID-kontrollalgoritme fra bunnen av ved hjelp av bibliotekene 'Arduino-KalmanFilter-master' og 'Arduino-MPU6050-master' fra gitHub.

Forutsetningen for algoritmen er som følger:

  • Les rådata fra MPU6050
  • Bruk Kalman Filter til å analysere data fra både gyroskop og akselerometer for å avbryte unøyaktigheter i gyroskopavlesninger på grunn av akselerasjon av sensoren. Dette gir en relativt jevnet verdi for sensorens tonehøyde i grader til to desimaler.
  • Beregn Error i vinkelen, dvs.: Vinkelen mellom sensoren og settpunktet.
  • Beregn proporsjonal feil som (konstant av proporsjonalitet x feil).
  • Beregn integralfeil som driftssummen av (Konstant av integrasjon x feil).
  • Beregn derivatfeil som konstant som [(differensieringskonstant) x (endring i feil / endring i tid)]
  • Sum alle feil for å gi hastigheten som skal sendes til motorer.
  • Beregn hvilken retning motorene skal dreies basert på tegnet på feilvinkelen.
  • Sløyfen vil løpe på ubestemt tid og bygge på utgangen ettersom inngangen varierer. Det er en tilbakemeldingssløyfe, som bruker utgangsverdiene som de nye inngangsverdiene for neste iterasjon.

Det siste trinnet er å Tune PID loop Kp, Ki & Kd parametere.

  1. Et godt utgangspunkt er å sakte øke Kp til roboten svinger rundt balansepunktet og kan ta et fall.
  2. Start deretter Kd med rundt 1% verdien av Kp og øk sakte til oscillasjonene forsvinner og roboten glir jevnt når den skyves.
  3. Til slutt starter du med Ki på rundt 20% av Kp og varierer til roboten "overskrider" settpunktet for å aktivt få et fall og gå tilbake til vertikal.

Anbefalt: