Inhoudsopgave:
2025 Auteur: John Day | [email protected]. Laatst gewijzigd: 2025-01-13 06:57
Deze Instructable zal je begeleiden in de richting van het bedienen van een Raspberry Pi-gestuurde Roomba-vacuümbot. Het besturingssysteem dat we gaan gebruiken is via MATLAB.
Stap 1: Benodigdheden
Wat je moet verzamelen om dit project uit te voeren:
- iRobot's Create2 Roomba stofzuiger bot
- Raspberry Pi
- Raspberry Pi-camera
- De nieuwste versie van MATLAB
- De Roomba-installatietoolbox voor MATLAB
- MATLAB-applicatie voor een mobiel apparaat
Stap 2: De probleemstelling
We kregen de opdracht om MATLAB te gebruiken om een rover te ontwikkelen die op Mars kan worden gebruikt om wetenschappers te helpen bij het verzamelen van planeetgegevens. De functies die we in ons project behandelden, waren afstandsbediening, objectimpactherkenning, waterherkenning, levensherkenning en beeldverwerking. Om deze prestaties te bereiken, hebben we gecodeerd met behulp van de Roomba-toolbox-opdrachten om de vele functies van Create2 Roomba van iRobot te manipuleren.
Stap 3: Bluetooth-afstandsbediening
Deze dia loopt door de code om de beweging van de Roomba te regelen met behulp van de Bluetooth-mogelijkheden van uw smartphoneapparaat. Download om te beginnen de MATLAB-applicatie naar uw smartphone en log in op uw Mathworks-account. Eenmaal ingelogd, ga naar "meer", "instellingen", en maak verbinding met uw computer via het IP-adres. Eenmaal verbonden, ga terug naar "meer" en selecteer "sensoren". Tik op de derde sensor op de bovenste werkbalk van het scherm en tik op start. Nu is uw smartphone een afstandsbediening!
De code is als volgt:
terwijl 0 == 0
pauze (.5)
PhoneData = M. Oriëntatie;
Azi = Telefoongegevens(1);
Pitch = Telefoongegevens (2);
Zijkant = Telefoongegevens (3);
hobbels = r.getBumpers;
als zijde>80 || Zijkant <-80
r.stop
r.piep('C, E, G, C^, G, E, C')
pauze
elseif Zijde>20 && Zijde<40
r.turnAngle(-5);
elseif Zijde>40
r.turnAngle(-25);
elseif Side-40
r.turnAngle(5);
elseif Side<-40
r.turnAngle(25);
einde
als toonhoogte >10 && toonhoogte <35
r.moveDistance(.03)
elseif Pitch>-35 && Pitch<-10
r.moveDistance(-.03)
einde
einde
Stap 4: Impactherkenning
Een andere functie die we hebben geïmplementeerd, was om de impact van de Roomba op een object te detecteren en vervolgens het huidige pad te corrigeren. Om dit te doen, moesten we conditionals gebruiken met de metingen van de bumpersensoren om te bepalen of een object werd geraakt. Als de robot een object raakt, zal hij 0,2 meter achteruit rijden en draaien onder een hoek die wordt bepaald door welke bumper is geraakt. Zodra een item is geraakt, verschijnt er een menu met het woord 'oof'.
De code wordt hieronder weergegeven:
terwijl 0 == 0
hobbels = r.getBumpers;
r.setDriveVelocity(.1)
if hobbels.links == 1
msgbox('Oef!');
r.moveDistance(-0.2)
r.setTurnVelocity(.2)
r.draaihoek(-35)
r.setDriveVelocity(.2)
elseif hobbels.front == 1
msgbox('Oef!');
r.moveDistance(-0.2)
r.setTurnVelocity(.2)
r.turnAngle(90)
r.setDriveVelocity(.2)
elseif hobbels.right == 1
msgbox('Oef!');
r.moveDistance(-0.2)
r.setTurnVelocity(.2)
r.turnAngle(35)
r.setDriveVelocity(.2)
elseif hobbels.leftWheelDrop ==1
msgbox('Oef!');
r.moveDistance(-0.2)
r.setTurnVelocity(.2)
r.draaihoek(-35)
r.setDriveVelocity(.2)
elseif hobbels.rightWheelDrop ==1
msgbox('Oef!');
r.moveDistance(-0.2)
r.setTurnVelocity(.2)
r.turnAngle(35)
r.setDriveVelocity(.2)
einde
einde
Stap 5: Erkenning van het leven
We hebben een levensherkenningssysteem gecodeerd om de kleuren van objecten ervoor te lezen. De drie soorten leven waarvoor we codeerden zijn planten, water en buitenaardse wezens. Om dit te doen, hebben we de sensoren gecodeerd om de gemiddelde waarden van rood, blauw, groen of wit te berekenen. Deze waarden werden vergeleken met de drempels die handmatig werden ingesteld om te bepalen naar welke kleur de camera kijkt. De code zou ook het pad naar het object plotten en een kaart maken.
De code is als volgt:
t = 10;
ik = 0;
terwijl t == 10
img = r.getImage; imshow(img)
pauze(0.167)
ik = ik + 1;
red_mean = gemiddelde(gemiddelde(img(:,:, 1)));
blue_mean = gemiddelde(gemiddelde(img(:,:, 3)));
green_mean = gemiddelde(gemiddelde(img(:,:, 2)));
white_mean = (blue_mean + green_mean + red_mean) / 3; %wil deze waarde ongeveer 100
negen_plus_ten = 21;
green_threshold = 125;
blue_threshold = 130;
white_threshold = 124;
red_threshold = 115;
terwijl nine_plus_ten == 21% groen - leven
if green_mean > green_threshold && blue_mean < blue_threshold && red_mean < red_threshold
r.moveDistance(-.1)
a = msgbox('mogelijke levensbron gevonden, locatie uitgezet');
pauze (2)
verwijderen(a)
[y2, Fs2] =audioread('z_speak2.wav');
geluid (y2, Fs2)
pauze (2)
%plant = r.getImage; %imshow(plant);
%save('plant_img.mat', plant');
%plotlocatie in het groen
ik = 5;
pauze
anders
negen_plus_ten = 19;
einde
einde
negen_plus_ten = 21;
terwijl nine_plus_ten == 21%blauw - woder
if blue_mean > blue_threshold && green_mean < green_threshold && white_mean < white_threshold && red_mean < red_threshold
r.moveDistance(-.1)
a = msgbox('een waterbron is gevonden, locatie uitgezet');
pauze (2)
verwijderen(a)
[y3, Fs3] =audioread('z_speak3.wav');
geluid (y3, Fs3);
%woder = r.getImage; %imshow(woder)
%save('water_img.mat', woder)
%plotlocatie in blauw
ik = 5;
pauze
anders
negen_plus_ten = 19;
einde
einde
negen_plus_ten = 21;
while nine_plus_ten == 21 %wit - aliens monkaS
if white_mean > white_threshold && blue_mean < blue_threshold && green_mean < green_threshold
[y5, Fs5] =audioread('z_speak5.wav');
geluid (y5, Fs5);
pauze (3)
r.setDriveVelocity(0,.5)
[ys, Fss] =audioread('z_scream.mp3');
geluid (ys, Fss);
pauze (3)
r.stop
% alien = r.getImage; %imshow(buitenaards);
% save('alien_img.mat', alien);
ik = 5;
pauze
anders
negen_plus_ten = 19;
einde
einde
als ik == 5
een = 1; % draait hoek
t = 9; %beëindig grote lus
ik = 0;
einde
einde
Stap 6: Voer het uit
Nadat alle code is geschreven, combineert u alles in één bestand en voila! Uw Roomba-bot zal nu volledig functioneel zijn en werken zoals geadverteerd! De Bluetooth-besturing moet echter in een apart bestand staan of met %% van de rest van de code worden gescheiden.
Veel plezier met het gebruik van je robot!!