Cuprins:

Marte Roomba: 6 pași
Marte Roomba: 6 pași

Video: Marte Roomba: 6 pași

Video: Marte Roomba: 6 pași
Video: Me Reclama 2024, Noiembrie
Anonim
Marte Roomba
Marte Roomba

Acest instructable vă va ghida în direcțiile de operare a unui robot aspirator Roomba controlat de Raspberry Pi. Sistemul de operare pe care îl vom folosi este prin MATLAB.

Pasul 1: consumabile

Ce va trebui să strângeți pentru a realiza acest proiect:

  • Botul aspiratorului Create2 Roomba iRobot
  • Raspberry Pi
  • Camera Raspberry Pi
  • Cea mai recentă versiune a MATLAB
  • Setul de instrumente de instalare Roomba pentru MATLAB
  • Aplicație MATLAB pentru un dispozitiv celular

Pasul 2: Declarația de problemă

Declarația problemei
Declarația problemei

Ni s-a însărcinat să folosim MATLAB pentru a dezvolta un rover care să poată fi folosit pe Marte pentru a ajuta oamenii de știință să colecteze date despre planetă. Funcțiile pe care le-am abordat în proiectul nostru au fost controlul de la distanță, recunoașterea impactului obiectelor, recunoașterea apei, recunoașterea vieții și procesarea imaginilor. Pentru a realiza aceste fapte, am codat folosind comenzile din cutia de instrumente Roomba pentru a manipula numeroasele funcții ale Create2 Roomba ale iRobot.

Pasul 3: telecomandă Bluetooth

Telecomandă Bluetooth
Telecomandă Bluetooth

Acest diapozitiv va parcurge codul pentru a controla mișcarea Roomba utilizând funcțiile Bluetooth ale dispozitivului dvs. smartphone. Pentru început, descărcați aplicația MATLAB pe telefonul smartphone și conectați-vă la contul dvs. Mathworks. Odată conectat, accesați „mai multe”, „setări” și conectați-vă la computer utilizând adresa IP a acestuia. După conectare, reveniți la „mai multe” și selectați „senzori”. Apăsați pe al treilea senzor din bara de instrumente de sus a ecranului și atingeți Start. Acum, smartphone-ul dvs. este o telecomandă!

Codul este după cum urmează:

în timp ce 0 == 0

pauză (.5)

PhoneData = M. Orientation;

Azi = PhoneData (1);

Pitch = PhoneData (2);

Side = PhoneData (3);

bumps = r.getBumpers;

dacă Side> 80 || Latura <-80

r.stop

r.beep („C, E, G, C ^, G, E, C”)

pauză

elseif Side> 20 && Side <40

r.turnAngle (-5);

elseif Side> 40

r.turnAngle (-25);

elseif Side-40

r.turnAngle (5);

elseif Side <-40

r.turnAngle (25);

Sfârșit

dacă Pitch> 10 && Pitch <35

r.moveDistance (.03)

elseif Pitch> -35 && Pitch <-10

r.moveDistance (-. 03)

Sfârșit

Sfârșit

Pasul 4: Recunoașterea impactului

Recunoașterea impactului
Recunoașterea impactului

O altă funcție pe care am implementat-o a fost să detectăm impactul Roomba într-un obiect și apoi să-i corectăm calea curentă. Pentru a face acest lucru, a trebuit să folosim condiționate cu citirile de la senzorii barei de protecție pentru a determina dacă a fost lovit un obiect. Dacă robotul lovește un obiect, se va întoarce înapoi.2 metri și se va roti la un unghi determinat de bara de protecție. Odată ce un element a fost lovit, apare un meniu care afișează cuvântul „oof”.

Codul este prezentat mai jos:

în timp ce 0 == 0

bumps = r.getBumpers;

r.setDriveVelocity (.1)

dacă bumps.left == 1

msgbox ('Oof!');

r.moveDistance (-0,2)

r.setTurnVelocity (.2)

r.turnAngle (-35)

r.setDriveVelocity (.2)

elseif bumps.front == 1

msgbox ('Oof!');

r.moveDistance (-0,2)

r.setTurnVelocity (.2)

r.turnAngle (90)

r.setDriveVelocity (.2)

elseif bumps.right == 1

msgbox ('Oof!');

r.moveDistance (-0,2)

r.setTurnVelocity (.2)

r.turnAngle (35)

r.setDriveVelocity (.2)

elseif bumps.leftWheelDrop == 1

msgbox ('Oof!');

r.moveDistance (-0,2)

r.setTurnVelocity (.2)

r.turnAngle (-35)

r.setDriveVelocity (.2)

elseif bumps.rightWheelDrop == 1

msgbox ('Oof!');

r.moveDistance (-0,2)

r.setTurnVelocity (.2)

r.turnAngle (35)

r.setDriveVelocity (.2)

Sfârșit

Sfârșit

Pasul 5: Recunoașterea vieții

Recunoașterea vieții
Recunoașterea vieții

Am codificat un sistem de recunoaștere a vieții pentru a citi culorile obiectelor din fața sa. Cele trei tipuri de viață pentru care am codificat sunt plantele, apa și extratereștrii. Pentru a face acest lucru, am codificat senzorii pentru a calcula valorile medii ale roșu, albastru, verde sau alb. Aceste valori au fost comparate cu pragurile care au fost setate manual pentru a determina culoarea la care se uită camera. Codul ar trasa, de asemenea, calea către obiect și crearea unei hărți.

Codul este după cum urmează:

t = 10;

i = 0;

în timp ce t == 10

img = r.getImage; imshow (img)

pauză (0,167)

i = i + 1;

red_mean = medie (medie (img (:,:, 1)));

blue_mean = medie (medie (img (:,:, 3))));

green_mean = medie (medie (img (:,:, 2)));

white_mean = (blue_mean + green_mean + red_mean) / 3; % doresc acest val aproximativ 100

nine_plus_ten = 21;

prag_verd = 125;

prag_albastru = 130;

prag_alb = 124;

prag_roșu = 115;

în timp ce nine_plus_ten == 21% verde - viață

dacă green_mean> green_threshold && blue_mean <blue_threshold && red_mean <red_threshold

r.moveDistance (-. 1)

a = msgbox („posibilă sursă de viață găsită, locație trasată”);

pauză (2)

șterge (a)

[y2, Fs2] = audioread ('z_speak2.wav');

sunet (y2, Fs2)

pauză (2)

% plant = r.getImage; % imshow (plantă);

% save ('plant_img.mat', plant ');

% locația parcelei în verde

i = 5;

pauză

altceva

nine_plus_ten = 19;

Sfârșit

Sfârșit

nine_plus_ten = 21;

în timp ce nine_plus_ten == 21% albastru - woder

if blue_mean> blue_threshold && green_mean <green_threshold && white_mean <white_threshold && red_mean <red_threshold

r.moveDistance (-. 1)

a = msgbox („a fost găsită o sursă de apă, locația trasată”);

pauză (2)

șterge (a)

[y3, Fs3] = audioread ('z_speak3.wav');

sunet (y3, Fs3);

% woder = r.getImage; % imshow (woder)

% save ('water_img.mat', woder)

% locația parcelei în albastru

i = 5;

pauză

altceva

nine_plus_ten = 19;

Sfârșit

Sfârșit

nine_plus_ten = 21;

în timp ce nine_plus_ten == 21% alb - extratereștri monkaS

dacă white_mean> white_threshold && blue_mean <blue_threshold && green_mean <green_threshold

[y5, Fs5] = audioread ('z_speak5.wav');

sunet (y5, Fs5);

pauză (3)

r.setDriveVelocity (0,.5)

[ys, Fss] = audioread ('z_scream.mp3');

sunet (ys, Fss);

pauză (3)

r.stop

% alien = r.getImage; % imshow (extraterestru);

% save ('alien_img.mat', extraterestru);

i = 5;

pauză

altceva

nine_plus_ten = 19;

Sfârșit

Sfârșit

dacă i == 5

a = 1; % viraj unghi

t = 9; % termină bucla mare

i = 0;

Sfârșit

Sfârșit

Pasul 6: Rulați-l

După ce a fost scris tot codul, combinați-le într-un singur fișier și voila! Botul dvs. Roomba va fi acum complet funcțional și va funcționa așa cum este publicat! Cu toate acestea, controlul Bluetooth trebuie să fie fie într-un fișier separat, fie separat de restul codului cu %%.

Bucurați-vă de utilizarea robotului dvs. !!

Recomandat: