Indholdsfortegnelse:

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

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

Video: IRobot Create-Mars Expedition Rover Mark I: 4 trin
Video: Perseverance Mars Rover Landing- Inside Story 2024, November
Anonim
IRobot Create-Mars Expedition Rover Mark I
IRobot Create-Mars Expedition Rover Mark I

Denne instruktive vil lære dig, hvordan du konfigurerer iRobot Create ved hjælp af MatLab -kodning. Din robot vil have evnen til at søge efter mineraler ved at skelne mellem former, manøvrere ujævnt terræn ved hjælp af klippesensorer og har mulighed for at blive styret manuelt via et live feed.

Trin 1: Forbrugsvarer

Forbrugsvarer
Forbrugsvarer

Til dette projekt skal du bruge iRobot Create, som er en programmerbar version af Roomba robotstøvsugeren. Robotten er udstyret med alle de sensorer, der er nødvendige til dette projekt, specielt bump sensorer, klint sensorer og "Light Bump" sensorer. Du skal også bruge et Raspberry Pi og videokamera, der bruges til trådløs kommunikation, live programmering og live video feed. Endelig skal du bruge en 3D -printet holder til Raspberry Pi og kamera.

Trin 2: Udvikle kodning for at tilfredsstille ønsket resultat

Udvikle kodning for at tilfredsstille ønsket resultat
Udvikle kodning for at tilfredsstille ønsket resultat

Når du har tilsluttet din Roomba, skal du oprette en Matlab -kode, der giver dig de ønskede output efter dine ønskede input.

Koden kan ses her:

%Roomba -projekt%Brenten Arnold (barnol15); Julianne Korn (qdp218); Mike Heal (mheal) %4/11/19 %Problembeskrivelse: Opret en rover for at hjælpe mennesker under %udforskning/beboelse af mars. %Løsningsmetode: Søg efter organisk (grønt) stof ved hjælp af %lysstøddæmpere, klippesensorer og kamera for at kontrollere, om der er organisk materiale. Tillad, at roveren navigerer i ujævnt terræn ved hjælp af kofangere, klint %sensorer og hjulhøjdesensorer. Gør mennesker i stand til at styre roveren fra %en sikker afstand væk og manuelt søge efter mineraler. choice = {'LIFE', 'ROUGH TERRAIN', 'USER CONTROL'}; %Tre muligheder i dialogmenuen Indstilling = menu ('', valg), hvis indstilling> 0 %Hvis valgmulighed valgt, bed om brugerbekræftelsesvalg2 = {'Ja', 'Nej'} %Opret et cellematrix for "ja" eller "Nej "choice Bekræft = menu (['Du valgte"' valg {Indstilling} '"tilstand.'], valg2) %Bekræft valg af brugerindstilling, hvis Bekræft == 1 hvis Indstilling == 1 %Kontroller, om indstillingen" LIFE "blev valgt i = 0 mens i == 0 r.setLEDDigits (num2str ('LIFE')) %Display 'LIFE' på LED for i = 1: 100 r.setDriveVelocity (0,05) %Flyt roomba fremad ved 0,05 m/sy = r.getCliffSensors %Hent og gem værdier for kliffsensorer i cellestruktur "y" l = r.getLightBumpers %Hent og gem lysværdier i struktur "f", hvis l.venstre> 100 %Kontroller, om venstre lysfanger er dækket r.moveDistance (-0.05) %Flyt roomba bagud 0,05 meter r.turnAngle (20) %Roter roomba 20 grader CCW img = r.getImage %Få billede fra hindbærkage kamera på roomba rect = [100 0 150 150]; img = imcrop (img, rect) %beskæringsbillede for at fokusere på midten rød = middelværdi (middelværdi (img (:,:, 1))) %gennemsnitlig rød intensitet grøn = middelværdi (middelværdi (img (:,:, 2))) %gennemsnitlig grøn intensitet blå = middelværdi (middelværdi (img (:,:, 3))) %gennemsnitlig blå intensitet, hvis grøn> rød && grøn> blå %Kontroller, om planten er på billedet d = msgbox (['Liv fundet! ']); %Vis en meddelelsesboks, der siger "Livet fundet!" vente på (d); ende andetif l.leftFront> 100 %Check er venstre/forlygte kofanger er dækket r.moveDistance (-0,05) %Flyt roomba 0,05 meter bagud img = r.getImage %Få billede fra hindbærkage kamera på roomba og gem i variabel 'img 'rect = [100 0 150 150]; img = imcrop (img, rect) %beskæringsbillede for at fokusere på midten rød = middelværdi (middelværdi (img (:,:, 1))) %gennemsnitlig rød intensitet grøn = middelværdi (middelværdi (img (:,:, 2))) %gennemsnitlig grøn intensitet blå = middelværdi (middelværdi (img (:,:, 3))) %gennemsnitlig blå intensitet, hvis grøn> rød && grøn> blå %Kontroller, om planten er på billedet d = msgbox (['Liv fundet! ']); %Vis en meddelelsesboks, der siger "Livet fundet!" vente på (d); ende andetif l.leftCenter> 100 %Kontroller, om venstre/midterlys kofanger er dækket r.moveDistance (-0,05) %Flyt roomba 0,05 meter bagud img = r.getImage %Få billede fra hindbærkage kamera på roomba og gem i variabel 'img 'rect = [100 0 150 150]; img = imcrop (img, rect) %beskæringsbillede for at fokusere på midten rød = middelværdi (middelværdi (img (:,:, 1))) %gennemsnitlig rød intensitet grøn = middelværdi (middelværdi (img (:,:, 2))) %gennemsnitlig grøn intensitet blå = middelværdi (middelværdi (img (:,:, 3))) %gennemsnitlig blå intensitet, hvis grøn> rød && grøn> blå %Kontroller, om planten er på billedet d = msgbox (['Liv fundet! ']); %Vis en meddelelsesboks, der siger "Livet fundet!" vente på (d); ende andetif l.rightCenter> 100 %Kontroller, om højre/midterlys kofanger er dækket r.moveDistance (-0,05) %Flyt roomba 0,05 meter bagud img = r.getImage %Få billede fra hindbærkage kamera på roomba og gem i variabel 'img 'rect = [100 0 150 150]; img = imcrop (img, rect) %beskæringsbillede for at fokusere på midten rød = middelværdi (middelværdi (img (:,:, 1))) %gennemsnitlig rød intensitet grøn = middelværdi (middelværdi (img (:,:, 2))) %gennemsnitlig grøn intensitet blå = middelværdi (middelværdi (img (:,:, 3))) %gennemsnitlig blå intensitet, hvis grøn> rød && grøn> blå %Kontroller, om planten er på billedet d = msgbox (['Liv fundet! ']); %Vis en meddelelsesboks, der siger "Livet fundet!" vente på (d); ende andetif l.rightFront> 100 %Kontroller, om højre/forlygte kofanger er dækket r.moveDistance (-0,05) %Flyt roomba 0,05 meter bagud img = r.getImage %Få billede fra hindbærkage kamera på roomba og gem i variabel 'img 'rect = [100 0 150 150]; img = imcrop (img, rect) %beskæringsbillede for at fokusere på midten rød = middelværdi (middelværdi (img (:,:, 1))) %gennemsnitlig rød intensitet grøn = middelværdi (middelværdi (img (:,:, 2))) %gennemsnitlig grøn intensitet blå = middelværdi (middelværdi (img (:,:, 3))) %gennemsnitlig blå intensitet, hvis grøn> rød && grøn> blå %Kontroller, om planten er på billedet d = msgbox (['Liv fundet! ']); %Vis en meddelelsesboks, der siger "Livet fundet!" vente på (d); slut ellersif l.højre> 100 %Kontroller, om højre lys kofanger er dækket r.moveDistance (-0,05) %Flyt roomba bagud 0,05 meter r.turnAngle (-20) %Roter roomba 20 grader CW img = r.getImage %Få billede fra hindbær tærte kamera på roomba og gem i variabel 'img' rect = [100 0 150 150]; img = imcrop (img, rect) %beskæringsbillede for at fokusere på midten rød = middelværdi (middelværdi (img (:,:, 1))) %gennemsnitlig rød intensitet grøn = middelværdi (middelværdi (img (:,:, 2))) %gennemsnitlig grøn intensitet blå = middelværdi (middelværdi (img (:,:, 3))) %gennemsnitlig blå intensitet, hvis grøn> rød && grøn> blå %Kontroller, om planten er på billedet d = msgbox (['Liv fundet! ']); %Vis en meddelelsesboks, der siger "Livet fundet!" vente på (d); slut andetif y.leftFront <1500 %Kontroller, om venstre/forreste del af roomba er fra klippe r.moveDistance (-0,1, 0,05) %Flyt roomba 0,1 meter bagud ved 0,05 m/s r.turnAngle (-5) %Roter roomba 5 grader CW ellersif y.rightFront <1500 %Kontroller, om højre/forreste del af roomba er fra klippe r.moveDistance (-0,1, 0,05) %Flyt roomba 0,1 meter bagud ved 0,05 m/s r.turnAngle (5) %Roter roomba 5 grader CCW ellersif y. venstre <1000 %Kontroller, om venstre side af roomba er fra klippe r.moveDistance (-0,05, 0,05) %Flyt roomba 0,05 meter bagud ved 0,05 m/s r.turnAngle (-10) %Roter roomba 10 grader CW elseif y.right0 %Kør hvis der trykkes på knappen hvis Fortsæt == 1 i = 0 %Fortsæt med at søge efter livet ellers i = 1 %Afslut LIFE -tilstand slut ende ende elseif Indstilling == 2 %Kontroller, om indstillingen "ROUGH TERRAIN" er valgt i = 0 mens i == 0 r.setLEDDigits (num2str ('RGH')) %Display 'Rough' på LED Display for i = 1: 1000 r.setDriveVelocity (0,05) %Indstil roomba -drevhastighed til 0,05 m/sx = r.getBumpers %Hent og gem kofangersensorværdier i strukturen "x" y = r.get CliffSensors %Hent og gem kliffsensorværdier i strukturen "y", hvis x.right == 1 %Kontroller, om der er trykket på højre kofanger r.turnAngle (10) %Roter roomba 10 grader CCW elseif x. venstre == 1 %Kontroller, om venstre kofanger trykkes r.turnAngle (-10) %Drej roomba 10 grader CW ellersif x.front == 1 %Kontroller, om kofangeren er trykket r.turnAngle (20) %Roter roomba 20 grader CCW elseif x.rightWheelDrop == 1 % Kontroller, om højre hjul er faldet r.turnAngle (-20) %Rotate roomba 20 grader CW elseif x.leftWheelDrop == 1 %Check er venstre hjul har faldet r.turnAngle (20) %Rotate roomba 20 grader CCW elseif y.leftFront < 1500 %Kontroller, om den forreste venstre del af roomba er fra klippen r.moveDistance (-0,05, 0,05) %Flyt roomba 0,05 meter bagud ved 0,05 m/s r.turnAngle (-5) %Roter roomba 5 grader CW ellersif y.rightFront < 1500 %Kontroller, om højre forreste del af roomba er fra klippe r.moveDistance (-0,05, 0,05) %Flyt roomba 0,05 meter bagud ved 0,05 m/s r.turnAngle (5) %Roter roomba 5 grader CCW ellersif y. venstre <1000 %Kontroller om venstre del o f roomba er fra klippe r.moveDistance (-0,05, 0,05)%Flyt roomba 0,05 meter bagud ved 0,05 m/s r.turnAngle (-10)%Drej roomba 10 grader CW ellersif y.right0 hvis Fortsæt == 1 i = 0 %Fortsæt ujævnt terræn ellers i = 1 %Afslut ujævnt terræn ende ende ende andet %Manuel tilstand i = 0 r.setLEDDigits (num2str ('USER')) %Display 'USER' på LED Display d = msgbox (['Piltaster - Bevæge sig; S - Stop Rover; ESC - Slutbrugerkontrol; A - Find ressource ']); vente på (d); mens i == 0 r.showCamera %Åbn hindbærkage kamera live feed i separat vindue D = getkey (1) %Hent tast trykket af bruger, gem ASCII værdi som variabel D hvis D == 30 %Kontroller om "op" pil har blevet trykket r.setDriveVelocity (0,1) %Send roomba fremad med 0,2 m/s elseif D == 28 %Kontroller, om der blev trykket på "venstre" pil r.setDriveVelocity (0) %Stop roomba fra at bevæge sig frem eller tilbage r.turnAngle (15, 0,05) %Drej roomba 45 grader CCW ved 0,05 m/s elseif D == 31 %Kontroller, om der blev trykket på "ned" pil r.setDriveVelocity (-0,1) %Flyt roomba baglæns ved 0,2 m/s elseif D == 29 % Kontroller, om der er trykket på "højre" pil r.setDriveVelocity (0) %Stop roomba fra at bevæge sig frem eller tilbage r.turnAngle (-15, 0,05) %Drej roomba 45 grader CW ved 0,05 m/s ellersif D == 27 %Kontroller, om tasten "esc" (escape) blev trykket i = 1 %Ændre værdien af variablen "i" for at forlade loop d = msgbox ('Afslutter "brugerkontrol"') %Lad brugeren vide, at manuel tilstand forlades, ellers D == 115 %Kontroller, om der er trykket på "s" -tasten r.setDriveVelocity (0) %Stop roomba fra frem eller tilbage, hvis D == 97 %Kontroller, om der er trykket på "a" image = r.getImage; imwrite (billede, 'image.png') W = Klassificer (billede) K = mode (W) hvis K == 3 d = msgbox ('Ressource fundet') %Vis hvis rektangulær ressource opdaget waitfor (d); %Vent på, at brugeren lukker meddelelsesboksen "d" elseif K == 0 d = msgbox ('Ikke ressource:(') %Vis, hvis rektangulær ressource ikke er registreret waitfor (d); %Vent på, at brugeren lukker meddelelsesboksen "d" ende andet d = msgbox ('Ikke en gyldig nøgleindgang.') %Visning, hvis bruger lukker menuen "vælg indstilling" waitfor (d); %Vent på, at brugeren lukker meddelelsesboksen "d" afslut waitfor (d); %Vent på bruger til at lukke meddelelsesboksen "d" ende ende ende anden d = msgbox ('Farvel') %Sig farvel, hvis valgmulighederne er lukkede, og afslut vente på (d);

Trin 3: Test

Test
Test

Når din kode er blevet skrevet, skal du teste din Roomba. Selvom din kode kan virke korrekt, skal mange af dine værdier, især for farve eller form, ændres for korrekt at genkende de objekter, som du gerne vil have, at din Roomba identificerer.

Trin 4: Overhold visuelle output

Observer visuelle output
Observer visuelle output
Observer visuelle output
Observer visuelle output

Det vil være meget tydeligt, om du har programmeret din Roomba med succes ud fra dens visuelle output.

Outputs inkluderer:

  • Formdetektion: Roombas evne til korrekt at skelne mellem former for at finde de korrekte mineraler
  • Grove terrænmanøvrer: Undgår klipper eller mørke områder
  • Manuel tilstand: Live feed og muligheden for at styre Roomba
  • Billeder: Billeder af mineraler
  • Liv fundet !: En MatLab -tekstboks, der angiver, at din plante har identificeret organisk liv.

Det er slutningen på vores tutorial, nyd din nye Mars Expedition Rover!

Anbefalede: