Inhoudsopgave:
- Stap 1: Benodigdheden
- Stap 2: Ontwikkel codering om aan de gewenste uitkomst te voldoen
- Stap 3: Testen
- Stap 4: Observeer visuele output
Video: IRobot Create-Mars Expedition Rover Mark I: 4 stappen
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:18
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
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
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
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
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:
Van Roomba naar Rover in slechts 5 stappen!: 5 stappen
Van Roomba naar Rover in slechts 5 stappen!: Roomba-robots zijn een leuke en gemakkelijke manier om je tenen onder te dompelen in de wereld van robotica. In deze Instructable zullen we in detail beschrijven hoe we een eenvoudige Roomba kunnen omzetten in een bestuurbare rover die tegelijkertijd zijn omgeving analyseert. Onderdelenlijst1.) MATLAB2.) Roomb
De opdrachtmodule van IRobot Create gebruiken met Linux: 4 stappen
De opdrachtmodule van IRobot Create gebruiken met Linux: aangezien iRobot linux-gebruikers geen manier heeft geboden om de opdrachtmodule te gebruiken, moest ik er zelf achter komen. Laat je niet intimideren, het is eigenlijk helemaal niet moeilijk. Het enige dat u hoeft te doen, is een paar scripts uitvoeren. Laten we beginnen, zullen we?
Hoe maak je een autonome basketbal spelende robot met behulp van een IRobot Create als basis - Ajarnpa
Hoe maak je een autonome basketbal spelende robot met behulp van een IRobot Create als basis: Dit is mijn inzending voor de iRobot Create-uitdaging. Het moeilijkste deel van dit hele proces voor mij was om te beslissen wat de robot ging doen. Ik wilde de coole functies van de Create demonstreren en tegelijkertijd wat robo-flair toevoegen. Alles van mij
Een IRobot Create wijzigen om te schilderen - Ajarnpa
Een IRobot-creatie aanpassen om te schilderen: dit is een roboticaproject dat waarschijnlijk kan worden voltooid door iemand die helemaal geen ervaring heeft met robots. Ik zeg dit omdat ik, voordat ik begon, geen ervaring had met robots. Of programma's schrijven. Sterker nog, ik wist hoe ik moest schilderen en dat was
IRobot Create Personal Home Robot - Ajarnpa
IRobot Create Personal Home Robot: Introductie van een persoonlijke thuisrobot die is gebouwd rond het iRobot Create-platform en een mini-itx-computersysteem. Het is nog nooit zo eenvoudig en betaalbaar geweest om robots te ontwerpen en te bouwen door gebruik te maken van de schaalvoordelen van software, pc, speelgoed en andere