Përmbajtje:

IRobot Krijo-Mars Expedition Rover Mark I: 4 hapa
IRobot Krijo-Mars Expedition Rover Mark I: 4 hapa

Video: IRobot Krijo-Mars Expedition Rover Mark I: 4 hapa

Video: IRobot Krijo-Mars Expedition Rover Mark I: 4 hapa
Video: DARC: Mars Exploration Robotics 2024, Nëntor
Anonim
IRobot Krijo-Mars Expedition Rover Mark I
IRobot Krijo-Mars Expedition Rover Mark I

Ky udhëzues do t'ju mësojë se si të vendosni iRobot Krijo duke përdorur kodimin MatLab. Roboti juaj do të ketë aftësinë të kërkojë minerale duke dalluar format, të manovrojë terrenin e thyer përmes përdorimit të sensorëve të shkëmbinjve dhe ka aftësinë të kontrollohet manualisht nëpërmjet një ushqimi të drejtpërdrejtë.

Hapi 1: Furnizimet

Furnizimet
Furnizimet

Për këtë projekt, do t'ju duhet një iRobot Create, i cili është një version i programueshëm i fshesës me korrent robota Roomba. Roboti vjen i pajisur me të gjithë sensorët e nevojshëm për këtë projekt, veçanërisht sensorë të përplasjes, sensorë të shkëmbinjve dhe sensorë "Light Bump". Ju gjithashtu do të keni nevojë për një Raspberry Pi dhe video kamera, të përdorura për komunikim pa tel, programim të drejtpërdrejtë dhe video të drejtpërdrejtë. Së fundmi, do t'ju duhet një montim i printuar 3D për Raspberry Pi dhe kamerën.

Hapi 2: Zhvilloni kodim për të kënaqur rezultatin e dëshiruar

Zhvilloni kodim për të kënaqur rezultatin e dëshiruar
Zhvilloni kodim për të kënaqur rezultatin e dëshiruar

Pasi të keni lidhur Roomba -n tuaj, do t'ju duhet të krijoni një kod Matlab që do t'ju japë rezultatet e dëshiruara pas hyrjeve tuaja të dëshiruara.

Kodi mund të shihet këtu:

%Roomba Project%Brenten Arnold (barnol15); Julianne Korn (qdp218); Mike Heal (mheal) %4/11/19 %Përshkrimi i problemit: Krijoni një rover për të ndihmuar njerëzit gjatë %eksplorimit/banimit të Marsit. %Metoda e zgjidhjes: Kërkoni lëndë organike (jeshile) përmes përdorimit të %parakolpave të dritës, sensorëve të shkëmbinjve dhe kamerës për të kontrolluar për lëndë organike. Lejoni %rover të lundrojë në terren të ashpër përmes përdorimit të parakolpave, sensorëve të shkëmbit dhe sensorëve të lartësisë së rrotave. Mundësojini njerëzve të kontrollojnë roverin nga %një distancë të sigurt dhe të kërkojnë me dorë minerale. zgjedhje = {'LIFE', 'TERRAIN E RUGH', 'KONTROLLI I PERRDORUESIT'}; %Tre opsione në menunë e dialogut Cilësimi = menyja ('', zgjedhjet) nëse Cilësimi> 0 %Nëse opsioni i zgjedhur kërkoni për zgjedhjet e konfirmimit të përdoruesit2 = {'Po', 'Jo'} %Krijoni një grup qelizash për "po" ose "Jo "zgjedhja Konfirmo = menunë (['Ti zgjodhe"' zgjedhjet {Cilësimi} '"modaliteti.'], zgjedhjet2) %Konfirmo zgjedhjen e cilësimit të përdoruesit nëse Konfirmo == 1 nëse Cilësimi == 1 %Kontrollo nëse cilësimi" LIFE "është zgjedhur i = 0 ndërsa i == 0 r.setLEDDigits (num2str ('LIFE')) %Afisho 'LIFE' në LED për i = 1: 100 r.setDriveVelocity (0.05) %Zhvendos dhomën përpara në 0.05 m/sy = r.getCliffSensors %Rikuperoni dhe ruani vlerat e sensorit të shkëmbit në strukturën e qelizës "y" l = r.getLightBumpers %Merrni dhe ruani vlerat e përplasjes së dritës në strukturën "f" nëse l.majtas> 100 %Kontrolloni nëse parakolpi i dritës së majtë është i mbuluar r.moveDistanca (-0.05) %Lëviz dhomën prapa 0.05 metra r.tornAngle (20) %Rrotullo dhomën 20 gradë CCW img = r.getImage %Merr imazh nga kamera e byrekut të mjedrës në roomba rect = [100 0 150 150]; img = imcrop (img, rect) %prerje e imazhit për t'u përqëndruar në të kuqe të mesme = mesatarja (mesatarja (img (:,,, 1))) %intensiteti mesatar i kuq jeshil = mesatarja (mesatarja (img (:,,, 2))) %intensiteti mesatar i gjelbër blu = mesatarja (mesatarja (img (:,,, 3))) %intensiteti mesatar blu nëse e gjelbër> e kuqe && jeshile> blu %Kontrolloni nëse bima është në figurë d = msgbox (['Jeta u gjet! ']); %Shfaq një kuti mesazhi duke thënë "Jeta u gjet!" prit (d); fundi tjetër l.majtaspërpara> 100 %Kontrolli është lënë/parakolpi i dritës së përparme është i mbuluar r.moveDistanca (-0.05) %Lëviz dhomën mbrapa 0.05 metra img = r.getImage %Merr imazh nga kamera e byrekut të mjedrës në roomba dhe ruaj në variabile 'img 'rect = [100 0 150 150]; img = imcrop (img, rect) %prerje e imazhit për t'u përqëndruar në të kuqe të mesme = mesatarja (mesatarja (img (:,,, 1))) %intensiteti mesatar i kuq jeshil = mesatarja (mesatarja (img (:,,, 2))) %intensiteti mesatar i gjelbër blu = mesatarja (mesatarja (img (:,,, 3))) %intensiteti mesatar blu nëse e gjelbër> e kuqe && jeshile> blu %Kontrolloni nëse bima është në figurë d = msgbox (['Jeta u gjet! ']); %Shfaq një kuti mesazhi duke thënë "Jeta u gjet!" prit (d); fundi tjetër l.leftCenter> 100 %Kontrolloni nëse parakolpi i dritës së majtë/qendrore është i mbuluar r.moveDistanca (-0.05) %Zhvendosni dhomën mbrapa 0.05 metra img = r.getImage %Merrni imazh nga kamera e byrekut të mjedrës në roomba dhe ruani në variabël 'img 'rect = [100 0 150 150]; img = imcrop (img, rect) %prerje e imazhit për t'u përqëndruar në të kuqe të mesme = mesatarja (mesatarja (img (:,,, 1))) %intensiteti mesatar i kuq jeshil = mesatarja (mesatarja (img (:,,, 2))) %intensiteti mesatar i gjelbër blu = mesatarja (mesatarja (img (:,,, 3))) %intensiteti mesatar blu nëse jeshile> e kuqe && jeshile> blu %Kontrolloni nëse bima është në figurë d = msgbox (['Jeta u gjet! ']); %Shfaq një kuti mesazhi duke thënë "Jeta u gjet!" prisni (d); fundi tjetër l.rightCenter> 100 %Kontrolloni nëse parakolpi i dritës në të djathtë/të mesme është i mbuluar r.moveDistanca (-0.05) %Zhvendosni dhomën mbrapa 0.05 metra img = r.getImage %Merrni imazh nga kamera e byrekut të mjedrës në roomba dhe ruani në variabël 'img 'rect = [100 0 150 150]; img = imcrop (img, rect) %prerja e figurës për t'u përqëndruar në të kuqe të mesme = mesatarja (mesatarja (img (:,,, 1))) %intensiteti mesatar i kuq jeshil = mesatarja (mesatarja (img (:,,, 2))) %intensiteti mesatar i gjelbër blu = mesatarja (mesatarja (img (:,,, 3))) %intensiteti mesatar blu nëse e gjelbër> e kuqe && jeshile> blu %Kontrolloni nëse bima është në figurë d = msgbox (['Jeta u gjet! ']); %Shfaq një kuti mesazhi duke thënë "Jeta u gjet!" prit (d); fundi tjetër l.rightF front> 100 %Kontrolloni nëse parakolpi i dritës së djathtë/të përparme është i mbuluar r.moveDistanca (-0.05) %Zhvendosni dhomën mbrapa 0.05 metra img = r.getImage %Merrni imazh nga kamera e byrekut të mjedrës në roomba dhe ruani në variabël 'img 'rect = [100 0 150 150]; img = imcrop (img, rect) %prerje e imazhit për t'u përqëndruar në të kuqe të mesme = mesatarja (mesatarja (img (:,,, 1))) %intensiteti mesatar i kuq jeshil = mesatarja (mesatarja (img (:,,, 2))) %intensiteti mesatar i gjelbër blu = mesatarja (mesatarja (img (:,,, 3))) %intensiteti mesatar blu nëse jeshile> e kuqe && jeshile> blu %Kontrolloni nëse bima është në figurë d = msgbox (['Jeta u gjet! ']); %Shfaq një kuti mesazhi duke thënë "Jeta u gjet!" prisni (d); fundi tjetër l.djathtas> 100 %Kontrolloni nëse parakolpi i dritës së djathtë është i mbuluar r.moveDistanca (-0.05) %Lëviz dhomën mbrapa 0.05 metra r.turnAngle (-20) %Rrotullo dhomën për 20 gradë CW img = r.getImage %Merr imazhin nga kamera me byrek me mjedër në roomba dhe ruani në variablin 'img' rect = [100 0 150 150]; img = imcrop (img, rect) %prerje e imazhit për t'u përqëndruar në të kuqe të mesme = mesatarja (mesatarja (img (:,,, 1))) %intensiteti mesatar i kuq jeshil = mesatarja (mesatarja (img (:,,, 2))) %intensiteti mesatar i gjelbër blu = mesatarja (mesatarja (img (:,,, 3))) %intensiteti mesatar blu nëse e gjelbër> e kuqe && jeshile> blu %Kontrolloni nëse bima është në figurë d = msgbox (['Jeta u gjet! ']); %Shfaq një kuti mesazhi duke thënë "Jeta u gjet!" prisni (d); fundi tjetër y.left Përpara <1500 %Kontrolloni nëse pjesa e majtë/e përparme e dhomës është jashtë shkëmbit r.move Largësia (-0.1, 0.05) %Lëviz dhomën mbrapa 0.1 metra në 0.05 m/s r.turnAngle (-5) %Rrotullo dhomën 5 gradë CW elseif y.jathtë Përpara <1500 %Kontrolloni nëse pjesa e djathtë/e përparme e dhomës është jashtë shkëmbit r.move Largësia (-0.1, 0.05) %Zhvendosni dhomën mbrapa 0.1 metra me shpejtësi 0.05 m/s r. ktheseAngle (5) %Rrotulloni dhomën 5 gradë CCW tjetër nëse y.majtas <1000 %Kontrolloni nëse ana e majtë e dhomës është jashtë shkëmbit r.move Largësia (-0.05, 0.05) %Zhvendos dhomën mbrapa 0.05 metra në 0.05 m/s r. ktheseAngle (-10) %Rrotullo dhomën 10 gradë CW elseif y.right0 %Run nëse shtypet butoni nëse Vazhdo == 1 i = 0 %Vazhdo të kërkosh për jetën tjetër i = 1 %Përfundo modalitetin LIFE përfundoj fund përfundoj elseif Cilësimi == 2 %Kontrolloni nëse është zgjedhur cilësimi "TERRAIN I RUGH" i = 0 ndërsa i == 0 r.setLEDDigits (num2str ('RGH')) %Display 'Rough' në LED Display për i = 1: 1000 r.setDriveVelocity (0.05) %Cakto shpejtësinë e vozitjes roomba në 0.05 m/sx = r.getBumpers %Merrni dhe ruani vlerat e sensorit të parakolpit në strukturën "x" y = r.get CliffSensors %Merrni dhe ruani vlerat e sensorit të shkëmbit në strukturën "y" nëse x.right == 1 %Kontrolloni nëse shtypet parakolpi i djathtë r.turnAngle (10) %Rrotulloni dhomën për 10 gradë CCW elseif x.left == 1 %Kontrolloni nëse ka mbetur parakolp shtypet r.turnAngle (-10) %Rrotulloni dhomënba 10 gradë CW tjetër x.front == 1 %Kontrolloni nëse shtypet parakolpi para r.turnAngle (20) %Rrotulloni dhomënba 20 gradë CCW tjetër x.rightWheelDrop == 1 % Kontrolloni nëse rrota e djathtë ka rënë r.turnAngle (-20) %Rrotulloni dhomën për 20 gradë CW në të kundërt x.leftWheelDrop == 1 %Kontrolli nëse rrota e majtë ka rënë r.turnAngle (20) %Rrotulloni dhomën për 20 gradë CCW tjetër nëse y.left Përpara < 1500 %Kontrolloni nëse pjesa e majtë e përparme e dhomës është jashtë shkëmbit r.move Largësia (-0.05, 0.05) %Zhvendosni dhomën mbrapa 0.05 metra në 0.05 m/s r. Kthesë Këndi (-5) %Rrotulloni dhomën 5 gradë CW në të kundërt y.jathtë Përpara < 1500 %Kontrolloni nëse pjesa e përparme e djathtë e dhomës është jashtë shkëmbit r.move Largësia (-0.05, 0.05) %Zhvendosni dhomën mbrapa 0.05 metra në 0.05 m/s r. Kthesa Këndi (5) %Rrotulloni dhomën 5 gradë CCW në të kundërt y. majtas <1000 %Kontrolloni nëse pjesa e majtë o f roomba është jashtë shkëmbit r.moveDistanca (-0.05, 0.05)%Lëviz dhomën mbrapa 0.05 metra në 0.05 m/s r. ktheseAngle (-10)%Rrotullo dhomën 10 gradë CW në të kundërt y.right0 nëse Vazhdo == 1 i = 0 %Vazhdo terrenin e ashpër tjetër i = 1 %Përfundo terrenin e përafërt përfundo fund tjetër %Mënyra manuale i = 0 r.setLEDDigits (num2str ('USER')) %Afisho 'USER' në LED Display d = msgbox (['Keys Arrow - Lëviz; S - Stop Rover; ESC - Kontrolli i Përdoruesit Fundor; A - Gjeni burimin ']); prit (d); ndërsa i == 0 r.shfaqKamera %Hap kamera me byrek me mjedër drejtpërdrejt në dritare të veçantë D = getkey (1) %Rimarr çelësin e shtypur nga përdoruesi, ruaj vlerën ASCII si ndryshore D nëse D == 30 %Kontrollo nëse shigjeta "lart" ka është shtypur r.setDriveVelocity (0.1) %Dërgo dhomën përpara me 0.2 m/s elseif D == 28 %Kontrolloni nëse është shtypur shigjeta "majtas" r.setDriveVelocity (0) %Ndaloni dhomën nga lëvizja përpara ose prapa r.turnAngle (15, 0,05) %Rrotullo dhomën 45 gradë CCW me 0.05 m/s tjetër nëse D == 31 %Kontrolloni nëse shigjeta "poshtë" është shtypur r.setDriveVelocity (-0.1) %Zhvendoseni dhomën mbrapa me 0.2 m/s tjetër, D == 29 % Kontrolloni nëse shtypet shigjeta "e djathtë" r.setDriveVelocity (0) %Ndaloni dhomën që të lëvizë përpara ose prapa r.turnAngle (-15, 0.05) %Rrotulloni dhomën me 45 gradë CW me 0.05 m/s tjetër nëse D == 27 %Kontrolloni nëse çelësi "esc" (arratisje) u shtyp i = 1 %Ndrysho vlerën e ndryshores "i" për të dalë nga laku d = msgbox ('Dil nga "Kontrolli i Përdoruesit"') %Njoftojeni përdoruesin se modaliteti manual është duke u larguar ndryshe D == 115 %Kontrolloni nëse tasti "s" është shtypur r.setDriveVelocity (0) %Ndaloni dhomën nga duke shkuar përpara ose prapa elseif D == 97 %Kontrolloni nëse "a" është shtypur image = r.getImage; imwrite (image, 'image.png') W = Klasifiko (imazhin) K = modaliteti (W) nëse K == 3 d = msgbox ('Burimi u gjet') %Shfaq nëse burimi drejtkëndor zbulon pritje (d); %Prisni që përdoruesi të mbyllë kutinë e mesazheve "d" elseif K == 0 d = kutia e mesazhit ('Jo burim:(') %Shfaq nëse burimi drejtkëndor nuk zbulohet prisni (d); %Prisni që përdoruesi të mbyllë kutinë e mesazheve "d" fund tjetër d = msgbox ('Nuk është një hyrje kyçe e vlefshme.') %Shfaq nëse përdoruesi mbyll menunë "zgjidhni cilësimin" waitfor (d); %Prisni që përdoruesi të mbyllë kutinë e mesazheve "d" përfundojë pritjen (d); %Prisni përdoruesi për të mbyllur kutinë e mesazheve "d" fund fund fund tjetër d = msgbox ('Mirupafshim') %Thotë lamtumirë nëse opsionet janë të mbyllura në pritje për (d);

Hapi 3: Testimi

Duke testuar
Duke testuar

Pasi të jetë shkruar kodi juaj, do t'ju duhet të provoni Roomba -n tuaj. Edhe pse kodi juaj mund të duket i saktë, shumë nga vlerat tuaja, veçanërisht për ngjyrën ose formën, do të duhet të ndryshohen në mënyrë që të njihni siç duhet objektet që dëshironi që Roomba juaj të identifikojë.

Hapi 4: Vëzhgoni rezultatet vizuale

Vëzhgoni rezultatet vizuale
Vëzhgoni rezultatet vizuale
Vëzhgoni rezultatet vizuale
Vëzhgoni rezultatet vizuale

Do të jetë shumë e qartë nëse e keni programuar me sukses Roomba -n tuaj bazuar në rezultatet e tij vizuale.

Produktet përfshijnë:

  • Zbulimi i formës: Aftësia e Roomba për të dalluar siç duhet format në mënyrë që të gjejë mineralet e sakta
  • Manovrat e Terrenit të Vrazhdë: Shmang shkëmbinjtë ose zonat e errëta
  • Modaliteti manual: Ushqimi i drejtpërdrejtë dhe aftësia për të kontrolluar Roomba
  • Fotografitë: Fotografitë e mineraleve
  • Jeta u gjet !: Një kuti teksti MatLab që nënkupton që bima juaj ka identifikuar jetën organike.

Ky është fundi i mësimit tonë, shijoni Marshimin tuaj të ri Mars Expedition Rover!

Recommended: