Innehållsförteckning:
2025 Författare: John Day | [email protected]. Senast ändrad: 2025-01-13 06:58
Denna instruktionsbok guidar dig i riktningarna för att använda en Raspberry Pi -kontrollerad Roomba vakuumbot. Operativsystemet vi kommer att använda är via MATLAB.
Steg 1: Tillbehör
Vad du behöver samla för att genomföra detta projekt:
- iRobots Create2 Roomba dammsugare bot
- Raspberry Pi
- Raspberry Pi -kamera
- Den senaste versionen av MATLAB
- Roomba installerar verktygslåda för MATLAB
- MATLAB -applikation för en mobil enhet
Steg 2: Problemmeddelandet
Vi fick i uppgift att använda MATLAB för att utveckla en rover som kan användas på Mars för att hjälpa forskare att samla in planetdata. Funktionerna som vi tog upp i vårt projekt var fjärrkontroll, objektpåverkansigenkänning, vattenigenkänning, livsigenkänning och bildbehandling. För att uppnå dessa bedrifter kodade vi med hjälp av Roomba -verktygslådekommandon för att manipulera de många funktionerna i iRobots Create2 Roomba.
Steg 3: Bluetooth -fjärrkontroll
Denna bild kommer att gå igenom koden för att styra Roombas rörelse med hjälp av Bluetooth-funktioner på din smartphone-enhet. För att börja, ladda ner MATLAB -applikationen till din smartphone och logga in på ditt Mathworks -konto. När du har loggat in går du till "mer", "inställningar" och ansluter till din dator med dess IP -adress. När du är ansluten, gå tillbaka till "mer" och välj "sensorer". Knacka på den tredje sensorn i skärmens övre verktygsfält och tryck på start. Nu är din smartphone en fjärrkontroll!
Koden är följande:
medan 0 == 0
paus (.5)
PhoneData = M. Orientation;
Azi = PhoneData (1);
Pitch = PhoneData (2);
Sida = PhoneData (3);
gupp = r.getBumpers;
om sidan> 80 || Sida <-80
r. stopp
r. pip ('C, E, G, C^, G, E, C')
ha sönder
annarsif sida> 20 && sida <40
r.turnAngle (-5);
annars sidan> 40
r.turnAngle (-25);
annars sidan-40
r.turnAngle (5);
annarsif sida <-40
r.turnAngle (25);
slutet
om Pitch> 10 && Pitch <35
r.moveDistance (.03)
elseif Pitch> -35 && Pitch <-10
r.moveDistance (-. 03)
slutet
slutet
Steg 4: Impact Recognition
En annan funktion som vi implementerade var att upptäcka påverkan av Roomba i ett objekt och sedan korrigera dess nuvarande väg. För att göra detta måste vi använda villkor med avläsningar från stötfångarsensorerna för att avgöra om ett föremål träffades. Om roboten träffar ett objekt kommer den att backa.2 meter och rotera i en vinkel som bestäms av vilken stötfångare som träffades. När ett objekt har träffats visas en meny som visar ordet "oof".
Koden visas nedan:
medan 0 == 0
gupp = r.getBumpers;
r.setDriveVelocity (.1)
if bumps.left == 1
msgbox ('Oj!');
r.moveDistance (-0,2)
r.setTurnVelocity (.2)
r.turnAngle (-35)
r.setDriveVelocity (.2)
elseif bumps.front == 1
msgbox ('Oj!');
r.moveDistance (-0,2)
r.setTurnVelocity (.2)
r.turnAngle (90)
r.setDriveVelocity (.2)
elseif bumps.right == 1
msgbox ('Oj!');
r.moveDistance (-0,2)
r.setTurnVelocity (.2)
r.turnAngle (35)
r.setDriveVelocity (.2)
elseif bumps.leftWheelDrop == 1
msgbox ('Oj!');
r.moveDistance (-0,2)
r.setTurnVelocity (.2)
r.turnAngle (-35)
r.setDriveVelocity (.2)
elseif bumps.rightWheelDrop == 1
msgbox ('Oj!');
r.moveDistance (-0,2)
r.setTurnVelocity (.2)
r.turnAngle (35)
r.setDriveVelocity (.2)
slutet
slutet
Steg 5: Livsigenkänning
Vi kodade ett system för livsigenkänning för att läsa färgerna på föremål framför det. De tre sorters liv som vi kodade för är växter, vatten och utomjordingar. För att göra detta kodade vi sensorerna för att beräkna medelvärdena för rött, blått, grönt eller vitt. Dessa värden jämfördes med trösklarna som manuellt sattes för att bestämma färgen som kameran tittar på. Koden skulle också rita vägen till objektet och skapa en karta.
Koden är följande:
t = 10;
i = 0;
medan t == 10
img = r.getImage; imshow (img)
paus (0,167)
i = i + 1;
red_mean = medelvärde (medelvärde (img (:,:, 1)));
blue_mean = medelvärde (medelvärde (img (:,:, 3)));
green_mean = medelvärde (medelvärde (img (:,:, 2)));
white_mean = (blue_mean + green_mean + red_mean) / 3; %vill ha detta värde cirka 100
nine_plus_ten = 21;
green_threshold = 125;
blue_threshold = 130;
white_threshold = 124;
röd_tröskel = 115;
medan nine_plus_ten == 21 %grönt - liv
om green_mean> green_threshold && blue_mean <blue_threshold && red_mean <red_threshold
r.moveDistance (-. 1)
a = msgbox ('möjlig livskälla hittad, plats plottad');
paus (2)
radera (a)
[y2, Fs2] = ljudläsning ('z_speak2.wav');
ljud (y2, Fs2)
paus (2)
%plant = r.getImage; %imshow (växt);
%spara ('plant_img.mat', plant ');
%tomtplats i grönt
i = 5;
ha sönder
annan
nine_plus_ten = 19;
slutet
slutet
nine_plus_ten = 21;
medan nine_plus_ten == 21 %blå - woder
om blue_mean> blue_threshold && green_mean <green_threshold && white_mean <white_threshold && red_mean <red_threshold
r.moveDistance (-. 1)
a = msgbox ('en vattenkälla har hittats, platsen ritad');
paus (2)
radera (a)
[y3, Fs3] = ljudläsning ('z_speak3.wav');
ljud (y3, Fs3);
%woder = r.getImage; %imshow (woder)
%spara ('water_img.mat', woder)
%tomtplats i blått
i = 5;
ha sönder
annan
nine_plus_ten = 19;
slutet
slutet
nine_plus_ten = 21;
medan nine_plus_ten == 21 %vit - aliens monkaS
om white_mean> white_threshold && blue_mean <blue_threshold && green_mean <green_threshold
[y5, Fs5] = ljudläsning ('z_speak5.wav');
ljud (y5, Fs5);
paus (3)
r.setDriveVelocity (0,.5)
[ys, Fss] = ljudläsning ('z_scream.mp3');
ljud (ys, Fss);
paus (3)
r. stopp
% alien = r.getImage; %imshow (alien);
% spara ('alien_img.mat', alien);
i = 5;
ha sönder
annan
nine_plus_ten = 19;
slutet
slutet
om jag == 5
a = 1; %vänder vinkel
t = 9; %avsluta stor slinga
i = 0;
slutet
slutet
Steg 6: Kör det !
När all koden har skrivits kombinerar du allt till en fil och voila! Din Roomba -bot kommer nu att fungera fullt ut och fungera som annonserat! Bluetooth -kontrollen bör dock antingen vara i en separat fil eller åtskild från resten av koden med %%.
Njut av att använda din robot !!