INHOUDSOPGAWE:

AI in LEGO EV3 Maze-Driving Robot: 13 stappe
AI in LEGO EV3 Maze-Driving Robot: 13 stappe

Video: AI in LEGO EV3 Maze-Driving Robot: 13 stappe

Video: AI in LEGO EV3 Maze-Driving Robot: 13 stappe
Video: AI in LEGO EV3 Maze-Driving Robot 2024, Julie
Anonim
Image
Image
Hoe 'n doolhof opgelos word
Hoe 'n doolhof opgelos word

Dit is 'n eenvoudige, outonome robot met kunsmatige intelligensie. Dit is bedoel om 'n doolhof te verken en om by die ingang terug te keer, deur na die uitgang te ry en die doodloopstrate te vermy. Dit is baie ingewikkelder as my vorige projek, wat eenvoudig deur die doolhof gery het. Hier moet die robot die pad wat hy afgelê het, onthou, doodloopstrate verwyder, die nuwe pad berg en die nuwe pad volg.

My vorige robot word hier beskryf:

Die robot is gebou met behulp van LEGO Mindstorms EV3. Die EV3 -sagteware loop op 'n rekenaar en genereer 'n program wat dan afgelaai word na 'n mikrobeheerder genaamd 'EV3 Brick'. Die programmeermetode is op ikone gebaseer en op hoë vlak. Dit is baie maklik en veelsydig.

Voorrade

DELE

  1. LEGO Mindstorms EV3 stel
  2. LEGO Mindstorms EV3 ultrasoniese sensor. Dit is nie ingesluit in die EV3 -stel nie.
  3. Golfkarton vir die doolhof. Twee kartonne moet voldoende wees.
  4. 'N Klein stukkie dun karton om sommige hoeke en mure te help stabiliseer.
  5. Plak en plak om kartonstukke aan mekaar te verbind.
  6. 'N Rooi wenskaartkoevert om die uitgang van die doolhof te identifiseer.

GEREEDSKAP

  1. Gereedskapsmes om die karton te sny.
  2. Staalliniaal om die snyproses te help.

SAGTEWARE

Die program is hier:

Stap 1: Hoe 'n doolhof opgelos word

DOLIETRYMETODE

Daar is verskillende metodes om deur 'n doolhof te navigeer. As u belangstel om dit te bestudeer, word dit baie goed beskryf in die volgende Wikipedia -artikel:

Ek het die linker-muur-volgende metode gekies. Die idee is dat die robot 'n muur aan sy linkerkant sal hou deur die volgende besluite te neem terwyl hy deur die doolhof gaan:

  1. As dit moontlik is om links te draai, doen dit.
  2. Andersins, gaan reguit indien moontlik.
  3. As dit nie links of regs kan gaan nie, draai regs, indien moontlik.
  4. As nie een van die bogenoemde moontlik is nie, moet dit 'n doodloopstraat wees. Draai om.

Een waarskuwing is dat die metode kan misluk as daar 'n lus in die doolhof is. Afhangende van die plasing van die lus, kan die robot om en om die lus bly. 'N Moontlike oplossing vir hierdie probleem is dat die robot na die regterkantste muurvolgreël oorskakel as hy besef dat hy in 'n lus gaan. Ek het hierdie verfyning nie by my projek ingesluit nie.

DIE DOLE OPLOS OM 'N DIREKTE WEG TE VIND

Terwyl hy deur die doolhof ry, moet die robot die pad waarop hy beweeg, onthou en doodloopstrate uitskakel. Dit bereik dit deur elke draai en kruising in 'n skikking op te slaan, te kyk na spesifieke kombinasies van draaie en kruisings soos dit gaan, en die kombinasies wat 'n doodloopstraat insluit, te vervang. Die finale lys van draaie en kruisings is die direkte pad deur die doolhof.

Die moontlike draaie is: links, regs, agter (in 'n doodloopstraat) en reguit (wat 'n kruising is).

Kombinasies word soos volg vervang:

  • 'Links, agter, links' word 'reguit'.
  • "Links, agter, regs" word "terug".
  • 'Links, agter, reguit' word 'regs'.
  • "Regs, agter, links" word "terug".
  • 'Reguit, agter, links' word 'regs'.
  • 'Reguit, terug, reguit' word 'terug'.

HOE HET DIE ROBOT MY DOLE HANTERING

  1. As die robot begin ry, sien hy 'n spasie na regs en stoor Straight in die lys in die skikking.
  2. Dan draai dit links en voeg links by die lys. Die lys bevat nou: Reguit, Links.
  3. Met 'n doodloopstraat draai dit om en voeg dit terug by die lys. Die lys bevat nou: Reguit, Links, Agter.
  4. Deur die baan wat hy gebruik het, by die ingang verby te voeg, voeg dit Straight by die lys. Die lys bevat nou: Reguit, Links, Terug, Reguit. Dit herken 'n kombinasie en verander links, agter, reguit na regs. Die lys bevat nou Straight, Right.
  5. Met 'n doodloopstraat draai dit om en voeg dit terug by die lys. Die lys bevat nou: Reguit, Regs, Terug.
  6. Na die draai links, bevat die lys Straight, Right, Back, Left. Dit herken 'n kombinasie en verander regs, agter, links na agter. Die lys bevat nou Straight, Back.
  7. Na die volgende draai links, bevat die lys Straight, Back, Left. Dit verander die kombinasie na Regs. Die lys bevat nou slegs Right.
  8. Dit gaan oor 'n spasie en voeg Straight by die lys. Die lys bevat nou Right, Straight.
  9. Na die regter draai bevat die lys regs, reguit, regs, wat die direkte pad is.

Stap 2: Oorwegings by die programmering van die robot

OORWEGINGS VIR ENIGE MIKROKONTROLEURDER

As die robot besluit om te draai, moet hy óf 'n wye draai maak, óf 'n kort entjie vorentoe gaan voordat hy draai, en nadat hy gedraai het, weer 'n entjie vorentoe gaan sonder om die sensor te kontroleer. Die rede vir die eerste kort afstand is dat die robot nie na die draai in die muur sou hoef te stamp nie, en die rede vir die tweede kort afstand is dat die sensor na die draai van die robot die lang ruimte sou sien waarvandaan hy gekom het, en die robot sou dink dat dit weer moet draai, wat nie die regte ding is om te doen nie.

As die robot 'n kruising aan die regterkant waarneem, maar dit is nie 'n regter draai nie, het ek gevind dat dit goed is om die robot ongeveer 25 cm vooruit te laat ry sonder om sy sensors na te gaan.

OORWEGINGS SPESIFIEK AAN LEGO MINDSTORMS EV3

Hoewel LEGO Mindstorms EV3 baie veelsydig is, kan dit nie meer as een van elke tipe sensor wat aan een baksteen gekoppel is, toelaat nie. Twee of meer bakstene kan daisy-vasgeketting wees, maar ek wou nie 'n ander baksteen koop nie, en daarom gebruik ek die volgende sensors (in plaas van drie ultrasoniese sensors): infrarooi sensor, kleursensor en ultrasoniese sensor. Dit het goed uitgewerk.

Maar die kleursensor het 'n baie kort reikafstand van ongeveer 5 cm, wat lei tot 'n paar spesiale oorwegings soos hieronder beskryf:

  1. As die kleursensor 'n muur aan die voorkant opspoor en die robot besluit om regs te draai of om te draai, moet hy eers 'n rugsteun maak om genoeg ruimte te gee om te draai sonder om teen die muur te stamp.
  2. Daar is 'n ingewikkelde probleem met sommige "reguit" kruisings. As gevolg van die kort bereik van die kleursensor, kan die robot nie bepaal of hy 'n behoorlike 'reguit' kruising waarneem of die aanloop tot 'n regsdraai nie. Ek het probeer om hierdie probleem op te los deur die program op te stel om 'n 'Straight' in die lys te stoor elke keer as die robot een waarneem en dan meer as een 'Straight' in 'n ry in die lys uit te skakel. Dit stel die situasie reg waar 'n regsdraai 'n 'reguit' in die doolhof volg, maar nie die situasie waar daar 'n regsdraai is sonder 'n 'reguit' daarvoor nie. Ek het ook probeer om die program op te stel om 'n 'Straight' uit te skakel as dit net voor 'n 'Right' is, maar dit werk nie as 'n regsdraai 'n 'Straight' volg nie. Ek kon nie 'n oplossing vind wat in alle gevalle pas nie, maar ek veronderstel dat dit moontlik sou wees vir die robot om na die afgelegde afstand te kyk (deur die motorrotasiesensors te lees) en te besluit of dit 'reguit' of 'regs' is draai. Ek het nie gedink dat hierdie komplikasie die moeite werd was om die AI -konsep in hierdie projek aan te toon nie.
  3. 'N Voordeel van die kleursensor is dat dit onderskei tussen die bruin van 'n muur en die rooi van die versperring wat ek by die uitgang gebruik het, en dat die robot maklik kan besluit wanneer hy die doolhof voltooi het.

Stap 3: Die hoofprogram

Die hoofprogram
Die hoofprogram

LEGO Mindstorms EV3 het 'n baie handige ikoon-gebaseerde programmeermetode. Blokke word aan die onderkant van die skerm op die rekenaar vertoon en kan in die programmeringsvenster gesleep word om 'n program te bou. Die EV3 Brick kan met 'n USB-kabel, Wi-Fi of Bluetooth aan die rekenaar gekoppel word, en die program kan dan van die rekenaar na die baksteen afgelaai word.

Die program bestaan uit 'n hoofprogram en verskeie "My Blocks" wat onderroetes is. Die opgelaaide lêer bevat die hele program, wat hier is:

Die stappe in die hoofprogram is soos volg:

  1. Definieer en initialiseer die draai-tel-veranderlike en die skikking.
  2. Wag 5 sekondes en sê 'Gaan'.
  3. Begin 'n lus.
  4. Ry deur die doolhof. As die uitgang bereik is, word die lus verlaat.
  5. Die kruisings wat tot dusver in die doolhof gevind is, word op die baksteen se skerm vertoon.
  6. Kyk of die pad verkort moet word.
  7. Wys die kruisings in die verkorte pad.
  8. Gaan terug na stap 4.
  9. Na die lus, ry die direkte pad.

Die skermkiekie toon hierdie hoofprogram.

Stap 4: The My Blocks (Subroutines)

The My Blocks (Subroutines)
The My Blocks (Subroutines)

Die Navigate My Block, wat bepaal hoe die robot deur die doolhof ry, word gewys. Die afdruk is baie klein en is moontlik nie leesbaar nie. Maar dit is 'n goeie voorbeeld van hoe veelsydig en kragtig die if-statements is (genoem skakelaars in die LEGO EV3-stelsel).

  1. Pyl #1 wys na 'n skakelaar wat kyk of die infrarooi sensor 'n voorwerp meer as 'n spesifieke afstand weg sien. Indien wel, word die boonste reeks blokke uitgevoer. Indien nie, word die beheer oorgedra na die groot, onderste reeks blokke, waar pyl #2 geleë is.
  2. Pyl #2 wys na 'n skakelaar wat kyk watter kleur die kleursensor sien. Daar is drie gevalle: geen kleur aan die bokant nie, rooi in die middel en bruin aan die onderkant.
  3. Twee pyle #3 wys op skakelaars wat kyk of die ultrasoniese sensor 'n voorwerp meer as 'n spesifieke afstand weg sien. Indien wel, word die boonste reeks blokke uitgevoer. Indien nie, word die beheer na die onderste reeks blokke oorgedra.

Die My Blocks vir die verkorting van die pad en die bestuur van die direkte pad is ingewikkelder en is heeltemal onleesbaar, en daarom word dit nie in hierdie dokument ingesluit nie.

Stap 5: Begin met die bou van die robot: die basis

Begin om die robot te bou: die basis
Begin om die robot te bou: die basis
Begin om die robot te bou: die basis
Begin om die robot te bou: die basis

Soos voorheen genoem, kan LEGO Mindstorms EV3 nie meer as een van elke tipe sensor wat aan een baksteen gekoppel is, toelaat nie. Ek het die volgende sensors gebruik (in plaas van drie ultrasoniese sensors): infrarooi sensor, kleursensor en ultrasoniese sensor.

Die pare foto's hieronder wys hoe u die robot kan bou. Die eerste foto van elke paar toon die benodigde dele, en die tweede foto toon dieselfde dele wat aan mekaar verbind is.

Die eerste stap is om die basis van die robot te bou met behulp van die getoonde dele. Die robotbasis word onderstebo getoon. Die klein L-vormige deel aan die agterkant van die robot is 'n steun vir die rug. Dit gly terwyl die robot beweeg. Dit werk goed. Die EV3-stel het nie 'n rolbal nie.

Stap 6: Bo -op die basis, 1

Bo -op die basis, 1
Bo -op die basis, 1
Bo -op die basis, 1
Bo -op die basis, 1

Hierdie stap en die volgende 2 stappe is vir die bokant van die basis van die robot, die kleursensor en die kabels, wat almal 26 cm (10 duim) kabels is.

Stap 7: Bo -op die basis, 2

Bo -op die basis, 2
Bo -op die basis, 2
Bo -op die basis, 2
Bo -op die basis, 2

Stap 8: Bo -op die basis, 3

Bo -op die basis, 3
Bo -op die basis, 3
Bo -op die basis, 3
Bo -op die basis, 3

Stap 9: Infrarooi en ultrasoniese sensors

Infrarooi en ultrasoniese sensors
Infrarooi en ultrasoniese sensors
Infrarooi en ultrasoniese sensors
Infrarooi en ultrasoniese sensors

Vervolgens is die infrarooi sensor (aan die linkerkant van die robot) en die ultrasoniese sensor (aan die regterkant). Ook die 4 penne om die baksteen bo -op vas te maak.

Die infrarooi en ultrasoniese sensors is vertikaal geleë in plaas van die normale horisontaal. Dit bied 'n beter identifisering van die hoeke of punte van die mure.

Stap 10: Kabels

Kabels
Kabels

Die kabels sluit soos volg aan op die Brick:

  • Poort B: linker groot motor.
  • Poort C: regter groot motor.
  • Poort 2: ultrasoniese sensor.
  • Poort 3: kleursensor.
  • Poort 4: infrarooi sensor.

Stap 11: Laaste stap in die bou van die robot: versiering

Laaste stap in die bou van die robot: versiering
Laaste stap in die bou van die robot: versiering
Laaste stap in die bou van die robot: versiering
Laaste stap in die bou van die robot: versiering

Die vlerke en vinne is slegs vir versiering.

Stap 12: Bou 'n doolhof

Bou 'n doolhof
Bou 'n doolhof
Bou 'n doolhof
Bou 'n doolhof

Twee karton kartonne moet genoeg wees vir die doolhof. Ek het die doolhofmure 12,5 cm hoog gemaak, maar 10 cm (4 duim) behoort net so goed te werk as jy 'n golfkarton kort.

Eers sny ek om die mure van die kartonne, 25 cm van die onderkant af. Toe sny ek 5 m van die onderkant om die mure. Dit bied verskeie 5-duim mure. Ek sny ook die onderkant van die kartonne om en laat ongeveer 2,5 cm aan die mure vas vir stabiliteit.

Die verskillende stukke kan gesny en vasgeplak of vasgemaak word waar nodig om die doolhof te vorm. Daar moet 'n spasie van 30 cm tussen die sywande wees op enige pad met 'n doodloopstraat. Die lengte moet nie minder as 25 cm (10 duim) wees nie. Hierdie afstande is nodig om die robot om te draai.

Sommige hoeke van die doolhof moet dalk versterk word, en sommige reguit mure moet nie buig as dit 'n reguit kartondoek bevat nie. Klein stukkies dun karton moet op die plekke aan die onderkant vasgeplak word, soos aangedui.

Die uitgang het 'n rooi versperring wat bestaan uit 'n halwe rooi wenskaartkoevert en 'n basis gemaak van 2 stukke dun karton, soos getoon.

Stap 13: Die doolhof

Die doolhof
Die doolhof

Een waarskuwing is dat die doolhof nie groot moet wees nie. As die draai van die robot effens van die regte kant af is, kom die afwykings na 'n paar draaie bymekaar en kan die robot teen die mure vasloop. Ek moes verskeie kere vroetel oor die rotasie -instellings van die draaie om 'n suksesvolle rit deur die klein doolhof te kry wat ek gemaak het.

Die probleem is om 'n roetine wat reguit is, in te sluit wat die robot op 'n spesifieke afstand van die linkermuur hou. Ek het dit nie ingesluit nie. Die program is ingewikkeld genoeg, en dit is voldoende om die AI -konsep in hierdie projek aan te toon.

SLOTOPMERKING

Dit was 'n prettige projek en 'n wonderlike leerervaring. Ek hoop dat u dit ook interessant vind.

Aanbeveel: