Innehållsförteckning:
- Steg 1: Tillbehör
- Steg 2: Utveckla kodning för att tillfredsställa önskat resultat
- Steg 3: Testning
- Steg 4: Observera visuella utgångar
Video: IRobot Create-Mars Expedition Rover Mark I: 4 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:46
Denna instruktör kommer att lära dig hur du konfigurerar iRobot Create med MatLab -kodning. Din robot kommer att ha möjlighet att söka efter mineraler genom att skilja former, manövrera ojämn terräng med hjälp av klippsensorer och har möjlighet att manuellt styras via ett levande foder.
Steg 1: Tillbehör
För detta projekt behöver du en iRobot Create, som är en programmerbar version av Roomba robotdammsugare. Roboten är utrustad med alla sensorer som behövs för detta projekt, speciellt stötsensorer, klippsensorer och "Light Bump" -sensorer. Du kommer också att behöva en Raspberry Pi och videokamera, som används för trådlös kommunikation, live programmering och live videoflöde. Slutligen behöver du ett 3D -tryckt fäste för Raspberry Pi och kameran.
Steg 2: Utveckla kodning för att tillfredsställa önskat resultat
När du har anslutit din Roomba måste du skapa en Matlab -kod som ger dig önskade utgångar efter dina önskade ingångar.
Koden kan ses här:
%Roomba Project%Brenten Arnold (barnol15); Julianne Korn (qdp218); Mike Heal (mheal) %4/11/19 %Problembeskrivning: Skapa en rover för att hjälpa människor under %utforskning/bosättning av mars. %Lösningsmetod: Sök efter organiskt (grönt) material genom att använda %ljusstötfångare, klippsensorer och kamera för att kontrollera om det finns organiskt material. Låt %rovern navigera i ojämn terräng med hjälp av stötfångare, cliff %-sensorer och hjulhöjdssensorer. Gör det möjligt för människor att styra rovern från %ett säkert avstånd och manuellt söka efter mineraler. choice = {'LIFE', 'ROUGH TERRAIN', 'USER CONTROL'}; %Tre alternativ i dialogmenyn Inställning = meny ('', val) om Inställning> 0 %Om alternativ väljs be om bekräftelse av val2 = {'Ja', 'Nej'} %Skapa en cellmatris för "ja" eller "Nej" "choice Bekräfta = meny (['Du valde' 'val {Inställning}'" läge. '], val2) %Bekräfta val av användarinställning om Bekräfta == 1 om Inställning == 1 %Kontrollera om inställningen "LIFE" valts i = 0 medan i == 0 r.setLEDDigits (num2str ('LIFE')) %Visa 'LIFE' på LED för i = 1: 100 r.setDriveVelocity (0,05) %Flytta roomba framåt vid 0,05 m/sy = r.getCliffSensors %Hämta och lagra klippsensorvärden i cellstrukturen "y" l = r.getLightBumpers %Hämta och lagra ljusstötvärden i struktur "f" om l.vänster> 100 %Kontrollera om vänster ljusstötfångare är täckt r.moveDistance (-0.05) %Flytta roomba bakåt 0,05 meter r.turnAngle (20) %Rotera roomba 20 grader CCW img = r.getImage %Få bild från hallonpajkamera på roomba rect = [100 0 150 150]; img = imcrop (img, rect) %beskär bild för att fokusera på mittrött = medelvärde (medelvärde (img (:,:, 1))) %genomsnittlig röd intensitet grön = medelvärde (medelvärde (img (:,:, 2))) %genomsnittlig grön intensitet blå = medelvärde (medelvärde (img (:,:, 3))) %genomsnittlig blå intensitet om grön> röd && grön> blå %Kontrollera om växten finns på bilden d = msgbox (['Liv hittat! ']); %Visa en meddelanderuta som säger "Livet hittat!" vänta på (d); slutet annarsif l.leftFront> 100 %Kontrollera är vänster/främre ljus stötfångare är täckt r.moveDistance (-0.05) %Flytta roomba bakåt 0,05 meter img = r.getImage %Få bild från hallonpajkamera på roomba och lagra i variabel 'img 'rekt = [100 0 150 150]; img = imcrop (img, rect) %beskär bild för att fokusera på mittrött = medelvärde (medelvärde (img (:,:, 1))) %genomsnittlig röd intensitet grön = medelvärde (medelvärde (img (:,:, 2))) %genomsnittlig grön intensitet blå = medelvärde (medelvärde (img (:,:, 3))) %genomsnittlig blå intensitet om grön> röd && grön> blå %Kontrollera om växten finns på bilden d = msgbox (['Liv hittat! ']); %Visa en meddelanderuta som säger "Livet hittat!" vänta på (d); slutet annarsif l.leftCenter> 100 %Kontrollera om vänster/mittljus stötfångare är täckt r.moveDistance (-0.05) %Flytta roomba bakåt 0,05 meter img = r.getImage %Få bild från rasberry pie kamera på roomba och lagra i variabel 'img 'rekt = [100 0 150 150]; img = imcrop (img, rect) %beskär bild för att fokusera på mittrött = medelvärde (medelvärde (img (:,:, 1))) %genomsnittlig röd intensitet grön = medelvärde (medelvärde (img (:,:, 2))) %genomsnittlig grön intensitet blå = medelvärde (medelvärde (img (:,:, 3))) %genomsnittlig blå intensitet om grön> röd && grön> blå %Kontrollera om växten finns på bilden d = msgbox (['Liv hittat! ']); %Visa en meddelanderuta som säger "Livet hittat!" vänta på (d); slutet annarsif l.rightCenter> 100 %Kontrollera om höger/mittljus stötfångare är täckt r.moveDistance (-0,05) %Flytta roomba bakåt 0,05 meter img = r.getImage %Hämta bild från rasberry pie kamera på roomba och lagra i variabel 'img 'rekt = [100 0 150 150]; img = imcrop (img, rect) %beskär bild för att fokusera på mittrött = medelvärde (medelvärde (img (:,:, 1))) %genomsnittlig röd intensitet grön = medelvärde (medelvärde (img (:,:, 2))) %genomsnittlig grön intensitet blå = medelvärde (medelvärde (img (:,:, 3))) %genomsnittlig blå intensitet om grön> röd && grön> blå %Kontrollera om växten finns på bilden d = msgbox (['Liv hittat! ']); %Visa en meddelanderuta som säger "Livet hittat!" vänta på (d); slutet annarsif l.rightFront> 100 %Kontrollera om höger/främre ljusstötfångare är täckt r.moveDistance (-0.05) %Flytta roomba bakåt 0,05 meter img = r.getImage %Få bild från hallonpajkamera på roomba och lagra i variabel 'img 'rekt = [100 0 150 150]; img = imcrop (img, rect) %beskär bild för att fokusera på mittrött = medelvärde (medelvärde (img (:,:, 1))) %genomsnittlig röd intensitet grön = medelvärde (medelvärde (img (:,:, 2))) %genomsnittlig grön intensitet blå = medelvärde (medelvärde (img (:,:, 3))) %genomsnittlig blå intensitet om grön> röd && grön> blå %Kontrollera om växten finns på bilden d = msgbox (['Liv hittat! ']); %Visa en meddelanderuta som säger "Livet hittat!" vänta på (d); slutet annarsif l.right> 100 %Kontrollera om höger ljusstötfångare är täckt r.moveDistance (-0.05) %Flytta roomba bakåt 0,05 meter r.turnAngle (-20) %Rotera roomba 20 grader CW img = r.getImage %Få bild från hallonpajkamera på roomba och lagra i variabel 'img' rect = [100 0 150 150]; img = imcrop (img, rect) %beskär bild för att fokusera på mittrött = medelvärde (medelvärde (img (:,:, 1))) %genomsnittlig röd intensitet grön = medelvärde (medelvärde (img (:,:, 2))) %genomsnittlig grön intensitet blå = medelvärde (medelvärde (img (:,:, 3))) %genomsnittlig blå intensitet om grön> röd && grön> blå %Kontrollera om växten finns på bilden d = msgbox (['Liv hittat! ']); %Visa en meddelanderuta som säger "Livet hittat!" vänta på (d); slutet annat om y.leftFront <1500 %Kontrollera om vänster/främre delen av roomba är utanför klippan r.moveDistance (-0,1, 0,05) %Flytta roomba bakåt 0,1 meter vid 0,05 m/s r.turnAngle (-5) %Rotera roomba 5 grader CW annars om y.rightFront <1500 %Kontrollera om höger/främre delen av roomba är utanför klippan r.moveDistance (-0,1, 0,05) %Flytta roomba bakåt 0,1 meter vid 0,05 m/s r.turnAngle (5) %Rotera roomba 5 grader CCW annars om y.vänster <1000 %Kontrollera om vänster sida av roomba är utanför klippan r.moveDistance (-0,05, 0,05) %Flytta roomba bakåt 0,05 meter vid 0,05 m/s r.turnAngle (-10) %Rotera roomba 10 grader CW elseif y.right0 %Kör om knappen är nedtryckt om Fortsätt == 1 i = 0 %Fortsätt att söka efter liv annars i = 1 %Avsluta LIFE -läge avsluta slutet avsluta annarsif Inställning == 2 %Kontrollera om inställningen "ROUGH TERRAIN" har valts i = 0 medan i == 0 r.setLEDDigits (num2str ('RGH')) %Display 'Rough' på LED -display för i = 1: 1000 r.setDriveVelocity (0,05) %Ställ in roomba -drivhastighet till 0,05 m/sx = r.getBumpers %Hämta och lagra stötfångarsensorvärden i strukturen "x" y = r.get CliffSensors %Hämta och lagra klippsensorvärden i strukturen "y" om x.right == 1 %Kontrollera om höger stötfångare är nedtryckt r.turnAngle (10) %Rotera roomba 10 grader CCW annarsif x.vänster == 1 %Kontrollera om vänster stötfångaren är nedtryckt r.turnAngle (-10) %Rotera roomba 10 grader CW annarsif x.front == 1 %Kontrollera om främre stötfångaren är nedtryckt r.turnAngle (20) %Rotate roomba 20 grader CCW elseif x.rightWheelDrop == 1 % Kontrollera om höger hjul har tappat r.turnAngle (-20) %Rotera roomba 20 grader CW elseif x.leftWheelDrop == 1 %Check är vänster hjul har tappat r.turnAngle (20) %Rotate roomba 20 grader CCW annarsif y.leftFront < 1500 %Kontrollera om främre vänstra delen av roomba är utanför klippan r.moveDistance (-0,05, 0,05) %Flytta roomba bakåt 0,05 meter vid 0,05 m/s r.turnAngle (-5) %Rotera roomba 5 grader CW annars om y.rightFront < 1500 %Kontrollera om den främre delen av roomba är utanför klippan r.moveDistance (-0,05, 0,05) %Flytta roomba bakåt 0,05 meter vid 0,05 m/s r.turnAngle (5) %Rotera roomba 5 grader CCW annars om y.vänster <1000 %Kontrollera om vänster del o f roomba är utanför klippan r.moveDistance (-0.05, 0.05)%Flytta roomba bakåt 0.05 meter vid 0.05 m/s r.turnAngle (-10)%Rotera roomba 10 grader CW annars om y.right0 om Fortsätt == 1 i = 0 %Fortsätt grov terräng annars i = 1 %Avsluta grov terräng slut slut än annat %Manuellt läge i = 0 r.setLEDDigits (num2str ('USER')) %Display 'USER' på LED Display d = msgbox (['Piltangenter - Flytta; S - Stop Rover; ESC - Slutanvändarkontroll; A - Hitta resurs ']); vänta på (d); medan i == 0 r.showCamera %Öppna rasberry pie kamera live feed i separat fönster D = getkey (1) %Hämta -tangenten tryckt av användaren, spara ASCII -värde som variabel D om D == 30 %Kontrollera om "upp" -pilen har tryckts r.setDriveVelocity (0,1) %Skicka roomba framåt med 0,2 m/s annarsif D == 28 %Kontrollera om pilen "vänster" trycktes r.setDriveVelocity (0) %Stoppa roomba från att gå framåt eller bakåt r.turnAngle (15, 0,05) %Rotera roomba 45 grader CCW vid 0,05 m/s elseif D == 31 %Kontrollera om nedåtpilen trycktes r.setDriveVelocity (-0,1) %Flytta roomba bakåt vid 0,2 m/s annarsif D == 29 % Kontrollera om "höger" pil är nedtryckt r.setDriveVelocity (0) %Stoppa roomba från att gå framåt eller bakåt r.turnAngle (-15, 0.05) %Rotera roomba 45 grader CW vid 0.05 m/s annarsif D == 27 %Kontrollera om "esc" (Escape) -knappen trycktes i = 1 %Ändra värdet på variabeln "i" för att avsluta loop d = msgbox ("Avsluta" Användarkontroll "') %Låt användaren veta att manuellt läge stängs annars if D == 115 %Kontrollera om "s" -tangenten har tryckts r.setDriveVelocity (0) %Stoppa roomba från framåt eller bakåt annars om D == 97 %Kontrollera om "a" har tryckts image = r.getImage; imwrite (image, 'image.png') W = Classify (image) K = mode (W) if K == 3 d = msgbox ('Resource found') %Display if rectangular resource detected waitfor (d); %Vänta på att användaren ska stänga meddelandefältet "d" elseif K == 0 d = msgbox ('Inte resurs:(') %Visa om rektangulär resurs inte upptäcks vänta på (d); %Vänta på att användaren ska stänga meddelandefält "d" slutet annat d = msgbox ('Inte en giltig knappinmatning.') %Visas om användaren stänger menyn "välj inställning" vänta på (d); %Vänta på att användaren stänger meddelandefältet "d" sluta vänta på (d); %Vänta på användare att stänga meddelandefältet "d" slutet slut slutet annat d = msgbox ('Hejdå') %Säger adjö om alternativen stängs i slutet vänta på (d);
Steg 3: Testning
När din kod har skrivits måste du testa din Roomba. Även om din kod kan verka korrekt måste många av dina värden, särskilt för färg eller form, ändras för att korrekt identifiera de objekt som du vill att din Roomba ska identifiera.
Steg 4: Observera visuella utgångar
Det kommer att vara mycket uppenbart om du har framgångsrikt programmerat din Roomba baserat på dess visuella utgångar.
Utgångar inkluderar:
- Formdetektering: Roombas förmåga att korrekt skilja former för att hitta rätt mineraler
- Rough Terrain Maneuvers: Undviker klippor eller mörka områden
- Manuellt läge: Live -feed och möjligheten att styra Roomba
- Bilder: Bilder på mineraler
- Life Found !: En MatLab -textruta som anger att din växt har identifierat organiskt liv.
Det är slutet på vår handledning, njut av din nya Mars Expedition Rover!
Rekommenderad:
Iron Man Mark II Hjälm: 4 steg
Iron Man Mark II Hjälm: Casco réplica mark II de 2 partes, casco y pulsera unidos por cadena que conduce el cableado, alimentado for 4 baterías AA ubicadas en la parte posterior junto al microcontrolador y el switch de encendido.Casco: Servomotores para el cierre y apert
Mark Twain House Haunting: 5 steg
Mark Twain House Haunting: Mark Twain -huset ryktas ha hemsökt av den berömda författaren. I denna instruerbara har jag " upptäckt " ett gammalt fotografi som bevisar bortom alla tvivel om att Twains spöke verkligen hemsöker detta historiska gamla hem
The Ultimate Beer Pong Machine - PongMate CyberCannon Mark III: 6 steg (med bilder)
The Ultimate Beer Pong Machine - PongMate CyberCannon Mark III: Introduktion PongMate CyberCannon Mark III är den nyaste och mest avancerade delen av ölpongteknologi som någonsin har sålts till allmänheten. Med nya CyberCannon kan vilken person som helst bli den mest fruktade spelaren vid ölpongbordet. Hur är det här
Slave Trigger Flash Mark II: 6 steg (med bilder)
Slave Trigger Flash Mark II: I den här instruktören kommer jag att förklara hur man gör en riktig (optisk) slavutlösare med ett minimum av komponenter. Det finns många komplexa mönster du kan hitta på internet, denna design är en mycket enkel och fungerar väl i starkt och svagt ljus
Använda IRobot Create: s kommandomodul med Linux: 4 steg
Använda IRobot Create: s kommandomodul med Linux: Eftersom iRobot inte har gett Linux -användare ett sätt att använda kommandomodulen, var jag tvungen att ta reda på det själv. Var inte skrämd, det är inte svårt alls, egentligen. Allt du behöver göra är att köra ett par skript. Låt oss komma igång, ska vi?