Inhoudsopgave:

Zelfbalancerende robot - PID-regelalgoritme - Ajarnpa
Zelfbalancerende robot - PID-regelalgoritme - Ajarnpa

Video: Zelfbalancerende robot - PID-regelalgoritme - Ajarnpa

Video: Zelfbalancerende robot - PID-regelalgoritme - Ajarnpa
Video: Silverlit MACROBOT Demo 2024, November
Anonim
Zelfbalancerende robot - PID-regelalgoritme
Zelfbalancerende robot - PID-regelalgoritme

Dit project is bedacht omdat ik geïnteresseerd was in meer informatie over regelalgoritmen en hoe ik functionele PID-lussen effectief kon implementeren. Het project bevindt zich nog in de ontwikkelingsfase omdat er nog een Bluetooth-module moet worden toegevoegd waarmee de robot kan worden bestuurd vanaf een smartphone met Bluetooth.

De gebruikte N20 DC-motoren waren relatief goedkoop en hebben dus veel speling. Dit leidt tot een kleine schok als de motoren de 'speling' overwinnen omdat het koppel op de wielen uitoefent. Daarom is het bijna onmogelijk om een perfect vloeiende beweging te bereiken. De code die ik heb geschreven is redelijk eenvoudig, maar demonstreert effectief de mogelijkheden van het PID-algoritme.

Project samenvatting:

Het chassis van de robot is 3D-geprint met een Ender 3-printer en is ontworpen om in elkaar te passen.

De robot wordt bestuurd door een Arduino Uno die sensorgegevens van de MPU6050 haalt en de DC-motoren bestuurt via een externe motordriver. Het werkt op een 7,4V, 1500mAh-batterij. De motordriver regelt dit naar 5V om de Arduino van stroom te voorzien en levert 7,4V aan de motoren.

De software is helemaal opnieuw geschreven met behulp van de 'Arduino-KalmanFilter-master' en 'Arduino-MPU6050-master' bibliotheken van gitHub.

Benodigdheden:

  • 3D-geprinte onderdelen
  • Arduino UNO
  • MPU6050 6-assige sensor
  • DC-motorstuurprogramma
  • N20 DC-motoren (x2)
  • 9V batterij

Stap 1: Robot bouwen

Robot bouwen
Robot bouwen
Robot bouwen
Robot bouwen
Robot bouwen
Robot bouwen

Afdrukken en monteren

De hele constructie moet op de pers passen, maar ik heb superlijm gebruikt om de componenten vast te zetten om ervoor te zorgen dat de robot volledig stijf is bij het balanceren.

Ik heb de onderdelen in Fusion 360 ontworpen en elk onderdeel geoptimaliseerd om zonder ondersteuning te kunnen printen, voor nauwere toleranties en een schonere oppervlakteafwerking.

De instellingen die op de Ender 3-printer werden gebruikt, waren: 0,16 mm laaghoogte bij 40% vulling voor alle onderdelen.

Stap 2: 3D-printrobot

3D-printrobot
3D-printrobot

Onderstel (x1)

Linker wiel (x2)

Motorbehuizing links (x2)

Arduino-behuizing (x1)

Stap 3: PID-regelalgoritme

PID-regelalgoritme
PID-regelalgoritme

Ik heb vanaf het begin een PID-controlealgoritme geschreven met behulp van de bibliotheken 'Arduino-KalmanFilter-master' en 'Arduino-MPU6050-master' van gitHub.

Het uitgangspunt van het algoritme is als volgt:

  • Lees onbewerkte gegevens van MPU6050
  • Gebruik Kalman Filter om gegevens van zowel de gyroscoop als de accelerometer te analyseren om onnauwkeurigheden in gyroscoopmetingen als gevolg van versnelling van de sensor te elimineren. Dit retourneert een relatief afgevlakte waarde voor de toonhoogte van de sensor in graden tot op twee decimalen.
  • Bereken de fout in de hoek, d.w.z.: de hoek tussen de sensor en het setpoint.
  • Bereken de proportionele fout als (constante van evenredigheid x fout).
  • Bereken Integrale Fout als de lopende som van (Constante van Integratie x fout).
  • Bereken de afgeleide fout zo constant als [(differentiatieconstante) x (verandering in fout / verandering in tijd)]
  • Tel alle fouten bij elkaar op om de snelheidsoutput te geven die naar de motoren moet worden gestuurd.
  • Bereken in welke richting de motoren moeten draaien op basis van het teken van de fouthoek.
  • De lus loopt voor onbepaalde tijd en bouwt voort op de uitvoer naarmate de invoer varieert. Het is een feedbacklus, waarbij de uitvoerwaarden worden gebruikt als de nieuwe invoerwaarden voor de volgende iteratie.

De laatste stap is het afstemmen van de PID-lus Kp, Ki & Kd-parameters.

  1. Een goed uitgangspunt is om Kp langzaam te verhogen totdat de robot rond het balanspunt oscilleert en een val kan opvangen.
  2. Start vervolgens Kd op ongeveer 1% van de waarde van Kp en verhoog langzaam totdat de oscillaties verdwijnen en de robot soepel glijdt wanneer hij wordt ingedrukt.
  3. Begin ten slotte met Ki rond 20% van Kp en varieer totdat de robot het instelpunt "overschrijdt" om actief een val op te vangen en terug te keren naar verticaal.

Aanbevolen: