Inhoudsopgave:

AI in LEGO EV3 Doolhof-rijdende robot - Ajarnpa
AI in LEGO EV3 Doolhof-rijdende robot - Ajarnpa

Video: AI in LEGO EV3 Doolhof-rijdende robot - Ajarnpa

Video: AI in LEGO EV3 Doolhof-rijdende robot - Ajarnpa
Video: World's Best AI LEGO Robot! 2024, November
Anonim
Image
Image
Hoe een doolhof wordt opgelost
Hoe een doolhof wordt opgelost

Dit is een eenvoudige, autonome robot met wat kunstmatige intelligentie. Het is ontworpen om een doolhof te verkennen en wanneer het weer bij de ingang wordt geplaatst, om door te rijden naar de uitgang en de doodlopende weg te vermijden. Het is veel ingewikkelder dan mijn vorige project, dat gewoon door het doolhof reed. Hier moet de robot het pad onthouden dat hij heeft afgelegd, doodlopende wegen verwijderen, het nieuwe pad opslaan en vervolgens het nieuwe pad volgen.

Mijn vorige robot wordt hier beschreven:

De robot is gebouwd met LEGO Mindstorms EV3. De EV3-software draait op een computer en genereert een programma, dat vervolgens wordt gedownload naar een microcontroller die een EV3-steen wordt genoemd. De programmeermethode is op pictogrammen gebaseerd en van hoog niveau. Het is heel gemakkelijk en veelzijdig.

Benodigdheden

ONDERDELEN

  1. LEGO Mindstorms EV3-set
  2. LEGO Mindstorms EV3 ultrasone sensor. Het is niet inbegrepen in de EV3-set.
  3. Golfkarton voor het doolhof. Twee dozen zouden voldoende moeten zijn.
  4. Een klein stukje dun karton om sommige hoeken en muren te stabiliseren.
  5. Lijm en tape om kartonnen stukken aan elkaar te verbinden.
  6. Een rode wenskaartenvelop om de uitgang van het doolhof te identificeren.

GEREEDSCHAP

  1. Utility mes om het karton te snijden.
  2. Stalen liniaal om het snijproces te vergemakkelijken.

SOFTWARE

Het programma is hier:

Stap 1: Hoe een doolhof wordt opgelost

MAZE-RIJMETHODE

Er zijn verschillende manieren om door een doolhof te navigeren. Als je ze wilt bestuderen, worden ze heel goed beschreven in het volgende Wikipedia-artikel:

Ik koos voor de linker muur-volgende methode. Het idee is dat de robot een muur aan zijn linkerkant houdt door de volgende beslissingen te nemen terwijl hij door het doolhof gaat:

  1. Als het mogelijk is om linksaf te slaan, doe dat dan.
  2. Ga anders indien mogelijk rechtdoor.
  3. Als het niet naar links of rechtdoor kan, sla dan indien mogelijk rechtsaf.
  4. Als geen van bovenstaande mogelijk is, moet dit een doodlopende weg zijn. Omdraaien.

Een waarschuwing is dat de methode kan mislukken als het doolhof een lus bevat. Afhankelijk van de plaatsing van de lus, kan de robot rond en rond de lus blijven draaien. Een mogelijke oplossing voor dit probleem zou zijn dat de robot zou overschakelen naar de rechter muurvolgerregel als hij zich realiseerde dat hij in een lus ging. Ik heb deze verfijning niet in mijn project opgenomen.

HET DOORLOOPBAAN OPLOSSEN OM EEN DIRECT PAD TE VINDEN

Tijdens het rijden door het doolhof moet de robot het pad onthouden dat hij aflegt en doodlopende wegen elimineren. Het bereikt dit door elke afslag en kruising in een array op te slaan, te controleren op specifieke combinaties van afslagen en kruisingen en de combinaties die een doodlopende weg bevatten te vervangen. De laatste lijst met bochten en kruispunten is het directe pad door het doolhof.

De mogelijke afslagen zijn: Links, Rechts, Terug (bij een doodlopende weg) en Rechtdoor (wat een kruising is).

Combinaties worden als volgt vervangen:

  • "Links, Achter, Links" wordt "Recht".
  • "Links, Achter, Rechts" wordt "Terug".
  • "Links, achter, recht" wordt "Rechts".
  • "Rechts, Achter, Links" wordt "Terug".
  • "Recht, Achter, Links" wordt "Rechts".
  • "Straight, Back, Straight" wordt "Back".

HOE DE ROBOT MIJN MAZE BEHANDELT

  1. Wanneer de robot begint te rijden, ziet hij een spatie aan de rechterkant en slaat Straight op in de lijst in de array.
  2. Dan draait het naar links en voegt Links aan de lijst toe. De lijst bevat nu: Recht, Links.
  3. Met een doodlopende weg draait het zich om en voegt Terug aan de lijst toe. De lijst bevat nu: Recht, Links, Achter.
  4. Bij het passeren van de baan die het vanaf de ingang gebruikte, voegt het Straight toe aan de lijst. De lijst bevat nu: Recht, Links, Achter, Recht. Het herkent een combinatie en verandert Links, Terug, Rechtstreeks naar Rechts. De lijst bevat nu Recht, Rechts.
  5. Met een doodlopende weg draait het zich om en voegt Terug aan de lijst toe. De lijst bevat nu: Recht, Rechts, Achter.
  6. Na de bocht naar links bevat de lijst Recht, Rechts, Achter, Links. Het herkent een combinatie en verandert Rechts, Achter, Links in Achter. De lijst bevat nu Recht, Terug.
  7. Na de volgende afslag naar links bevat de lijst Recht, Terug, Links. Het verandert die combinatie in Rechts. De lijst bevat nu alleen Rechts.
  8. Het passeert een spatie en voegt Straight toe aan de lijst. De lijst bevat nu Rechts, Rechts.
  9. Na de bocht naar rechts bevat de lijst Rechts, Recht, Rechts, wat het directe pad is.

Stap 2: Overwegingen bij het programmeren van de robot

OVERWEGINGEN VOOR ELKE MICROCONTROLLER

Wanneer de robot besluit te draaien, moet hij ofwel een brede bocht maken, of een korte afstand vooruit gaan voordat hij draait en na het draaien weer een korte afstand vooruit zonder de sensor te controleren. De reden voor de eerste korte afstand is dat de robot na de bocht niet tegen de muur mag botsen, en de reden voor de tweede korte afstand is dat nadat de robot is gedraaid, de sensor de grote ruimte zou zien waar hij net vandaan was gekomen, en de robot zou denken dat hij weer zou moeten draaien, wat niet het juiste is om te doen.

Wanneer de robot een kruising aan de rechterkant detecteert, maar het is geen bocht naar rechts, heb ik ontdekt dat het goed is om de robot ongeveer 25 cm vooruit te laten rijden zonder de sensoren te controleren.

SPECIFIEKE OVERWEGINGEN VOOR LEGO MINDSTORMS EV3

Hoewel LEGO Mindstorms EV3 zeer veelzijdig is, kan er niet meer dan één van elk type sensor op één steen worden aangesloten. Twee of meer Bricks kunnen in serie worden geschakeld, maar ik wilde geen andere Brick kopen, en dus gebruikte ik de volgende sensoren (in plaats van drie ultrasone sensoren): infraroodsensor, kleurensensor en ultrasone sensor. Dit is goed gelukt.

Maar de kleurensensor heeft een zeer kort bereik, van ongeveer 5 cm, wat leidt tot een paar speciale overwegingen, zoals hieronder beschreven:

  1. Wanneer de kleurensensor een muur voor zich detecteert en de robot besluit om naar rechts of om te draaien, moet hij eerst achteruit rijden, zodat hij genoeg ruimte heeft om te draaien zonder tegen de muur te botsen.
  2. Een ingewikkeld probleem doet zich voor bij sommige "rechte" kruispunten. Vanwege het korte bereik van de kleurensensor kan de robot niet bepalen of hij een juiste "Rechte" kruising of de aanloop naar een bocht naar rechts waarneemt. Ik heb geprobeerd dit probleem op te lossen door het programma zo in te stellen dat het elke keer dat de robot er een detecteert een "Straight" in de lijst opslaat en vervolgens meer dan één "Straight" achter elkaar in de lijst verwijdert. Dit lost de situatie op waarin een bocht naar rechts een "Rechtdoor" in het doolhof volgt, maar niet de situatie waarin er een bocht naar rechts is zonder een "Rechtdoor" ervoor. Ik heb ook geprobeerd het programma zo in te stellen dat een "Straight" wordt geëlimineerd als het net voor een "Right" is, maar dit werkt niet als een bocht naar rechts op een "Right" volgt. Ik heb geen oplossing kunnen vinden die in alle gevallen past, hoewel ik veronderstel dat het voor de robot mogelijk zou zijn om naar de afgelegde afstand te kijken (door de motorrotatiesensoren te lezen) en te beslissen of het een "rechte" of een juiste draai. Ik vond deze complicatie niet de moeite waard om het AI-concept in dit project te demonstreren.
  3. Een voordeel van de kleurensensor is dat hij onderscheid maakt tussen het bruin van een muur en het rood van de barrière die ik bij de uitgang heb gebruikt, en dat de robot op een gemakkelijke manier kan beslissen wanneer hij het doolhof heeft voltooid.

Stap 3: Het hoofdprogramma

Het hoofdprogramma
Het hoofdprogramma

LEGO Mindstorms EV3 heeft een zeer handige op pictogrammen gebaseerde programmeermethode. Blokken worden onder aan het scherm van de computer weergegeven en kunnen worden gesleept en neergezet in het programmeervenster om een programma te bouwen. De EV3-steen kan via een USB-kabel, wifi of Bluetooth met de computer worden verbonden en het programma kan vervolgens van de computer naar de steen worden gedownload.

Het programma bestaat uit een hoofdprogramma en verschillende “Mijn Blokken” die subroutines zijn. Het geüploade bestand bevat het volledige programma, dat hier staat:

De stappen in het hoofdprogramma zijn als volgt:

  1. Definieer en initialiseer de variabele voor het tellen van beurten en de array.
  2. Wacht 5 seconden en zeg "Go".
  3. Start een lus.
  4. Rij door het doolhof. Wanneer de uitgang is bereikt, wordt de lus verlaten.
  5. Geef op het scherm van de steen de kruispunten weer die tot nu toe in het doolhof zijn gevonden.
  6. Controleer of het pad moet worden ingekort.
  7. Geef de kruispunten in het verkorte pad weer.
  8. Loop terug naar stap 4.
  9. Na de lus rijdt u het directe pad.

De schermafbeelding toont dit hoofdprogramma.

Stap 4: De Mijn Blokken (Subroutines)

De Mijn Blokken (Subroutines)
De Mijn Blokken (Subroutines)

De Navigate My Block, die bepaalt hoe de robot door het doolhof rijdt, wordt weergegeven. De afdruk is erg klein en mogelijk niet leesbaar. Maar het is een goed voorbeeld van hoe veelzijdig en krachtig de if-statements zijn (switches genoemd in het LEGO EV3-systeem).

  1. Pijl #1 wijst naar een schakelaar die controleert of de infraroodsensor een object meer dan een bepaalde afstand ziet. Als dat het geval is, wordt de bovenste reeks blokken uitgevoerd. Zo niet, dan wordt de controle doorgegeven aan de grote, onderste reeks blokken, waar pijl #2 zich bevindt.
  2. Pijl #2 wijst naar een schakelaar die controleert welke kleur de kleurensensor ziet. Er zijn 3 gevallen: geen kleur aan de bovenkant, rood in het midden en bruin aan de onderkant.
  3. Twee pijlen #3 wijzen naar schakelaars die controleren of de ultrasone sensor een object meer dan een bepaalde afstand ziet. Als dat het geval is, wordt de bovenste reeks blokken uitgevoerd. Zo niet, dan wordt de controle doorgegeven aan de onderste reeks blokken.

De Mijn Blokken voor het inkorten van het pad en voor het rijden van het directe pad zijn ingewikkelder en zouden totaal onleesbaar zijn, en zijn daarom niet opgenomen in dit document.

Stap 5: Beginnen met het bouwen van de robot: de basis

Beginnen met het bouwen van de robot: de basis
Beginnen met het bouwen van de robot: de basis
Beginnen met het bouwen van de robot: de basis
Beginnen met het bouwen van de robot: de basis

Zoals eerder vermeld, staat LEGO Mindstorms EV3 niet meer dan één van elk type sensor toe aan één steen. Ik heb de volgende sensoren gebruikt (in plaats van drie ultrasone sensoren): infraroodsensor, kleurensensor en ultrasone sensor.

De onderstaande fotoparen laten zien hoe de robot moet worden gebouwd. De eerste foto van elk paar toont de benodigde onderdelen, en de tweede foto toont dezelfde onderdelen met elkaar verbonden.

De eerste stap is om de basis van de robot te bouwen met behulp van de getoonde onderdelen. De robotbasis wordt ondersteboven weergegeven. Het kleine L-vormige deel aan de achterkant van de robot is een ondersteuning voor de rug. Het schuift terwijl de robot beweegt. Dit werkt oké. De EV3-kit heeft geen onderdeel van het rollende bal-type.

Stap 6: Bovenkant van de basis, 1

Bovenkant van de basis, 1
Bovenkant van de basis, 1
Bovenkant van de basis, 1
Bovenkant van de basis, 1

Deze stap en de volgende 2 stappen zijn voor de bovenkant van de basis van de robot, de kleurensensor en de kabels, allemaal kabels van 10 inch (26 cm).

Stap 7: Bovenkant van de basis, 2"

Bovenkant van de basis, 2
Bovenkant van de basis, 2
Bovenkant van de basis, 2
Bovenkant van de basis, 2

Stap 8: Bovenkant van de basis, 3"

Bovenkant van de basis, 3
Bovenkant van de basis, 3
Bovenkant van de basis, 3
Bovenkant van de basis, 3

Stap 9: Infrarood- en ultrasone sensoren

Infrarood- en ultrasone sensoren
Infrarood- en ultrasone sensoren
Infrarood- en ultrasone sensoren
Infrarood- en ultrasone sensoren

Vervolgens zijn de infraroodsensor (aan de linkerkant van de robot) en de ultrasone sensor (aan de rechterkant). Ook de 4 pinnen voor het bevestigen van de Brick bovenop.

De infrarood- en ultrasone sensoren zijn verticaal geplaatst in plaats van de normale horizontale. Dit zorgt voor een betere identificatie van de hoeken of uiteinden van de muren.

Stap 10: Kabels

Kabels
Kabels

De kabels worden als volgt op de Brick aangesloten:

  • Poort B: linker grote motor.
  • Poort C: rechts grote motor.
  • Poort 2: ultrasone sensor.
  • Poort 3: kleurensensor.
  • Poort 4: infraroodsensor.

Stap 11: Laatste stap bij het bouwen van de robot: decoratie

Laatste stap bij het bouwen van de robot: decoratie
Laatste stap bij het bouwen van de robot: decoratie
Laatste stap bij het bouwen van de robot: decoratie
Laatste stap bij het bouwen van de robot: decoratie

De vleugels en vinnen zijn alleen ter decoratie.

Stap 12: Bouw een doolhof

Bouw een doolhof
Bouw een doolhof
Bouw een doolhof
Bouw een doolhof

Twee golfkartonnen dozen zouden voldoende moeten zijn voor het doolhof. Ik heb de doolhofmuren 12,5 cm hoog gemaakt, maar 10 cm zou net zo goed moeten werken als je een tekort aan golfkarton hebt.

Eerst sneed ik rond de wanden van de dozen, 10 inch (25 cm) vanaf de onderkant. Daarna sneed ik rond de muren 5 inch vanaf de onderkant. Dit zorgt voor meerdere 5-inch muren. Ook sneed ik rond de bodems van de dozen, waarbij ik ongeveer 2,5 cm (1 inch) aan de muren liet voor stabiliteit.

De verschillende stukken kunnen worden gesneden en gelijmd of geplakt waar nodig om het doolhof te vormen. Er moet een ruimte van 11 of 12 inch (30 cm) zijn tussen de zijwanden in elk pad met een doodlopende weg. De lengte mag niet minder zijn dan 10 inch (25 cm). Deze afstanden zijn nodig om de robot te laten omdraaien.

Sommige hoeken van het doolhof moeten mogelijk worden versterkt. Ook moeten sommige rechte wanden niet buigen als ze een rechtgebogen kartonnen hoek hebben. Op die plaatsen moeten kleine stukjes dun karton op de bodem worden gelijmd, zoals afgebeeld.

De uitgang heeft een rode slagboom bestaande uit een halve rode wenskaartenvelop en een bodem van 2 stukken dun karton, zoals afgebeeld.

Stap 13: Het doolhof

Het doolhof
Het doolhof

Een waarschuwing is dat het doolhof niet groot mag zijn. Als de bochten van de robot een kleine hoek maken met de juiste, tellen de afwijkingen na een paar bochten op en kan de robot tegen de muren lopen. Ik moest verschillende keren spelen met de rotatie-instellingen van de bochten om zelfs door het kleine doolhof dat ik maakte een succesvolle rit te krijgen.

Een manier om dat probleem te omzeilen, is door een routine voor het rechttrekken van het pad op te nemen die de robot op een bepaalde afstand van de linkermuur houdt. Ik heb dit niet opgenomen. Het programma is al ingewikkeld genoeg en voldoende om het AI-concept in dit project te demonstreren.

SLOTOPMERKING

Dit was een leuk project en een geweldige leerervaring. Ik hoop dat u het ook interessant vindt.

Aanbevolen: