Inhoudsopgave:

Mars Roomba: 6 stappen
Mars Roomba: 6 stappen

Video: Mars Roomba: 6 stappen

Video: Mars Roomba: 6 stappen
Video: ✅ Los MEJORES ROBOT ASPIRADOR en CALIDAD PRECIO del 2023 // GUIA DEFINITIVA 2024, November
Anonim
Mars Roomba
Mars Roomba

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

De probleemstelling
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

Bluetooth-afstandsbediening
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

Impactherkenning
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

Erkenning van het leven
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!!

Aanbevolen: