Innholdsfortegnelse:
- Trinn 1: Rekvisita
- Trinn 2: Utvikle koding for å tilfredsstille ønsket resultat
- Trinn 3: Testing
- Trinn 4: Observer visuelle utganger
Video: IRobot Create-Mars Expedition Rover Mark I: 4 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:24
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
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
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
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
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:
Iron Man Mark II hjelm: 4 trinn
Iron Man Mark II hjelm: Casco réplica mark II de 2 partes, casco y pulsera unidos por cadena que conduce el cableado, alimentado por 4 baterías AA ubicadas en la parte posterior junto to microcontrolador y el switch de encendido.Casco: Servomotores para el cierre y apert
Mark Twain House Haunting: 5 trinn
Mark Twain House Haunting: Mark Twain -huset ryktes å være hjemsøkt av den berømte forfatteren. I denne instruksen har jeg " oppdaget " et gammelt fotografi som beviser uten tvil om at Twains spøkelse virkelig hjemsøker dette historiske gamle hjemmet
The Ultimate Beer Pong Machine - PongMate CyberCannon Mark III: 6 trinn (med bilder)
The Ultimate Beer Pong Machine - PongMate CyberCannon Mark III: Introduksjon PongMate CyberCannon Mark III er det nyeste og mest avanserte stykke ølpongteknologi som noensinne er solgt til publikum. Med den nye CyberCannon kan enhver person bli den mest fryktede spilleren ved ølpongbordet. Hvordan er dette
Bruke kommandomodulen for IRobot Create med Linux: 4 trinn
Bruke kommandomodulen til IRobot Create med Linux: Siden iRobot ikke har gitt Linux -brukere en måte å bruke kommandomodulen, måtte jeg finne ut av det selv. Ikke bli skremt, det er ikke vanskelig i det hele tatt, egentlig. Alt du trenger å gjøre er å kjøre et par skript. La oss komme i gang, skal vi?
Endre en IRobot Create to Paint: 6 trinn (med bilder)
Endre en IRobot Create to Paint: Dette er et robotikkprosjekt som sannsynligvis kan fullføres av noen som ikke har erfaring med roboter i det hele tatt. Jeg sier dette fordi jeg ikke hadde erfaring med roboter før jeg begynte. Eller skrive programmer. Faktisk visste jeg hvordan jeg skulle male, og det var