Innholdsfortegnelse:

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

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

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

Denne instruksen vil lære deg hvordan du konfigurerer iRobot Create ved å bruke MatLab -koding. Roboten din vil ha muligheten til å søke etter mineraler ved å skille mellom former, manøvrere ulendt terreng ved bruk av klippesensorer, og har muligheten til å bli kontrollert manuelt via et levende feed.

Trinn 1: Rekvisita

Rekvisita
Rekvisita

For dette prosjektet trenger du en iRobot Create, som er en programmerbar versjon av Roomba robotstøvsuger. Roboten er utstyrt med alle sensorene som trengs for dette prosjektet, spesielt støtsensorer, klippesensorer og "Light Bump" -sensorer. Du trenger også et Raspberry Pi og videokamera, som brukes til trådløs kommunikasjon, live programmering og live videofeed. Til slutt trenger du et 3D -trykt feste for Raspberry Pi og kamera.

Trinn 2: Utvikle koding for å tilfredsstille ønsket resultat

Utvikle koding for å tilfredsstille ønsket resultat
Utvikle koding for å tilfredsstille ønsket resultat

Når du har koblet din Roomba, må du opprette en Matlab -kode som gir deg de ønskede utgangene etter de ønskede inngangene.

Koden kan sees her:

%Roomba Project%Brenten Arnold (barnol15); Julianne Korn (qdp218); Mike Heal (mheal) %4/11/19 %Problembeskrivelse: Lag en rover for å hjelpe mennesker under %leting/beboelse av mars. %Løsningsmetode: Søk etter organisk (grønt) stoff ved bruk av %lys støtfangere, klippesensorer og kamera for å se etter organisk materiale. La %roveren navigere i ulendt terreng gjennom bruk av støtfangere, klippe %sensorer og hjulhøyde sensorer. Gjør mennesker i stand til å kontrollere roveren fra %en sikker avstand unna og manuelt søke etter mineraler. choice = {'LIFE', 'ROUGH TERRAIN', 'USER CONTROL'}; %Tre alternativer i dialogmenyen Innstilling = meny ('', valg) hvis Innstilling> 0 %Hvis alternativ valgt, be om brukerbekreftelsesvalg2 = {'Ja', 'Nei'} %Lag en cellematrise for "ja" eller "Nei" "choice Bekreft = meny (['Du valgte"' valg {Innstilling} '"modus.'], valg2) %Bekreft valg av brukerinnstilling hvis Bekreft == 1 hvis Innstilling == 1 %Sjekk om" LIFE "-innstillingen ble valgt i = 0 mens i == 0 r.setLEDDigits (num2str ('LIFE')) %Vis 'LIFE' på LED for i = 1: 100 r.setDriveVelocity (0,05) %Flytt roomba fremover på 0,05 m/sy = r.getCliffSensors %Hente og lagre verdier for cliffsensorer i cellestrukturen "y" l = r.getLightBumpers %Hente og lagre lysstøtverdier i strukturen "f" hvis l. Venstre> 100 %Kontroller om venstre lysfanger er dekket r.moveDistance (-0.05) %Flytt roomba 0,05 meter bakover r.turnAngle (20) %Roter roomba 20 grader CCW img = r.getImage %Få bilde fra bringebærpaikamera på roomba rect = [100 0 150 150]; img = imcrop (img, rect) %beskjæringsbilde for å fokusere på senter rødt = gjennomsnitt (gjennomsnitt (img (:,:, 1))) %gjennomsnittlig rød intensitet grønn = gjennomsnitt (gjennomsnitt (img (:,:, 2))) %gjennomsnittlig grønn intensitet blå = gjennomsnitt (gjennomsnitt (avb (:,:, 3))) %gjennomsnittlig blå intensitet hvis grønn> rød && grønn> blå %Kontroller om planten er i bildet d = msgbox (['Life found! ']); %Vis en meldingsboks som sier "Livet funnet!" vente (d); ende annetif l.leftFront> 100 %Sjekk er venstre/frontlys støtfanger er dekket r.moveDistance (-0.05) %Flytt roomba bakover 0,05 meter img = r.getImage %Få bilde fra bringebærpai kamera på roomba og lagre i variabel 'img 'rett = [100 0 150 150]; img = imcrop (img, rect) %beskjæringsbilde for å fokusere på senter rødt = gjennomsnitt (gjennomsnitt (img (:,:, 1))) %gjennomsnittlig rød intensitet grønn = gjennomsnitt (gjennomsnitt (img (:,:, 2))) %gjennomsnittlig grønn intensitet blå = gjennomsnitt (gjennomsnitt (avb (:,:, 3))) %gjennomsnittlig blå intensitet hvis grønn> rød && grønn> blå %Kontroller om planten er i bildet d = msgbox (['Life found! ']); %Vis en meldingsboks som sier "Livet funnet!" vente (d); slutten elseif l.leftCenter> 100 %Sjekk om venstre/senter lys støtfanger er dekket r.moveDistance (-0.05) %Flytt roomba 0,05 meter bakover img = r.getImage %Få bilde fra rasberry pie kamera på roomba og lagre i variabel 'img 'rett = [100 0 150 150]; img = imcrop (img, rect) %beskjær bilde for å fokusere på senter rødt = gjennomsnitt (gjennomsnitt (img (:,:, 1))) %gjennomsnittlig rød intensitet grønn = gjennomsnitt (gjennomsnitt (img (:,:, 2))) %gjennomsnittlig grønn intensitet blå = gjennomsnitt (gjennomsnitt (avb (:,:, 3))) %gjennomsnittlig blå intensitet hvis grønn> rød && grønn> blå %Kontroller om planten er i bildet d = msgbox (['Life found! ']); %Vis en meldingsboks som sier "Livet funnet!" vente (d); slutten elseif l.rightCenter> 100 %Sjekk om høyre/senter lys støtfanger er dekket r.moveDistance (-0.05) %Flytt roomba 0,05 meter bakover img = r.getImage %Få bilde fra rasberry pie kamera på roomba og lagre i variabel 'img 'rett = [100 0 150 150]; img = imcrop (img, rect) %beskjæringsbilde for å fokusere på senter rødt = gjennomsnitt (gjennomsnitt (img (:,:, 1))) %gjennomsnittlig rød intensitet grønn = gjennomsnitt (gjennomsnitt (img (:,:, 2))) %gjennomsnittlig grønn intensitet blå = gjennomsnitt (gjennomsnitt (avb (:,:, 3))) %gjennomsnittlig blå intensitet hvis grønn> rød && grønn> blå %Kontroller om planten er i bildet d = msgbox (['Life found! ']); %Vis en meldingsboks som sier "Livet funnet!" vente (d); slutten elseif l.rightFront> 100 %Sjekk om høyre/frontlyktestøtfanger er dekket r.moveDistance (-0,05) %Flytt roomba 0,05 meter bakover img = r.getImage %Få bilde fra bringebærpai-kamera på roomba og lagre i variabel 'img 'rett = [100 0 150 150]; img = imcrop (img, rect) %beskjær bilde for å fokusere på senter rødt = gjennomsnitt (gjennomsnitt (img (:,:, 1))) %gjennomsnittlig rød intensitet grønn = gjennomsnitt (gjennomsnitt (img (:,:, 2))) %gjennomsnittlig grønn intensitet blå = gjennomsnitt (gjennomsnitt (avb (:,:, 3))) %gjennomsnittlig blå intensitet hvis grønn> rød && grønn> blå %Kontroller om planten er i bildet d = msgbox (['Life found! ']); %Vis en meldingsboks som sier "Livet funnet!" vente (d); ende annet hvis l.høyre> 100 %Kontroller om høyre lysfanger er dekket r.moveDistance (-0.05) %Flytt roomba bakover 0,05 meter r.turnAngle (-20) %Roter roomba 20 grader CW img = r.getImage %Få bilde fra bringebærpai kamera på roomba og lagre i variabelen 'img' rect = [100 0 150 150]; img = imcrop (img, rect) %beskjær bilde for å fokusere på senter rødt = gjennomsnitt (gjennomsnitt (img (:,:, 1))) %gjennomsnittlig rød intensitet grønn = gjennomsnitt (gjennomsnitt (img (:,:, 2))) %gjennomsnittlig grønn intensitet blå = gjennomsnitt (gjennomsnitt (avb (:,:, 3))) %gjennomsnittlig blå intensitet hvis grønn> rød && grønn> blå %Kontroller om planten er i bildet d = msgbox (['Life found! ']); %Vis en meldingsboks som sier "Livet funnet!" vente (d); slutt annet hvis y.leftFront <1500 %Sjekk om venstre/forreste del av roomba er utenfor klippen r.moveDistance (-0,1, 0,05) %Flytt roomba 0,1 meter bakover ved 0,05 m/s r.turnAngle (-5) %Roter roomba 5 grader CW ellers hvis y.rightFront <1500 %Kontroller om høyre/fremre del av roomba er utenfor stupet r.moveDistance (-0,1, 0,05) %Flytt roomba 0,1 meter bakover ved 0,05 m/s r. turnAngle (5) %Rotate roomba 5 grader CCW ellers hvis y. venstre <1000 %Sjekk om venstre side av roomba er utenfor klippen r.moveDistance (-0,05, 0,05) %Flytt roomba 0,05 meter bakover på 0,05 m/s r.turnAngle (-10) %Roter roomba 10 grader CW elseif y.right0 %Kjør hvis knappen trykkes hvis Fortsett == 1 i = 0 %Fortsett å lete etter livet annet i = 1 %Avslutt LIFE -modus slutt slutt ende annetif Innstilling == 2 %Sjekk om "ROUGH TERRAIN" -innstillingen ble valgt i = 0 mens i == 0 r.setLEDDigits (num2str ('RGH')) %Display 'Rough' på LED -display for i = 1: 1000 r.setDriveVelocity (0,05) %Sett roomba -drivhastighet til 0,05 m/sx = r.getBumpers %Hent og lagre støtfangersensorverdier i strukturen "x" y = r.get CliffSensors %Hent og lagre cliffsensorverdier i strukturen "y" hvis x.right == 1 %Sjekk om høyre støtfanger er trykket r.turnAngle (10) %Roter roomba 10 grader CCW elseif x. venstre == 1 %Sjekk om venstre støtfanger er trykket r.turnAngle (-10) %Roter roomba 10 grader CW ellersif x.front == 1 %Sjekk om støtfangeren er trykket r.turnAngle (20) %Roter roomba 20 grader CCW elseif x.rightWheelDrop == 1 % Sjekk om høyre hjul har falt r.turnAngle (-20) %Rotate roomba 20 grader CW elseif x.leftWheelDrop == 1 %Check is left wheel has fallen r.turnAngle (20) %Rotate roomba 20 degrees CCW elseif y.leftFront < 1500 %Sjekk om den fremre venstre delen av roomba er utenfor klippen r.moveDistance (-0,05, 0,05) %Flytt roomba 0,05 meter bakover på 0,05 m/s r.turnAngle (-5) %Roter roomba 5 grader CW ellers hvis y.rightFront < 1500 %Kontroller om høyre forreste del av roomba er utenfor stupet r.moveDistance (-0,05, 0,05) %Flytt roomba 0,05 meter bakover på 0,05 m/s r.turnAngle (5) %Roter roomba 5 grader CCW ellers hvis venstre <1000 %Sjekk om venstre del o f roomba er utenfor klippen r.moveDistance (-0,05, 0,05)%Flytt roomba 0,05 meter bakover på 0,05 m/s r.turnAngle (-10)%Roter roomba 10 grader CW ellers hvis y.right0 hvis Fortsett == 1 i = 0 %Fortsett ulendt terreng ellers i = 1 %Avslutt ulendt terreng slutt ende slutt annet %Manuell modus i = 0 r.setLEDDigits (num2str ('USER')) %Display 'USER' på LED Display d = msgbox (['Piltaster - Bevege seg; S - Stop Rover; ESC - Sluttbrukerkontroll; A - Finn ressurs ']); vente (d); mens i == 0 r.showCamera %Åpne bringebærpai kamera live feed i eget vindu D = getkey (1) %Hent tast trykket av bruker, lagre ASCII verdi som variabel D hvis D == 30 %Sjekk om "opp" pil har blitt trykket r.setDriveVelocity (0,1) %Send roomba fremover med 0,2 m/s elseif D == 28 %Sjekk om "venstre" pil ble trykket r.setDriveVelocity (0) %Stopp roomba fra å bevege seg fremover eller bakover r.turnAngle (15, 0,05) %Roter roomba 45 grader CCW ved 0,05 m/s elseif D == 31 %Sjekk om pilen "ned" ble trykket r.setDriveVelocity (-0,1) %Flytt roomba bakover med 0,2 m/s elseif D == 29 % Sjekk om "høyre" pil er trykket r.setDriveVelocity (0) %Stopp roomba fra å bevege seg fremover eller bakover r.turnAngle (-15, 0.05) %Roter roomba 45 grader CW ved 0,05 m/s ellersif D == 27 %Sjekk om "esc" (escape) -tasten ble trykket i = 1 %Endre verdien av variabelen "i" for å gå ut av sløyfe d = msgbox ("Avslutter" brukerkontroll "') %La brukeren vite at manuell modus blir avsluttet ellers hvis D == 115 %Kontroller om "s" -tasten er trykket r.setDriveVelocity (0) %Stopp roomba fra fremover eller bakover hvis D == 97 %Sjekk om "a" er trykket image = r.getImage; imwrite (image, 'image.png') W = Classify (image) K = mode (W) if K == 3 d = msgbox ('Resource found') %Vis hvis rektangulær ressurs er oppdaget waitfor (d); %Vent på at brukeren skal lukke meldingsboksen "d" elseif K == 0 d = msgbox ('Ikke ressurs:(') %Vis hvis rektangulær ressurs ikke er oppdaget waitfor (d); %Vent på at brukeren skal lukke meldingsboksen "d" slutt annet d = msgbox ('Ikke en gyldig nøkkelinngang.') %Vis hvis brukeren lukker "velg innstilling" -menyen waitfor (d); %Vent til brukeren lukker meldingsboksen "d" slutten waitfor (d); %Vent på bruker for å lukke meldingsboksen "d" ende ende ende annet d = msgbox ('Farvel') %Sier farvel hvis alternativene er stengt, og vent for (d);

Trinn 3: Testing

Testing
Testing

Når koden er skrevet, må du teste Roomba. Selv om koden din kan virke korrekt, må mange av verdiene dine, spesielt for farge eller form, endres for å kunne gjenkjenne objektene du vil at Roomba skal identifisere.

Trinn 4: Observer visuelle utganger

Observer visuelle utganger
Observer visuelle utganger
Observer visuelle utganger
Observer visuelle utganger

Det vil være veldig tydelig om du har programmert Roomba eller ikke, basert på dens visuelle utganger.

Utgangene inkluderer:

  • Formdeteksjon: Roombas evne til å skille former riktig for å finne de riktige mineralene
  • Rough Terrain Maneuvers: Unngår klipper eller mørke områder
  • Manuell modus: Live feed og muligheten til å kontrollere Roomba
  • Bilder: Bilder av mineraler
  • Life Found !: En MatLab -tekstboks som angir at planten din har identifisert organisk liv.

Det er slutten på opplæringen vår, nyt den nye Mars Expedition Rover!

Anbefalt: