PID-regeling voor robots: een leertraject
Maak van een ruisende meting een glad regelfoutsignaal en stem een stabiele PID-regelaar af die volgt zonder te oscilleren.
Een PID-regelaar is het werkpaard van de robotica: hij maakt van het gat tussen waar een robot is en waar hij zou moeten zijn een correctie. Maar een regelaar is zo goed als het signaal waarop hij werkt, dus dit leertraject begint met ruisende sensormetingen opschonen en leert je daarna de proportionele, integrale en afgeleide term af te stemmen, zodat de robot gelijkmatig volgt in plaats van te oscilleren.
De praktische knopen zijn waar de volgorde ertoe doet. Stem eerst een kale PID-lus af waarin één streefwaarde en één regelobject je overshoot, oscillatie en statische regelfout in isolement laten zien. Neem de drie versterkingen pas daarna mee naar de lijnvolger, waar het regelobject tegenspartij en de fout van een echte sensor komt — en daar wordt afstemmen niet meer netjes.
Daarna eindigt dit leertraject op een plek waar de eerdere knopen je niet brengen. Elk regelobject tot dat punt is stabiel: negeer het en het blijft staan, dus afstemmen draait om beter doen dan niets doen. Een zelfbalancerende robot is niet stabiel — laat hem met rust en hij ligt binnen een seconde op de vloer. Die ene verandering maakt goed afstemmen een eis in plaats van een verbetering, en ze dwingt de structurele idee af waarmee dit leertraject eindigt: wanneer je niet kunt opdragen waar het je werkelijk om gaat, voeg je twee lussen in elkaar en laat je de buitenste het doel van de binnenste verschuiven.
Voordat je begint
Je zou al een sensor moeten kunnen uitlezen en een motor op een opgedragen snelheid kunnen aansturen — het leertraject motorregeling dekt allebei. Neem een robot of een simulator mee waarin je één getal kunt veranderen en meteen ziet wat het doet.
Wat je aan het eind kunt
- P afstemmen, dan D, dan I, in een bewuste volgorde, in plaats van drie getallen tegelijk veranderen en hopen.
- Een responscurve lezen en uit de vorm afleiden wat er mis is: overshoot, aanhoudende oscillatie of een statische regelfout die nooit sluit.
- Integrale windup herkennen wanneer de actuator verzadigt, en die oplossen door te begrenzen in plaats van door de versterking te verlagen tot het symptoom verdwijnt.
- Twee lussen in elkaar voegen zodat een buitenste regelaar de streefwaarde van een binnenste regelaar verschuift.
Waar mensen vastlopen
Alle drie de versterkingen tegelijk afstemmen. Met drie samenhangende knoppen en één uitvoer betekent alles tegelijk veranderen dat je niets uit het resultaat leert. Verhoog P tot hij oscilleert en ga terug; voeg pas dan D toe; voeg I als laatste toe en alleen als er een blijvende afwijking overblijft.
De afgeleide van de fout nemen. Als de streefwaarde stapt, stapt de fout mee, en de afgeleide daarvan is kort even enorm — de robot schokt zonder enige fysieke reden. Neem in plaats daarvan de afgeleide van de meting. De wiskunde is bijna identiek en de schop verdwijnt.
D een ruisend signaal voeren. Differentiatie versterkt ruis. Is je sensor schokkerend, dan maakt D van die schokkering motorcommando’s. Filter eerst — en daarom begint dit leertraject met sensorruis in plaats van met de regelaar.
Aannemen dat versterkingen overgaan. Versterkingen zijn eigenschappen van een specifiek regelobject. Volle accu’s, een zwaarder chassis of een andere ondergrond veranderen dat regelobject allemaal, en de afstelling die gisteren perfect was is dat vandaag niet.
Een inconsistente lusfrequentie. Zowel I als D hangen af van hoeveel tijd er verliep. Loopt je lus telkens wanneer hij toevallig klaar is, dan worden beide termen berekend op basis van een leugen. Maak de periode vast, of meet hem en geef de werkelijk verstreken tijd door aan de wiskunde.
Wat je nodig hebt
| Wat | Waarom dit leertraject het nodig heeft | Opmerkingen |
|---|---|---|
| Een regelobject dat je kunt prikkelen | Iets dat op een opdracht reageert en tot rust komt — een motor, een verwarming, een robot | De simulators nemen de plaats van alle drie in als je er geen hebt |
| Een manier om te plotten | Afstemmen door naar een robot te kijken is gokken; afstemmen door een curve te lezen niet | Een seriële plotter, of de labs uit dit leertraject |
| Een vaste lusperiode | Zowel I als D worden berekend op basis van de verstreken tijd. Een lus die loopt zodra hij klaar is, berekent beide op basis van een leugen | Het millis()-patroon |
| Geduld voor één knop tegelijk | De hele methode | — |
Je kunt elke knop van dit leertraject in de browser afronden. De drie labs zijn echte regelaars op echte (gesimuleerde) regelobjecten, en de afstelprocedure gaat rechtstreeks over op hardware — en dat is precies waarom je hem hier eerst doet.
Waarom dit leertraject in deze volgorde loopt
De volgorde is gekozen zodat elke etappe precies één nieuwe moeilijkheid toevoegt.
Filteren komt eerst omdat een regelaar zo goed is als zijn invoer, en D is de term die je bestraft als je dit overslaat. Differentiatie versterkt ruis: een sensor met ±2 counts ruis die elke 10 ms wordt bemonsterd levert een afgeleideschatting op die 200 counts per seconde slingert, en D maakt daar motorcommando’s van. Een regelaar afstemmen op een ongefilterd signaal leert je de verkeerde les — dat D nutteloos is.
De kale lus komt vóór de robot omdat die de regelaar isoleert. Eén streefwaarde, één regelobject, drie versterkingen, en geen stuurgeometrie, geen sensorplaatsing, geen wielslip. Als de respons hier overschiet, ligt dat aan de versterkingen, en er kan niets anders de oorzaak zijn.
De lijnvolger komt als volgende omdat die twee dingen tegelijk toevoegt, en beide zijn terechte toevoegingen: de fout komt nu van een echte sensor met beperkt gezichtsveld, en het regelobject vecht terug — de eigen beweging van de robot verandert de fout sneller dan de regelaar verwacht. Dit is waar een afstelling die klaar leek niet meer klaar is.
De balancerobot komt als laatste, en dat is het punt van het hele leertraject. Elk regelobject ervoor is stabiel: negeer het en het blijft staan, dus afstemmen is een optimalisatie. Een omgekeerde slingerbal is niet stabiel — laat hem één seconde met rust en hij ligt op de vloer. Die ene verandering maakt van een verbetering een eis, en ze dwingt de structurele idee af waarmee het leertraject eindigt: als je niet kunt opdragen waar het je om gaat, voeg je twee lussen in elkaar.
Controlepunten: hoe je weet dat een etappe is geland
| Etappe | De controle | Hoe een succes eruitziet |
|---|---|---|
| Filteren | Plot ruw en gefilterd signaal op dezelfde assen terwijl je de sensor verstoort | Je kunt in milliseconds aanwijzen welke vertraging je filter kost, en zeggen waarom dat de moeite waard is |
| Alleen P | Verhoog P tot gestaag oscilleren, noteer de waarde en halveer die | Je hebt een getal voor de kritieke versterking, en de respons overschiet nu en komt tot rust |
| D toevoegen | Verhoog D tot de overshoot gedempt is | De overshoot daalt zonder dat de respons traag wordt; te veel D en hij wordt scherp |
| I toevoegen | Alleen als er een blijvende afwijking overblijft | De afwijking sluit, en je hebt de accumulator begrensd voordat je bij verzadiging test |
| Een curve lezen | Bekijk drie responsen en benoem wat er bij elk mis is | Je kunt overshoot, aanhoudende oscillatie en statische regelfout puur op vorm onderscheiden |
| Windup | Geef een streefwaarde die ver buiten het bereik van de actuator ligt en geef die vrij | Het systeem schiet bij het vrijgeven niet door — doet het dat wel, dan ontbreekt je begrenzing |
| Lusfrequentie | Druk je werkelijke periode gedurende een minuut af | Die is vast, of je geeft de gemeten verstreken tijd door aan de wiskunde |
| Cascade | Geef een positie op een balancerend regelobject | De binnenlus draait meerdere malen sneller dan de buitenste, en je kunt de verhouding noemen |
Waar dit leertraject ophoudt
PID is het werkpaard, niet het hele vakgebied, en dit leertraject is eerlijk over waar het ophoudt.
Het houdt op bij regeling met één invoer en één uitvoer. Echte robots hebben vaak meerdere gekoppelde lussen die elkaar in de weg zitten, en daar bestaat een heel vakgebied voor dat PID niet behandelt.
Het behandelt niet voorwaartse regeling, de grootste praktische verbetering die de meeste robotlussen missen. PID is per constructie reactief — hij kan pas handelen als er een fout bestaat. Weet je al welke beweging je opdraagt, dan kun je het grootste deel van de benodigde uitvoer vooraf berekenen en PID alleen het verschil laten corrigeren. De tutorial over bewegingsprofielen is de eerste helft van dat idee.
Het behandelt niet modelgebaseerde regeling — LQR, poolplaatsing, of iets dat begint met het opschrijven van de vergelijkingen van het regelobject. Die geven betere resultaten wanneer je een nauwkeurig model hebt, en de meeste kleine robots hebben dat niet.
En het behandelt niet gain scheduling, het standaardantwoord op het feit dat versterkingen niet overgaan: meerdere afstellingen bewaren en op basis van snelheid, belasting of accuspanning ertussen wisselen.
Leerroute
De route
Volg de knooppunten op volgorde – elk ontgrendelt het volgende zodra je het hebt afgerond. Je voortgang wordt op dit apparaat opgeslagen.
0 / 7 klaar
Veelgestelde vragen
Veelgestelde vragen
In welke volgorde moet ik de PID-versterkingen afstemmen?
P, dan D, dan I, en altijd maar één tegelijk. Verhoog de proportionele versterking totdat de respons gestaag oscilleert en ga dan terug naar ongeveer de helft van die waarde — dit is het klassieke Ziegler–Nichols-startpunt en het brengt je snel in de buurt. Voeg vervolgens de afgeleide term toe om de overshoot te dempen die P laat achterblijven. Voeg de integraalterm als laatste toe, en alleen als er een blijvende afwijking overblijft die P alleen niet wegnemet. Alle drie tegelijk veranderen leert je niets, want met drie samenhangende knoppen en één uitvoer kun je de verandering die je ziet niet toeschrijven aan de knop die je hebt omgedraaid.
Waarom oscilleert mijn PID-regelaar?
Meestal een proportionele versterking die te hoog is voor de vertraging van het regelobject. Elke lus heeft vertraging — sensorfiltering, motorinertia, de periode van de lus zelf — en P werkt op een fout die al achterhaald is. Boven een bepaalde versterking komt de correctie zo laat dat ze dingen slechter maakt, en gaat de lus ringen. Verlaag P en voeg D toe, dat werkt op de veranderingssnelheid en dus vooruitdenkt. Is de oscillatie snel en scherp in plaats van glad, verdenk dan ruis die D bereikt: differentiatie versterkt ruis, en een schokkerende sensor wordt een schokkerend motorcommando.
Wat is integrale windup (anti-windup) en hoe los ik die op?
Wanneer de actuator verzadigt — motoren al op vol vermogen — stopt de fout met kleiner worden, maar de integraalterm blijft hem opstapelen. Tegen de tijd dat de streefwaarde bereikt is, bevat de integraalterm een grote opgeslagen waarde die moet worden uitgerold, dus het systeem schiet door en heeft lang nodig om terug te komen. De oplossing is de integraalaccumulator begrenzen tot een verstandig bereik, of stoppen met opstapelen zodra de uitvoer verzadigd is. Wat je juist niet moet doen is de integraalversterking verlagen tot het symptoom verdwijnt, want dat ruilt de overshoot in voor een afwijking die nooit sluit.
Werken mijn PID-versterkingen ook op een andere robot?
Nee, en vaak niet eens morgen op dezelfde robot. Versterkingen zijn eigenschappen van het regelobject, niet van het algoritme, en dat regelobject omvat de laadtoestand van de accu, de massa van het chassis, de ondergrond en de temperatuur van de versnellingsbak. Een afstelling die perfect was op volle accu's zal traag zijn op lege, omdat dezelfde bezettingsgraad nu minder koppel levert. Daarom houdt dit leertraject vol dat je volgens een procedure afstemt in plaats van getallen over te kopiëren — de procedure draagt over, de versterkingen niet.
Waarom neem je de afgeleide van de meting in plaats van die van de fout?
Omdat de fout met de streefwaarde meestapt, en de afgeleide van een stap kort even enorm is. De robot schokt hard om een reden die niets met natuurkunde te maken heeft — er is feitelijk niets bewogen, je vroeg alleen om iets anders. In plaats daarvan de meting differentiëren geeft je dezelfde informatie over hoe snel het systeem werkelijk verandert, zonder de schop van de streefwaarde. De wijziging is één regel code en hij is vrijwel altijd de juiste.
Wat is cascaderegeling en wanneer heb ik die nodig?
Twee lussen in elkaar, waarbij de uitvoer van de buitenste de streefwaarde van de binnenste is. Je hebt ze nodig wanneer je niet kunt opdragen waar het je werkelijk om gaat. Op een zelfbalancerende robot wil je de positie regelen, maar de motoren regelen het wielkoppel, en de enige manier om te bewegen is bewust voorover hellen — dus houdt een binnenlus de kanteling vast op de hoek die hij krijgt, en vraagt een buitenlus om een inclinatie om te kunnen rijden. De binnenlus moet meerdere malen sneller zijn dan de buitenste, anders jaagt de buitenlus een doel na dat de binnenste nog niet heeft bereikt.