XOD aangedreven lijnvolger mBot

In het vorige artikel hebben we geleerd hoe we een PID-controller kunnen gebruiken in de visuele programmeeromgeving van XOD. Ook hebben we het mBot-platform van Makeblock veranderd in een eenvoudige handvolgerrobot. Als je je het onderwerp wilt herinneren of als je niets weet over wat een PID-regelaar is, raad ik je aan het eerste artikel in de serie te lezen.

In dit artikel gaan we verder met het PID-controller-experiment. We gaan het mBot-platform van Makeblock gebruiken zoals we eerder deden. De volgende, meer uitdagende taak voor ons is om een ​​lijnvolgerrobot te maken. Om dit mogelijk te maken, moeten we de mBot-mogelijkheden uitbreiden. We voegen een ‘Me Line Follower’-sensor toe. Omdat deze sensor door dezelfde fabrikant is gemaakt, past hij perfect bij onze robot en is hij ideaal voor onze taak.

Er is een XOD-bibliotheek om beschreven voorbeelden te herhalen. Bekijk het overzicht op de XOD-website en voeg het toe aan je XOD-project door in het menu op Bestand → Bibliotheek toevoegen te klikken en gabbapeople / mbot-lib te typen. De bibliotheek is verbeterd sinds de laatste release, dus als je deze al hebt, zorg er dan voor dat je hem opnieuw toevoegt om de nieuwste versie te krijgen.

Bekijk onze verbeterde mBot.

Patch maken

Laten we beginnen met het programmeren van de robot door de inkomende waarden van de lijnsensor te lezen. Het eerste knooppunt dat in de patch moet worden geplaatst, is mbot-line-sensor

Dit knooppunt communiceert met de sensor via de S1 en S2 invoerpennen. Het heeft twee outputpennen L en R volgens de linker en rechter infraroodsensor op het bord. Echte waarde op een outputpin betekent dat er een witte of heldere kleur voor de infraroodsensor staat. Op zijn beurt betekent valse waarde dat de kleur zwart of donker is.

“Me Line Follower” heeft een blauw label. Fysiek verbinden we het met een geschikte blauw gelabelde “poort 1” op de controller-kaart. In het programma plaatsen we een corresponderend knooppunt rj25-port1-blue in de patch en maken we de nodige links.

Wat zijn de mogelijke toestanden van de lijnsensor? Kijk naar de schets.

Het is echter beter om analoge sensoren te gebruiken in plaats van digitale. Tegelijkertijd is een lijnvolger-sensorarray beter dan een paar IR-leds, maar het is prima om deze sensor voor ons voorbeeld te gebruiken.

Voor een PID-controller moet een input een enkele variabele zijn, terwijl de mbot-line-sensor er een paar uitvoert. Om dit probleem op te lossen, voegen we het aftrekken -knooppunt toe. Dit knooppunt trekt twee booleaanse variabelen af ​​en produceert een getal.

Op deze manier kan het aftrekken -knooppunt de waarden uitvoeren:

De invoer is klaar en het is tijd om deze te koppelen aan de pid-controller .

We gebruiken die vier situaties om het “fout” -concept voor de PID-regelaar te vormen. De situatie waarin de inkomende waarde 0 is en beide IR-leds in lijn staan, is ideaal voor ons. Daarom moeten we de TARG -pincode instellen op 0.

Maar deze patch in zijn vorm kan alleen correct werken met de tweede en derde situaties. Wanneer mBot de regel volledig verliest, zal de inkomende waarde voor de pid-controller node ook 0 zijn. Voor dit geval moeten we een speciale voorwaarde invoeren.

We plaatsen drie extra knooppunten en , if-else , en vermenigvuldigen aan de patch en maken koppelingen zoals op de onderstaande afbeelding. Kijk eens.

Het en knooppunt stelt een voorwaarde voor de situatie 4. Het if-else knooppunt wordt gebruikt om een ​​versterkingsfactorcoëfficiënt te definiëren. Wijs de T -pin toe aan een waarde van 25 en F -pin aan een waarde van 1. Ten slotte vermenigvuldigt het multiply -knooppunt de uitvoer van de pid-controller door de coëfficiënt en geeft deze verder door.

Als dit niet de situatie 4 is, dan is de coëfficiënt 1, en blijft de output van de pid-controller ongewijzigd. Als dit het geval is, is de coëfficiënt 25 en neemt de output aanzienlijk toe.

De waarde op de F -pin laat zien hoe snel mBot ronddraait op zoek naar de lijn. We kiezen de waarde empirisch. Pas het aan in uw project om te ontdekken wat het beste voor u werkt.

Nu worden de tweede, derde en vierde situaties beschreven, en alleen de eerste blijft onaangeroerd. Om dit op te lossen, moeten we het enige knooppunt noch plaatsen en het koppelen zoals weergegeven in de onderstaande afbeelding.

