Indholdsfortegnelse:
- Trin 1: Forbrugsvarer
- Trin 2: Udvikle kodning for at tilfredsstille ønsket resultat
- Trin 3: Test
- Trin 4: Overhold visuelle output
Video: IRobot Create-Mars Expedition Rover Mark I: 4 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:29
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
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
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
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
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:
Iron Man Mark II hjelm: 4 trin
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 trin
Mark Twain House Haunting: Mark Twain -huset rygtes at være hjemsøgt af den berømte forfatter. I denne instruktive har jeg " opdaget " et gammelt fotografi, der ud over enhver skygge af tvivl viser, at Twains spøgelse virkelig hjemsøger dette historiske gamle hjem
The Ultimate Beer Pong Machine - PongMate CyberCannon Mark III: 6 trin (med billeder)
The Ultimate Beer Pong Machine - PongMate CyberCannon Mark III: Introduktion PongMate CyberCannon Mark III er det nyeste og mest avancerede stykke ølpongteknologi, der nogensinde er blevet solgt til offentligheden. Med den nye CyberCannon kan enhver person blive den mest frygtede spiller ved ølpongbordet. Hvordan er dette p
Slave Trigger Flash Mark II: 6 trin (med billeder)
Slave Trigger Flash Mark II: I denne instruktive vil jeg forklare, hvordan man laver en rigtig (optisk) slave -trigger blitz med et minimum af komponenter.Der er mange komplekse designs, du kan finde på internettet, dette design er en meget enkel og fungerer godt i lyst og svagt belyst miljø
Brug af IRobot Create's kommandomodul med Linux: 4 trin
Brug af IRobot Create's kommandomodul med Linux: Da iRobot ikke har givet linux -brugere en måde at bruge kommandomodulet på, måtte jeg selv finde ud af det. Bliv ikke skræmt, det er slet ikke svært overhovedet. Alt du skal gøre er at køre et par scripts. Lad os komme i gang, skal vi?