Inhoudsopgave:

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

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

Video: IRobot Create-Mars Expedition Rover Mark I: 4 stappen
Video: Посадка Марсохода Perseverance- История Изнутри 2024, November
Anonim
IRobot Create-Mars Expedition Rover Mark I
IRobot Create-Mars Expedition Rover Mark I

Deze instructable leert je hoe je de iRobot Create kunt instellen met behulp van MatLab-codering. Je robot kan mineralen zoeken door vormen te onderscheiden, ruig terrein manoeuvreren met behulp van klifsensoren en kan handmatig worden bestuurd via een live feed.

Stap 1: Benodigdheden

Benodigdheden
Benodigdheden

Voor dit project heb je de iRobot Create nodig, een programmeerbare versie van de Roomba-robotstofzuiger. De robot is uitgerust met alle sensoren die nodig zijn voor dit project, met name hobbelsensoren, klifsensoren en "Light Bump" -sensoren. Je hebt ook een Raspberry Pi en een videocamera nodig, die wordt gebruikt voor draadloze communicatie, live-programmering en de live-videofeed. Ten slotte heb je een 3D-geprinte houder nodig voor de Raspberry Pi en camera.

Stap 2: Ontwikkel codering om aan de gewenste uitkomst te voldoen

Ontwikkel codering om te voldoen aan de gewenste uitkomst
Ontwikkel codering om te voldoen aan de gewenste uitkomst

Nadat u uw Roomba hebt aangesloten, moet u een Matlab-code maken die u de gewenste uitgangen geeft na de gewenste ingangen.

De code is hier te zien:

%Roomba-project%Brenten Arnold (barnol15); Julianne Korn (qdp218); Mike Heal(mheal) %4/11/19 %Probleembeschrijving: maak een rover om mensen te helpen tijdens %verkenning/bewoning van mars. %Oplossingsmethode: zoek naar organische (groene) stof door gebruik te maken van %lichtbumpers, klifsensoren en camera om te controleren op organische stof. Laat %de rover door ruw terrein navigeren door het gebruik van bumpers, afgrond %-sensoren en wielhoogtesensoren. Stel mensen in staat om de rover vanaf een veilige afstand te besturen en handmatig naar mineralen te zoeken. keuzes = {'LEVEN', 'RUW TERREIN', 'GEBRUIKERSCONTROLE'}; %Drie opties in dialoogmenu Instelling = menu('', keuzes) indien Instelling>0 %Als de optie gekozen is, vraag dan om bevestiging van de gebruiker keuzes2 = {'Ja', 'Nee'} %Maak een celarray aan voor "ja" of "Nee " choice Confirm = menu(['U koos "' options{Setting} '" mode.'], options2) %Bevestig de keuze van de gebruikersinstelling if Confirm==1 if Setting==1 %Controleer of de "LIFE" instelling is gekozen i =0 while i==0 r.setLEDDigits(num2str('LIFE')) %Toon 'LIFE' op LED voor i=1:100 r.setDriveVelocity(0.05) %Verplaats roomba met 0,05 m/sy = r.getCliffSensors %Haal de waarden van de klifsensoren op in celstructuur "y" l = r.getLightBumpers %Haal de waarden voor lichte stoten op in structuur "f" als l.left>100 %Controleer of de linker lichtbumper bedekt is r.moveDistance(-0.05) %Verplaats roomba 0,05 meter achteruit 0,05 meter r.turnAngle(20) %Draai roomba 20 graden linksom img=r.getImage %Haal een afbeelding op van de rasberry pie-camera op roomba rect = [100 0 150 150]; img = imcrop(img, rect) %crop afbeelding om op midden te focussen rood = mean(mean(img(:,:, 1))) %gemiddelde rode intensiteit groen = mean(mean(img(:,:, 2))) %gemiddelde groene intensiteit blauw = gemiddelde(gemiddelde(img(:,:, 3))) %gemiddelde blauwe intensiteit als groen>rood && groen>blauw %Controleer of plant in beeld is d=msgbox(['Leven gevonden! ']); %Toon een berichtvenster met de tekst "Leven gevonden!" wachten op (d); end elseif l.leftFront>100 %Controleer of links/voorlicht bumper is bedekt r.moveDistance(-0.05) %Verplaats roomba 0,05 meter achteruit img=r.getImage %Krijg een afbeelding van de rasberry pie-camera op roomba en sla op in variabele 'img ' recht = [100 0 150 150]; img = imcrop(img, rect) %crop afbeelding om op midden te focussen rood = mean(mean(img(:,:, 1))) %gemiddelde rode intensiteit groen = mean(mean(img(:,:, 2))) %gemiddelde groene intensiteit blauw = gemiddelde(gemiddelde(img(:,:, 3))) %gemiddelde blauwe intensiteit als groen>rood && groen>blauw %Controleer of plant in beeld is d=msgbox(['Leven gevonden! ']); %Toon een berichtvenster met de tekst "Leven gevonden!" wachten op (d); end elseif l.leftCenter>100 %Controleer of linker/middelste lichte bumper bedekt is r.moveDistance(-0.05) %Verplaats roomba 0,05 meter achteruit img=r.getImage %Haal een afbeelding van de rasberry pie-camera op roomba en sla op in variabele 'img ' recht = [100 0 150 150]; img = imcrop(img, rect) %crop afbeelding om op midden te focussen rood = mean(mean(img(:,:, 1))) %gemiddelde rode intensiteit groen = mean(mean(img(:,:, 2))) %gemiddelde groene intensiteit blauw = gemiddelde(gemiddelde(img(:,:, 3))) %gemiddelde blauwe intensiteit als groen>rood && groen>blauw %Controleer of plant in beeld is d=msgbox(['Leven gevonden! ']); %Toon een berichtvenster met de tekst "Leven gevonden!" wachten op (d); end elseif l.rightCenter>100 %Controleer of de rechter/middelste lichte bumper bedekt is r.moveDistance(-0.05)%Verplaats roomba 0,05 meter achteruit img=r.getImage %Haal een afbeelding van de rasberry pie-camera op roomba en sla op in variabele 'img ' recht = [100 0 150 150]; img = imcrop(img, rect) %crop afbeelding om op midden te focussen rood = mean(mean(img(:,:, 1))) %gemiddelde rode intensiteit groen = mean(mean(img(:,:, 2))) %gemiddelde groene intensiteit blauw = gemiddelde(gemiddelde(img(:,:, 3))) %gemiddelde blauwe intensiteit als groen>rood && groen>blauw %Controleer of plant in beeld is d=msgbox(['Leven gevonden! ']); %Toon een berichtvenster met de tekst "Leven gevonden!" wachten op (d); end elseif l.rightFront>100 %Controleer of rechter/voorlichtbumper bedekt is r.moveDistance(-0.05)%Verplaats roomba 0,05 meter achteruit img=r.getImage %Krijg een afbeelding van de rasberry pie-camera op roomba en sla op in variabele 'img ' recht = [100 0 150 150]; img = imcrop(img, rect) %crop afbeelding om op het midden te focussen rood = mean(mean(img(:,:, 1))) %gemiddelde rode intensiteit groen = mean(mean(img(:,:, 2))) %gemiddelde groene intensiteit blauw = gemiddelde(gemiddelde(img(:,:, 3))) %gemiddelde blauwe intensiteit als groen>rood && groen>blauw %Controleer of plant in beeld is d=msgbox(['Leven gevonden! ']); %Toon een berichtvenster met de tekst "Leven gevonden!" wachten op (d); end elseif l.right>100 %Controleer of de rechter lichte bumper bedekt is r.moveDistance(-0.05)%Verplaats roomba 0,05 meter achteruit r.turnAngle(-20)%Rotate roomba 20 graden CW img=r.getImage %Get image from rasberry pie camera op roomba en opslaan in variabele 'img' rect = [100 0 150 150]; img = imcrop(img, rect) %crop afbeelding om op midden te focussen rood = mean(mean(img(:,:, 1))) %gemiddelde rode intensiteit groen = mean(mean(img(:,:, 2))) %gemiddelde groene intensiteit blauw = gemiddelde(gemiddelde(img(:,:, 3))) %gemiddelde blauwe intensiteit als groen>rood && groen>blauw %Controleer of plant in beeld is d=msgbox(['Leven gevonden! ']); %Toon een berichtvenster met de tekst "Leven gevonden!" wachten op (d); end elseif y.leftFront<1500 %Controleer of linker/voorste gedeelte van roomba van de klif af is r.moveDistance(-0.1, 0.05) %Verplaats roomba 0,1 meter achteruit met 0,05 m/s r.turnAngle(-5) %Rotate roomba 5 graden CW elseif y.rightFront<1500 %Controleer of rechter/voorste gedeelte van roomba van de klif af is r.moveDistance(-0.1, 0.05) %Verplaats roomba 0,1 meter achteruit met 0,05 m/s r.turnAngle(5) %Rotate roomba 5 graden CCW elseif y.left<1000 %Controleer of de linkerkant van roomba van de klif is r.moveDistance(-0.05, 0.05) %Verplaats roomba 0,05 meter achteruit met 0,05 m/s r.turnAngle(-10) %Rotate roomba 10 graden CW elseif y.right0 %Uitvoeren als knop wordt ingedrukt als Doorgaan==1 i=0 %Doorgaan met zoeken naar leven else i=1 %Einde LEVENSmodus einde einde einde elseif Instelling==2 %Controleer of instelling "RUW TERREIN" is gekozen i=0 while i==0 r.setLEDDigits(num2str('RGH')) %Display 'Rough' op LED-display voor i=1:1000 r.setDriveVelocity(0.05) %Stel roomba-aandrijfsnelheid in op 0,05 m/sx = r.getBumpers %Ophalen en opslaan van bumpersensorwaarden in structuur "x" y = r.get CliffSensors %Haal de waarden van de klifsensoren op in structuur "y" als x.right==1 %Controleer of de rechterbumper is ingedrukt r.turnAngle(10) %Rotate roomba 10 graden CCW elseif x.left==1 %Controleer of de linkerbumper is ingedrukt bumper is ingedrukt r.turnAngle(-10) %Draai roomba 10 graden CW elseif x.front==1 %Controleer of voorbumper is ingedrukt r.turnAngle(20) %Draai roomba 20 graden linksom elseif x.rightWheelDrop==1 % Controleer of het rechterwiel is gedaald r.turnAngle(-20)%Rotate roomba 20 graden CW elseif x.leftWheelDrop==1 %Controleer of het linkerwiel is gedaald r.turnAngle(20) %Rotate roomba 20 graden CCW elseif y.leftFront< 1500 %Controleer of het voorste linkergedeelte van de roomba van de klif af is r.moveDistance(-0.05, 0.05) %Verplaats roomba 0,05 meter achteruit met 0,05 m/s r.turnAngle(-5)%Draai roomba 5 graden CW elseif y.rightFront< 1500 %Controleer of het rechtervoorgedeelte van de roomba van de klif af is r.moveDistance(-0.05, 0.05)%Verplaats roomba 0,05 meter achteruit met 0,05 m/s r.turnAngle(5) %Rotate roomba 5 graden CCW elseif y.left<1000 %Controleer of het linker gedeelte uit is f roomba is van de klif r.moveDistance(-0.05, 0.05)%Verplaats roomba 0,05 meter achteruit met 0,05 m/s r.turnAngle(-10)%Rotate roomba 10 graden CW elseif y.right0 if Continue==1 i=0 %Continue ruw terrein else i=1 %End ruw terrein end end end else %Manual Mode i=0 r.setLEDDigits(num2str('USER')) %Display 'USER' op LED-display d=msgbox(['Pijltoetsen - Beweging; S - Stop Rover; ESC - Eindgebruikerscontrole; A - Zoek bron']); wachten op (d); while i==0 r.showCamera %Open rasberry pie camera live feed in apart venster D=getkey(1) %Ophalen toets ingedrukt door gebruiker, sla ASCII waarde op als variabele D als D==30 %Controleer of "omhoog" pijl heeft is ingedrukt r.setDriveVelocity(0.1) %Stuur roomba naar voren met 0,2 m/s elseif D==28 %Controleer of "links" pijl is ingedrukt r.setDriveVelocity(0) %Stop roomba om vooruit of achteruit te gaan r.turnAngle(15, 0,05)%Roomba 45 graden linksom draaien met 0,05 m/s elseif D==31 %Controleer of de pijl "omlaag" is ingedrukt r.setDriveVelocity(-0.1) %Verplaats roomba achteruit met 0,2 m/s elseif D==29 % Controleer of de pijl naar "rechts" is ingedrukt r.setDriveVelocity(0) %Stop roomba om vooruit of achteruit te gaan r.turnAngle(-15, 0.05) %Draai roomba 45 graden CW met 0,05 m/s elseif D==27 %Controleer of de "esc" (escape)-toets is ingedrukt i=1 %Wijzig de waarde van de variabele "i" om de lus te verlaten d=msgbox('Exiting "User Control"') %Laat de gebruiker weten dat de handmatige modus wordt afgesloten elseif D== 115 %Controleer of de "s"-toets is ingedrukt r.setDriveVelocity(0) %Stop roomba van vooruit of achteruit gaan elseif D==97 %Controleer of "a" is ingedrukt image = r.getImage; imwrite(image, 'image.png') W = Classify(image) K = mode(W) if K == 3 d=msgbox('Resource found') %Weergeven als rechthoekige resource gedetecteerd waitfor(d); %Wacht tot gebruiker berichtvenster "d" sluit elseif K == 0 d=msgbox('Not Resource:(') %Weergeven als rechthoekige bron niet is gedetecteerd waitfor(d); %Wacht tot gebruiker berichtvenster "d" sluit end else d=msgbox('Geen geldige toetsinvoer.') %Weergeven als gebruiker het menu "kies instelling" sluit waitfor(d); %Wacht tot gebruiker het berichtvenster sluit "d" end waitfor(d); %Wait for gebruiker om berichtvenster "d" te sluiten end end end else d=msgbox('Goodbye') %Zeg vaarwel als opties gesloten zijn end waitfor(d);

Stap 3: Testen

Testen
Testen

Zodra uw code is geschreven, moet u uw Roomba testen. Hoewel uw code misschien correct lijkt, moeten veel van uw waarden, vooral voor kleur of vorm, worden gewijzigd om de objecten die u wilt dat uw Roomba identificeert, correct te herkennen.

Stap 4: Observeer visuele output

Observeer visuele output
Observeer visuele output
Observeer visuele output
Observeer visuele output

Het zal heel duidelijk zijn of u uw Roomba met succes hebt geprogrammeerd op basis van zijn visuele output.

Uitgangen omvatten:

  • Vormdetectie: het vermogen van Roomba om vormen goed te onderscheiden om de juiste mineralen te vinden
  • Ruw terreinmanoeuvres: vermijdt kliffen of donkere gebieden
  • Handmatige modus: Live feed en de mogelijkheid om de Roomba. te bedienen
  • Foto's: Foto's van mineralen
  • Life Found!: Een MatLab-tekstvak dat aangeeft dat uw plant organisch leven heeft geïdentificeerd.

Dat is het einde van onze tutorial, veel plezier met je nieuwe Mars Expedition Rover!

Aanbevolen: