INHOUDSOPGAWE:

IRobot Create-Mars Expedition Rover Mark I: 4 stappe
IRobot Create-Mars Expedition Rover Mark I: 4 stappe

Video: IRobot Create-Mars Expedition Rover Mark I: 4 stappe

Video: IRobot Create-Mars Expedition Rover Mark I: 4 stappe
Video: Обнаружение скрытого UAP? | Выжить в черной дыре с Ави Лоэбом Obnaruzheniye skrytogo UAP? Avi Loebom 2024, November
Anonim
IRobot Create-Mars Expedition Rover Mark I
IRobot Create-Mars Expedition Rover Mark I

Hierdie instruksies sal u leer hoe u die iRobot Create kan opstel deur MatLab -kodering te gebruik. Jou robot het die vermoë om na minerale te soek deur vorms te onderskei, ruwe terrein te bestuur deur die gebruik van kransensors, en kan met die hand beheer word via 'n lewendige voer.

Stap 1: Voorrade

Voorrade
Voorrade

Vir hierdie projek benodig u die iRobot Create, 'n programmeerbare weergawe van die Roomba -robotstofsuier. Die robot is toegerus met al die sensors wat nodig is vir hierdie projek, spesifiek stampsensors, kransensors en "Light Bump" -sensors. U benodig ook 'n Raspberry Pi- en videokamera wat gebruik word vir draadlose kommunikasie, regstreekse programmering en die lewendige videostroom. Uiteindelik benodig u 'n 3D -gedrukte houer vir die Raspberry Pi en die kamera.

Stap 2: Ontwikkel kodering om die gewenste uitkoms te bevredig

Ontwikkel kodering om die gewenste uitkoms te bevredig
Ontwikkel kodering om die gewenste uitkoms te bevredig

Nadat u u Roomba gekoppel het, moet u 'n Matlab -kode skep wat u die gewenste uitsette gee na die gewenste insette.

Die kode kan hier gesien word:

%Roomba -projek%Brenten Arnold (barnol15); Julianne Korn (qdp218); Mike Heal (mheal) %4/11/19 %Probleembeskrywing: Skep 'n rover om mense te help tydens die verkenning/bewoning van mars. %Oplossingsmetode: Soek na organiese (groen) materiaal deur gebruik te maak van %ligte buffers, kransensors en kamera om na organiese materiaal te kyk. Laat %die rover toe om deur rowwe terrein te navigeer deur die gebruik van buffers, krans %sensors en wielhoogtesensors. Stel mense in staat om die rover vanaf 'n veilige afstand van %af te beheer en handmatig na minerale te soek. keuses = {'LEWE', 'ROUGH TERRAIN', 'USER CONTROL'}; %Drie opsies in die dialoogkieslys Instelling = spyskaart ('', keuses) as instelling> 0 %As opsie gekies, vra gebruikersbevestiging keuses2 = {'Ja', 'Nee'} %Skep 'n selskikking vir "ja" of "nee" "choice Bevestig = spyskaart (['U het gekies' 'keuses {Instelling}'" modus. '], keuses2) %Bevestig keuse van gebruikerinstelling as Bevestig == 1 as Instelling == 1 %Kontroleer of "LEWE" instelling gekies is i = 0 terwyl i == 0 r.setLEDDigits (num2str ('LIFE')) %Wys 'LIFE' op LED vir i = 1: 100 r.setDriveVelocity (0.05) %Beweeg roomba vorentoe op 0.05 m/sy = r.getCliffSensors %Haal kransensorwaardes op en stoor dit in selstruktuur "y" l = r.getLightBumpers %Haal ligstampwaardes op en stoor dit in struktuur "f" as l.links> 100 %Kontroleer of linkerligbuffer bedek is r.moveDistance (-0.05) %Beweeg roomba agteruit 0,05 meter r.turnAngle (20) %Draai roomba 20 grade CCW img = r.getImage %Kry beeld van framboostertkamera op roomba rect = [100 0 150 150]; img = imcrop (img, reg) %gewasbeeld om te fokus op middelrooi = gemiddelde (gemiddelde (img (:,:, 1))) %gemiddelde rooi intensiteit groen = gemiddelde (gemiddelde (img (:,:, 2))) %gemiddelde groen intensiteit blou = gemiddelde (gemiddelde (afb (:,:, 3)))) gemiddelde gemiddelde blouintensiteit as groen> rooi && groen> blou %Kyk of plant in die prentjie is d = msgbox (['Lewe gevind! ']); Wys 'n boodskapkassie met die woord "Lewe gevind!" wag (d); einde andersif l.linksFront> 100 %Check is links/voorligbuffer is bedek r.moveDistance (-0.05) %Beweeg roomba agteruit 0.05 meter img = r.getImage %Kry beeld van framboostertkamera op roomba en stoor in veranderlike 'img 'rect = [100 0 150 150]; img = imcrop (img, reg) %gewasbeeld om te fokus op middelrooi = gemiddelde (gemiddelde (img (:,:, 1))) %gemiddelde rooi intensiteit groen = gemiddelde (gemiddelde (img (:,:, 2))) %gemiddelde groen intensiteit blou = gemiddelde (gemiddelde (img (:,:, 3)))) %gemiddelde blou intensiteit as groen> rooi && groen> blou %Kyk of plant in die prentjie is d = msgbox (['Lewe gevind! ']); Wys 'n boodskapkassie met die woord "Lewe gevind!" wag (d); einde andersif l.linksCenter> 100 %Kontroleer of linker/middel ligte buffer bedek is r.moveDistance (-0.05) %Beweeg roomba agteruit 0.05 meter img = r.getImage %Kry beeld van framboostaart kamera op roomba en stoor in veranderlike 'img 'rect = [100 0 150 150]; img = imcrop (img, reg) %gewasbeeld om te fokus op middelrooi = gemiddelde (gemiddelde (img (:,:, 1))) %gemiddelde rooi intensiteit groen = gemiddelde (gemiddelde (img (:,:, 2))) %gemiddelde groen intensiteit blou = gemiddelde (gemiddelde (img (:,:, 3)))) %gemiddelde blou intensiteit as groen> rooi && groen> blou %Kyk of plant in die prentjie is d = msgbox (['Lewe gevind! ']); Wys 'n boodskapkassie met die woord "Lewe gevind!" wag (d); einde andersif l.rightCenter> 100 %Kontroleer of die regter/middelste bumper bedek is r.moveDistance (-0.05) %Beweeg roomba 0,05 meter agteruit img = r.getImage %Kry beeld van die framboostaartkamera op roomba en stoor dit in veranderlike 'img 'rect = [100 0 150 150]; img = imcrop (img, reg) %gewasbeeld om te fokus op middelrooi = gemiddelde (gemiddelde (img (:,:, 1))) %gemiddelde rooi intensiteit groen = gemiddelde (gemiddelde (img (:,:, 2))) %gemiddelde groen intensiteit blou = gemiddelde (gemiddelde (img (:,:, 3)))) %gemiddelde blou intensiteit as groen> rooi && groen> blou %Kyk of plant in die prentjie is d = msgbox (['Lewe gevind! ']); Wys 'n boodskapkassie met die woord "Lewe gevind!" wag (d); einde andersif l.rightFront> 100 %Kontroleer of die regter-/voorligbuffer bedek is r.moveDistance (-0.05) %Beweeg roomba agteruit 0,05 meter img = r.getImage %Kry beeld van framboostertkamera op roomba en stoor in veranderlike 'img 'rect = [100 0 150 150]; img = imcrop (img, reg) %gewasbeeld om te fokus op middelrooi = gemiddelde (gemiddelde (img (:,:, 1))) %gemiddelde rooi intensiteit groen = gemiddelde (gemiddelde (img (:,:, 2))) %gemiddelde groen intensiteit blou = gemiddelde (gemiddelde (img (:,:, 3)))) %gemiddelde blou intensiteit as groen> rooi && groen> blou %Kyk of plant in die prentjie is d = msgbox (['Lewe gevind! ']); Wys 'n boodskapkassie met die woord "Lewe gevind!" wag (d); einde anders as l.regs> 100 %Kyk of die regterbuffer bedek is r.moveDistance (-0.05) %Beweeg roomba agteruit 0.05 meter r.turnAngle (-20) %Draai roomba 20 grade CW img = r.getImage %Kry beeld van framboostertkamera op roomba en stoor in veranderlike 'img' rect = [100 0 150 150]; img = imcrop (img, reg) %gewasbeeld om te fokus op middelrooi = gemiddelde (gemiddelde (img (:,:, 1))) %gemiddelde rooi intensiteit groen = gemiddelde (gemiddelde (img (:,:, 2))) %gemiddelde groen intensiteit blou = gemiddelde (gemiddelde (img (:,:, 3)))) %gemiddelde blou intensiteit as groen> rooi && groen> blou %Kyk of plant in die prentjie is d = msgbox (['Lewe gevind! ']); Wys 'n boodskapkassie met die woord "Lewe gevind!" wag (d); einde anders as y.links Voor <1500 %Kyk of die linker/voorste gedeelte van die kamerba van die krans af is r.moveDistance (-0.1, 0.05) %Beweeg roomba 0.1 meter agteruit teen 0.05 m/s r.turnAngle (-5) %Draai roomba 5 grade CW anders as y.rightFront <1500 %Kontroleer of die regter-/voorkant van die kamerba van die krans af is r.move Afstand (-0,1, 0,05) %Beweeg roomba 0,1 meter agteruit teen 0,05 m/s r. draai Hoek (5) %Draai roomba 5 grade CCW anders as y.links <1000 %Kyk of die linkerkant van die kamerba van die krans af is r.move Afstand (-0,05, 0,05) %Beweeg roomba 0,05 meter agteruit by 0,05 m/s r.turnAngle (-10) %Draai roomba 10 grade CW anders as y.right0 %Begin as die knoppie ingedruk word as Voortgaan == 1 i = 0 %Gaan voort na die lewe anders i = 1 %Einde LIFE -modus einde einde einde anders Instelling == 2 %Kyk of die instelling "ROUGH TERRAIN" gekies is i = 0 terwyl i == 0 r.setLEDDigits (num2str ('RGH')) %Wys 'Rough' op LED -skerm vir i = 1: 1000 r.setDriveVelocity (0.05) %Stel roomba -dryfsnelheid in op 0.05 m/sx = r.getBumpers %Haal bumpersensorwaardes op en stoor dit in struktuur "x" y = r.get CliffSensors %Haal kranksensorwaardes op en stoor dit in struktuur "y" as x.right == 1 %Kontroleer of regterbuffer ingedruk word r.turnAngle (10) %Draai roomba 10 grade CCW elseif..links == 1 %Kyk of dit links is bumper word ingedruk r.turnAngle (-10) %Draai roomba 10 grade CW anders as x.front == 1 %Kyk of voorbuffer gedruk word r.turnAngle (20) %Draai roomba 20 grade CCW elseif x.rightWheelDrop == 1 % Kontroleer of regterwiel r.turnAngle (-20) %gedaal het Draai roomba 20 grade CW anders as x.leftWheelDrop == 1 %Check is linkerwiel het r.turnAngle (20) gedraai draai Roomba 20 grade CCW anders as y.leftFront < 1500 %Kyk of die linker linker gedeelte van die kamerba van die krans af is r.move Afstand (-0,05, 0,05) %Beweeg roomba 0,05 meter agteruit teen 0,05 m/s r. Draai Hoek (-5) %Draai roomba 5 grade CW anders as y.rightFront < 1500 %Kyk of die regter voorste gedeelte van roomba van die krans af is r.moveDistance (-0.05, 0.05) %Beweeg roomba 0,05 meter agteruit by 0,05 m/s r. Draai Hoek (5) %Draai roomba 5 grade CCW anders as y.links <1000 Kontroleer of die linker gedeelte o f roomba is van die krans af r.moveDistance (-0.05, 0.05)%Beweeg roomba 0,05 meter agteruit by 0,05 m/s r.turnAngle (-10)%Draai roomba 10 grade CW anders as y.right0 as voortgaan == 1 i = 0 %Gaan voort met rowwe terrein anders i = 1 %Beëindig rowwe terrein einde einde einde %Handmatige modus i = 0 r.setLEDDigits (num2str ('USER')) %Wys 'USER' op LED Display d = msgbox (['Pyltjie sleutels - Beweeg; S - Stop Rover; ESC - Eindgebruikerbeheer; A - Soek hulpbron ']); wag (d); terwyl i == 0 r.showCamera %Open rasberry pie camera live feed in aparte venster D = getkey (1) %Haal die sleutel ingedruk deur die gebruiker, stoor ASCII -waarde as veranderlike D as D == 30 %Kyk of die pyltjie "op" het is ingedruk r.setDriveVelocity (0.1) %Stuur roomba vorentoe met 0.2 m/s elseif D == 28 %Kyk of die pyltjie "links" gedruk is r.setDriveVelocity (0) %Stop roomba om vorentoe of agtertoe te beweeg r.turnAngle (15, 0,05) %Draai roomba 45 grade CCW teen 0,05 m/s elseif D == 31 %Kontroleer of "af" pyl ingedruk is r.setDriveVelocity (-0,1) %Beweeg roomba agteruit teen 0.2 m/s elseif D == 29 % Kontroleer of "regs" pyl ingedruk word r.setDriveVelocity (0) %Stop roomba om vorentoe of agtertoe te beweeg r.turnAngle (-15, 0.05) %Draai roomba 45 grade CW by 0.05 m/s andersif D == 27 %Kyk of die "esc" (ontsnap) sleutel is ingedruk i = 1 %Verander waarde van veranderlike "i" om lus te verlaat d = msgbox ('Verlaat "Gebruikersbeheer"') %Laat die gebruiker weet dat die handmatige modus verlaat word anders as D == 115 %Kyk of die "s" -toets ingedruk is r.setDriveVelocity (0) %Stop roomba van vorentoe of agtertoe anders as D == 97 %Kyk of "a" ingedruk is image = r.getImage; imwrite (image, 'image.png') W = Classify (image) K = mode (W) if K == 3 d = msgbox ('Resource found') %Wys as reghoekige hulpbron opgespoor word waitfor (d); %Wag totdat die gebruiker die boodskapblokkie "d" sluit, anders as K == 0 d = msgbox ('Nie hulpbron nie:(') %Wys as 'n reghoekige hulpbron nie opgespoor word nie wag vir (d); %Wag totdat die gebruiker die boodskapblokkie 'd' toemaak eindig anders d = msgbox ('Nie 'n geldige sleutelinvoer nie.') %Wys as gebruiker 'kies instelling' kieslys sluit wag vir (d); %Wag totdat gebruiker die boodskapblokkie sluit 'd' einde wag vir (d); %Wag vir gebruiker om boodskapkassie "d" te sluit einde einde einde anders d = msgbox ('totsiens') %Sê totsiens as opsies gesluit is einde wag vir (d);

Stap 3: Toets

Toets
Toets

Nadat u kode geskryf is, moet u u Roomba toets. Alhoewel u kode korrek lyk, moet baie van u waardes, veral vir kleur of vorm, verander word om die voorwerpe wat u wil hê u Roomba moet identifiseer, behoorlik te herken.

Stap 4: Let op visuele uitsette

Let op visuele uitsette
Let op visuele uitsette
Let op visuele uitsette
Let op visuele uitsette

Dit sal baie duidelik wees of u u Roomba suksesvol geprogrammeer het op grond van sy visuele uitsette.

Uitsette sluit in:

  • Vormopsporing: die Roomba se vermoë om vorms behoorlik te onderskei om die korrekte minerale te vind
  • Ruwe terreinmaneuvers: vermy kranse of donker gebiede
  • Handmatige modus: lewendige voer en die vermoë om die Roomba te beheer
  • Foto's: Foto's van minerale
  • Lewe gevind !: 'n MatLab -tekskassie wat aandui dat u plant organiese lewe geïdentifiseer het.

Dit is die einde van ons tutoriaal, geniet u nuwe Mars Expedition Rover!

Aanbeveel: