Stap 5: Evenwicht optimalisatie
En nu we bij het interessante deel komen-het verbeteren van de robot is het balanceren van prestaties. Ik had bepaalde ideeën over waar te beginnen op zoek, maar zoals bij elk systeem, is het moeilijk om te weten wat de variabelen Kruis afhankelijkheden zijn. Dus in plaats van te krijgen ook analytische, sprong ik.
Controle lus tijdsinterval
Ik begon door het variëren van de tijdsinterval waartegen de tegenrekening PID werd geëvalueerd. Ik heb de standaardperiode voor de Arduino 101 PWM op 2mS gemeten, en mijn vorige project had een waarde van 20 MS gebruikt, dus ik begon bij 5mS en het interval verdubbeld tot de robot niet kon evenwicht. Bij 5mS, de robot was in staat om evenwicht te brengen, maar het leek te zijn overdreven actief, en schommelde met een periode van ongeveer 120mS. Op 10mS, het was weer in staat om evenwicht te brengen, maar de oscillaties vertraagd tot 280mS. Bij 20mS, periode terug tot ongeveer 180mS de oscillerende geplukt, maar in plaats van actieve, leek het antwoord traag. Op 40mS het antwoord werd zelfs meer traag, de grillige balancing en de robot kon niet altijd om te verblijven evenwichtig. Mijn conclusie was dat terwijl het PID evaluatie interval zeker invloed op het gedrag van de robot uitoefenen kan, en inderdaad moest worden boven bepaalde minimale snelheid om het evenwicht te kunnen, was het niet het wondermiddel. Voor de rest van mijn testen heb ik gebruikt een 5mS controle lus interval.
Sensor fusion filter
Daarna verhuisde ik naar de sensor fusion filter. Waarom hebben we een filter fusion anyway? Die vraag te beantwoorden, moeten we onderzoeken het hart van een balancing systeem, de IMU (Inertial Measurement Unit). Een IMU bestaat uit twee soorten sensoren – een gyroscoop en een versnellingsmeter. De gyroscoop meet de hoekige snelheid van verandering of hoeksnelheid. Theoretisch kan een goede schatting van hoekige positie worden gegenereerd door de integratie van de output van de gyroscoop. Helaas, gyroscoop sensoren hebben een effect genaamd drift – dat zij sommige kleine hoeksnelheid zal registreren zelfs als dood stil. Dus als u uw geschatte hoek alleen door de integratie van de gyroscoop output genereert, zou u een fout die zou blijven groeien na verloop van tijd-een probleem dat maakt een gyroscoop enige oplossing onhoudbaar voor het balanceren. Voer de versnellingsmeter. De waarde die is gerapporteerd door de versnellingsmeter houdt de invloed van de zwaartekracht, die constant is, evenals alle andere versnelling, die zal variëren op basis van beweging van het apparaat. Voor de IMU is de zwaartekracht vector die wij zijn geïnteresseerd in. Het idee van een fusie-filter is het genereren van een geschatte hoek door het combineren van deze twee sensoren. Het gunsten de gyroscoop ogenblikkelijk uitgang (doorgegeven door middel van een high-pass filter) maar de output van de versnellingsmeter op de lange termijn door het meten van gravitationele richting aarde (doorgegeven via een low-pass filter) als u wilt verwijderen van elke drift.
OK, dus we een fusion-filter, maar welke moeten? Zeer complete en complexe oplossingen bestaan. De Kalman-filter is een van de meer prominente fusion filters, maar zelfs een ingenieursdiploma kan niet volledig inrichten met u om te begrijpen wat er in de zwarte doos. Voor dit project heb ik een soortgelijke, maar minder computationeel veeleisende oplossing, de Madgwick-filter gebruikt. Ik gebruikte dit filter voor een van de belangrijkste redenen – het kwam gebundeld met de 101 Arduino! Maar de configuratie van de IMU onderdeinbijlage evenwicht – slechts één graad van vrijheid, leidt tot beperkingen waarmee wij een meer eenvoudige oplossing, de aanvullende filter gebruiken. De aanvullende filter krijgt zijn naam omdat de vermenigvuldigend factoren voor elke term tot er 1 bij optellen. Een blokdiagram van een aanvullende filter is afgebeeld in figuur 1.
Er zijn een aantal zeer goede behandelingen op het web voor de details achter het aanvullende filter, zo boven, dat ik heb net de resulterende filter vergelijking bieden. In de vergelijking is A een constante die de kenmerken van het filter bepaalt. Bovendien moet worden opgemerkt dat in de versnellingsmeter hoek berekeningen, wij zitten taking voordeel van kleine hoek onderlinge aanpassing-een realisatie die voor hoeken minder dan ~ 30̊, sin(θ) ≈ θ in radialen. Voor onze robot, als de hoek 30̊ benadert, 's it gonna omvallen, zodat de veronderstelling lijkt geldig. Daardoor kunnen we de sin(θ) in deze berekening met weinig invloed overslaan. De tijdconstante voor het aanvullende filter is ten slotte ook hierboven weergegeven.
Ik testte zowel de Madgwick als een aanvullende filter om te zien hoe het beïnvloed de afweging van de robot. De voorraad Madgwick filteren als geïnstalleerd had de Beta ingesteld op 0,1, met een #define-instructie in het headerbestand MadgwickAHRS.h. De robot zou niet sluitend met die instelling-het antwoord was een beetje te traag. Na het spelen rond, vond ik dat een instelling van 0,01 ingeschakeld het beste evenwicht, al er een compromis in absolute hoek nauwkeurigheid met die instelling was. Als u de robot in een hoek voor een moment gehouden, 20̊ zeggen, en keerde het terug naar de rechtop, was er een vertraging in de geschatte hoek terug te keren naar 0̊.
Voor de aanvullende filter, gebruikte ik A = 0,98, waardoor een tijdconstante van ongeveer 0,25 seconden, met dt ingesteld op 5 milliseconden. Ik vond de resultaten vergelijkbaar met het Madgwick-filter, en beter dan mijn eerste project, maar nog steeds geen rock solid balanceren. Dus bleef het zoeken.
Het gebruik van positionele feedback (encoders)
De DC reductiemotoren die ik heb geselecteerd voor deze robot opgenomen encoders feedback wilt geven over de beweging van de armatuur van de motor. De encoders zijn op de motoras steken voordat de gearing optreedt, zodat ze een vrij hoge resolutie op beweging leveren - met de overbrengingsverhouding en diameter wielen gebruikt, ik vastbesloten dat de overgang van elke encoder vertaald naar ~0.04cm. Afstand en snelheid waren dan vrij eenvoudig te ontlenen, door encoder overgangen over een regelmatige tijdsinterval, tellen en vervolgens het resultaat vermenigvuldigen door 0.04 om afstand te krijgen, en delen van die afstand door het tijdsinterval (20mS in mijn geval) om snelheid te krijgen.
Ik ben van plan mijn volgende project ter bestrijding van vollediger de navigatiemogelijkheden van de robot, dus ik zal niet ingaan op veel detail hier, maar twee methoden werden gebruikt om de controle van de snelheid van de robot-instellen van de hoek van het doel en de directe toevoeging op de motor PWM-waarden. Het toevoegen van toerentalregeling heeft verwijderd de robot "zwerven" maar geen aanzienlijke verbetering balancing. Aan de lus van de controle.
Controle lus variabelen en structuur
De belangrijkste control lus voor de balancing robot is gebaseerd op twee elementen-de fusion-filter om te bepalen van de geschatte hoek van de robot en een PID-regelaar met de geschatte hoek te genereren van de motor controle-signaal. Het idee achter een PID-regelaar is om de fout van een controle-signaal tegen een instelpunt berekenen en vervolgens de som van de proportionele, integraal en afgeleide vormen van die fout nadat zij hebben elk zijn vermenigvuldigd met aparte-constanten zijn. De PID-regelaar die zeer veelzijdig is als een bedieningselement, met toegang tot waar de fout is geweest (I), waar het nu is (P) en waar het wordt geleid (D). Maar wees gewaarschuwd - het is een zeer uitdagende taak voor het optimaliseren van de multipliers voor de P, I en D voorwaarden. Figuur 2 is een blokdiagram tonen de basisverbinding op het gebied van structuur en controle, en weerspiegelt de initiële configuratie van deze robot.
Bij nader inzien ziet u dat de PID controller D termijn is het nemen van de afgeleide van de geschatte hoek, wat in een geraamde hoekige tarief van verandering resulteert. Als u zich herinnert, leverde de gyroscoop slechts, een hoekige tarief van verandering, maar dat is veel nauwkeuriger. Dit leidt tot een vraag me af hoe de controle lus zou gedragen als de gyroscoop uitvoer rechtstreeks werden gebruikt, in plaats van hoekig tarief van de geschatte hoek opnieuw te berekenen.
Na het voederen van de gyroscoop rechtstreeks in de D-term van de PID, was de wijziging in evenwicht brengen van de prestaties dramatisch. Figuur 3 geeft een glimp op waarom-het toont de output van de gyroscoop naast de term D van de PID. Het hoekige mutatietempo van afgeleid van de geschatte hoek loopt de gyroscoop uitvoer door over de 150mS, een vertraging die helpt verklaren een aantal het wiebelen in de afweging van de originele configuratie, en je vraagt je af hoe het helemaal evenwichtig.
Figuur 4 toont de definitieve configuratie, met de gyroscoop gevoed rechtstreeks in de D-term van de PID-regelaar. Terwijl alle gebieden onderzocht had enige invloed op het evenwicht van prestaties, verstrekt het verstrekken van een opgave van de timelier en hogere betrouwbaarheid van hoekige van de gyroscoop de verandering in de prestaties van de robot die ik zocht.