Innehållsförteckning:

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

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

Video: IRobot Create-Mars Expedition Rover Mark I: 4 steg
Video: Обнаружение скрытого UAP? | Выжить в черной дыре с Ави Лоэбом Obnaruzheniye skrytogo UAP? Avi Loebom 2024, November
Anonim
IRobot Create-Mars Expedition Rover Mark I
IRobot Create-Mars Expedition Rover Mark I

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

Tillbehör
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

Utveckla kodning för att tillfredsställa önskat resultat
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

Testning
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

Observera visuella utgångar
Observera visuella utgångar
Observera visuella utgångar
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: