Stap 3: Met behulp van een PID
Laten we stellen de eerste setpoint = 2 teken. Dus wij de bot verwachten te draaien op 2 teken per 0,1 sec. (zoals ik al zei: dit is een ruwe berekening, weglaten van versnelling gedurende het interval). Vervolgens begint de bot te lopen op de overtreksnelheid. Na 0.1 seconde de sensoren worden gelezen en de encoders komen met 1 teek. We' re onder doelstelling op een fout van 1 teek.
In formule:
fout = setpoint – werkelijke teken
De werkelijke snelheid moet worden verhoogd, want wij streven naar een hogere snelheid voor het bot uit te voeren. De eenvoudigste manier om te corrigeren die is het toevoegen van de fout met de volgende opdracht van de snelheid. In de praktijk zal dit blijken te zijn van te veel of te weinig om de bot in de buurt van de gewenste snelheid. Afstemming van de correctie kan worden gedaan door te vermenigvuldigen met de fout met een constante. Deze manier van corrigeren heet 'proportioneel'. De tuning constante heet een 'winst'.
In formule:
P = Kp * fout
Afstemmen van de proportionele correctie grondig zal verminderen de fout na verloop van tijd aanzienlijk, maar nooit zal het op nul (want er altijd een fout die nodig zijn voor een proportionele correctie is). In veel gevallen deze manier van de fout te corrigeren zal ook leiden tot snelle veranderingen, wat resulteert in een schokkende gedrag (trilling) van het bot. Om vlakken van de reacties wordt een deel van de 'Geïntegreerde' toegevoegd aan de correctie door optelling van de fouten van na verloop van tijd. Het geïntegreerde deel kan ook worden afgestemd door gebruik te maken van een winst.
In formule:
Ik = Ki * som van fouten * interval
Samengevat zal ten slotte de fout verminderen tot nul en het werkt prima, zolang er een gedeelte van de linkerkant van de fout is. Integratie zal ook voorkomen dat eindeloze verhoging van de snelheid. De correctie duurt langer en langer werken. Dus wanneer de fout is eindelijk teruggebracht tot nul, het geïntegreerd onderdeel van de correctie zal blijven werken (en negatieve) totdat de som van alle fouten is tot nul gereduceerd. Dit heet overschrijding.
Vaak (b.v. Wanneer toegepast op een balancing robot) een derde deel van de correctie nodig is om te 'dempen' de overschrijding. Dit is het 'differentieel' deel. Het gaat met de volatiliteit van de verandering door het verschil tussen 2 fouten na verloop van tijd in aanmerking te nemen. Ook kan het gedifferentieerde gedeelte worden afgestemd door gebruik te maken van een winst.
In formule:
D = Kd * (fout – vorige fout) / interval
Het toevoegen van de onderdelen zal resulteren in een gecontroleerde correctie van de snelheid: P + I + D.
Het setpoint, de fout en de PID-correctie zijn alle ingesteld in teken (per seconde). Voor de opdracht om de motor snelheid te veranderen, is het nodig om dit in een PWM-percentage berekenen. Telkens wanneer het gecontroleerde deel wordt uitgevoerd, zal de snelheid van de motoren worden verhoogd tot het bot op de gewenste snelheid draait.
Zoals al eerder gezegd: dit is een vereenvoudigde controle en werkt zonder gebruik te maken van de versnelling in de vergelijkingen. Kijkend naar het diagram van de snelheid: dit script niet realiseren een traging motie. Bij het invoeren van wedstrijden moet u en waarschijnlijk zul je de bot kruipen voor de laatste millimeters naar de exacte doelgroep afstand. (Werken met RB2 wordt gedaan in centimeters op het best.)
De volledige Python codering wordt verstrekt in het script, dus ik het uit deze blog laat. Het bijhouden van alle waarden en ze opslaan in een csv opgemaakt bestand, kunnen wij analyseren de foutgegevens en helpt bij het afstemmen van de correctie door het veranderen van de winsten (dus stoppen met wat oefening en een gezond gedeelte van geduld). De volgende afbeelding ziet u een dashboard gebruikt voor analyse. Duidelijk ik was er nog. -0)
Als de afstemming behoorlijk wordt gedaan zal de fout-grafieken tonen mooie bochten, langzaam vrijwel nul te reduceren.
Rb2 is een differentiële aangedreven robot: het heeft 2 sets van onafhankelijke motoren. Voor elke zijde wordt een apart gecontroleerde gedeelte gebruikt. In theorie beide sets van motors moeten worden uitgevoerd op de target snelheid op hetzelfde moment in de tijd en de bot in een rechte lijn moet worden uitgevoerd. Om het af, een derde, balancing, tip kan PID worden gebruikt om te corrigeren van de resterende verschillen tussen links en rechts.
Rb2 geproduceerd een andere uitdaging: ik kon niet afstemmen op het verschil tussen de linker- en de juiste snelheid. Ik weet nog steeds niet hij reden voor dat (ik overgestapt van motoren, banden overgestapt, omgekeerd de bedrading, een andere motor bestuurder probeerde, veranderd het frame, vervangen van het pak van de batterij, maar kon niet de kloof). Dus, in mijn script heeft de tegenrekening PID het grootste gewicht in de totale correctie en het maximum van beide lezingen coderingsprogramma wordt gebruikt voor het berekenen van de afstand gemaakt (het toevoegen van een andere onnauwkeurigheid). Maar ik denk dat dit is de manier om uit te voeren: eerst tune uit de PID's voor de motoren. Wanneer u het gewenste resultaat en gedrag is bereikt, implementeren de tegenrekening PID.
Alles wat overblijft voor het uitvoeren op pleinen van nu, is het maken van bochten door precies 90 graden. En natuurlijk: 'Waarom moeten wij ooit het bot uit te voeren in de vakken willen?'