In de eerste situatie zijn zowel de L als de R pin-waarden onwaar, en gaat de mBot vooruit. Er is geen fout. We koppelen het nor knooppunt met de RST pin van het pid-controller knooppunt om te wachten op een nieuwe binnenkomende afwijking.

De laatste stap bij het maken van de patch is het doorgeven van de vermenigvuldigde waarde aan de motoren. We hebben drie knooppunten mbot-motors , aftrekken en toevoegen aan de patch toegevoegd. We stellen ook een constante in om de basissnelheidswaarde van de mBot op te slaan en koppelingen te maken. De voltooide patch wordt hieronder weergegeven.

Het mbot-motors -knooppunt bestuurt de motoren. Een positieve waarde zorgt ervoor dat het wiel achteruit beweegt, terwijl een negatieve waarde het vooruit laat bewegen. Het constante knooppunt SPD slaat de basissnelheid van mBot op. Het varieert van -1 tot 0 en we stellen het in op -0,8. De aftrekken en optellen knooppunten berekenen de motorsnelheid door de vermenigvuldigde pid-controller output en de instellingsconstante. De patch is klaar voor tests. Nu is het tijd om de PID-controller af te stemmen.

PID-regelaar

Zoals u zich herinnert, past een PID-regelaar de drie uitgangsfactoren aan. Ze zijn proportioneel, integraal en afgeleid. Als alle coëfficiënten gelijk blijven aan nul, dwaalt de mbot rond zonder enig gedrag. Net als in de vorige voorbeelden, moeten we de coëfficiëntwaarden experimenteel kiezen.

Kp-factor

Laten we de waarde 3 in de Kp -pin plaatsen, andere coëfficiënten gelijk laten aan 0 en de patch uploaden. Om het gedrag van de robot te testen maken we een klein baandeel op de vloer.

Zoals je ziet, met deze coëfficiënt is de oscillatie te hoog. mBot probeert de lijn te volgen, maar hij trilt en verlaat uiteindelijk de baan. Laten we de coëfficiënt 0,1 Kp instellen.

Als de robot de lijn verliest, keert hij te lang terug. Dat gebeurt omdat de fout te weinig effect heeft op de verandering van het motortoerental. Met vallen en opstaan ​​selecteren we een juiste waarde 0,7.

Bekijk de grafische uitleg van het mBot-gedrag. Het laat zien hoe de Kp -waarde de robotbeweging verandert.

Kd-factor

Door de Kp -coëfficiënt aan te passen, maken we de beweging soepeler. Toch kan de robot de baan niet afmaken. Blijkbaar is de tweede bocht op zijn pad te steil en reageert de pid-controller -knoop te traag. Om dit probleem op te lossen, moeten we een Kd -coëfficiënt instellen die niet gelijk is aan nul.

De eerste keer dat we de 3 waarde van de Kd . Het bleek dat de 3-waarde verre van de juiste is. We doen veel tests om de juiste waarde te vinden. We kiezen waarde 1 als de beste.

De mBot maakt de track af. Bekijk de onderstaande schets. Door de Kd -waarde te verhogen, verlengen we de tijdsperiode voor de robot om online te zijn en verkorten we de tijdsperiode om terug te keren naar de lijn in geval van verlies.

Ki-factor

De geselecteerde Kp en Kd coëfficiënten zijn redelijk geschikt voor onze robot. Maar hoe zit het met de Ki ?

In feite hoeven we het niet in te stellen. Voor een lijnvolgerrobot kan de Ki in zeer bijzondere gevallen nuttig zijn.

Bijvoorbeeld. De baan op de vloer is eindeloos recht. De robot beweegt strikt langs de lijn, maar er is een klein fabricage-onenigheid over de motoren. Na een aanzienlijke periode zal dit kleine probleem veranderen in een ongecontroleerde kramp. De Ki -factor elimineert dergelijke problemen.

We zullen proberen Ki op een zeer ongebruikelijke manier te gebruiken.

Als de robot uit de lijn is, is de invoer voor de pid-controller 0. Als de Ki 0 is, is de vermenigvuldigde waarde voor de motoren 0 ook (25 * 0 = 0).

Het punt is dat de robot niet onder ideale omstandigheden beweegt. De IR-sensoren raken altijd slechte stukken van de spoorlijn of interfereren met donkere plekken op de vloer. Dus terwijl de robot van de lijn is, is de invoer van de pid-controller niet constant 0. Door de Ki toe te voegen, verwijderen we de vermenigvuldigde nulwaarde. De 25 coëfficiënt op de T -pin van het if-else -knooppunt zorgt ervoor dat de robot erg snel roteert als hij de lijn verliest. Voor de test plaatsen we de 2 Ki -waarde.

Conclusie

We hebben een coole lijnvolgerrobot gemaakt met een eenvoudig XOD-programma. Dankzij de PID-controller was het zo gemakkelijk.

Zorg ervoor dat je nieuwe artikelen volgt, want we zullen nieuwe leerzame projecten doen!