Taula de continguts:

Mars Roomba: 6 passos
Mars Roomba: 6 passos

Vídeo: Mars Roomba: 6 passos

Vídeo: Mars Roomba: 6 passos
Vídeo: How to Make a Mars Rover / Rocker bogie Robot - Stair climbing 2024, Desembre
Anonim
Mars Roomba
Mars Roomba

Aquest instructiu us guiarà en les instruccions d’operar un robot aspirador Roomba controlat per Raspberry Pi. El sistema operatiu que utilitzarem és a través de MATLAB.

Pas 1: subministraments

Què haureu de reunir per dur a terme aquest projecte:

  • Bot d'aspirador Create2 Roomba d'iRobot
  • Raspberry Pi
  • Càmera Raspberry Pi
  • La darrera versió de MATLAB
  • La caixa d’eines d’instal·lació de Roomba per a MATLAB
  • Aplicació MATLAB per a dispositius mòbils

Pas 2: la declaració del problema

La declaració del problema
La declaració del problema

Se'ns va encarregar utilitzar MATLAB per desenvolupar un rover que es pogués utilitzar a Mart per ajudar els científics a recopilar dades del planeta. Les funcions que vam abordar en el nostre projecte eren de control remot, reconeixement d’impacte d’objectes, reconeixement d’aigua, reconeixement de vida i processament d’imatges. Per aconseguir aquestes gestes, hem codificat amb les ordres de la caixa d’eines Roomba per manipular les moltes funcions de Create2 Roomba d’iRobot.

Pas 3: control remot Bluetooth

Control remot Bluetooth
Control remot Bluetooth

Aquesta diapositiva recorrerà el codi per controlar el moviment de Roomba mitjançant les funcions Bluetooth del dispositiu del vostre telèfon intel·ligent. Per començar, descarregueu l'aplicació MATLAB al vostre telèfon intel·ligent i inicieu sessió al vostre compte de Mathworks. Un cop hàgiu iniciat la sessió, aneu a "més", "configuració" i connecteu-vos a l'ordinador mitjançant la seva adreça IP. Un cop connectat, torneu a "més" i seleccioneu "sensors". Toqueu el tercer sensor de la barra d'eines superior de la pantalla i toqueu Inici. Ara, el vostre telèfon intel·ligent és un control remot.

El codi és el següent:

mentre que 0 == 0

pausa (.5)

PhoneData = M. Orientation;

Azi = PhoneData (1);

Pitch = PhoneData (2);

Side = PhoneData (3);

bumps = r.getBumpers;

si Side> 80 || Costat <-80

r. aturar-se

r.beep ('C, E, G, C ^, G, E, C')

trencar

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);

final

si Pitch> 10 && Pitch <35

r.moveDistance (.03)

elseif Pitch> -35 && Pitch <-10

r.moveDistance (-. 03)

final

final

Pas 4: reconeixement d’impacte

Reconeixement d’impacte
Reconeixement d’impacte

Una altra funció que vam implementar va ser detectar l'impacte del Roomba en un objecte i després corregir el seu camí actual. Per fer-ho, vam haver d’utilitzar els condicionants amb les lectures dels sensors de para-xocs per determinar si es va colpejar un objecte. Si el robot colpeja un objecte, tornarà a fer una còpia de seguretat de 2 metres i girarà en un angle determinat pel cop de para-xocs. Un cop s'ha premut un element, apareix un menú que mostra la paraula "oof".

El codi es mostra a continuació:

mentre que 0 == 0

bumps = r.getBumpers;

r.setDriveVelocity (.1)

si 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)

final

final

Pas 5: reconeixement de la vida

Reconeixement de la vida
Reconeixement de la vida

Hem codificat un sistema de reconeixement de la vida per llegir els colors dels objectes que hi ha al davant. Els tres tipus de vida que codifiquem són les plantes, l’aigua i els extraterrestres. Per fer-ho, hem codificat els sensors per calcular els valors mitjans de vermell, blau, verd o blanc. Aquests valors es van comparar amb els llindars establerts manualment per determinar el color que mira la càmera. El codi també traçaria el camí cap a l'objecte i creava un mapa.

El codi és el següent:

t = 10;

i = 0;

mentre que t == 10

img = r.getImage; imshow (img)

pausa (0,167)

i = i + 1;

red_mean = mean (mitjana (img (:,:, 1))));

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

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

blanc_mig = (blau_mig + verd_mig + vermell_mig) / 3; % vol que aquest valor sigui aproximadament 100

nou_plus_ten = 21;

llindar_verd = 125;

llindar_blau = 130;

llindar_ blanc = 124;

llindar_red = 115;

mentre que nine_plus_ten == 21% verd - vida

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

r.moveDistance (-. 1)

a = msgbox ('possible font de vida trobada, ubicació representada');

pausa (2)

esborrar (a)

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

so (y2, Fs2)

pausa (2)

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

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

% ubicació de la parcel·la en verd

i = 5;

trencar

en cas contrari

nou_plus_ten = 19;

final

final

nou_plus_ten = 21;

mentre que nine_plus_ten == 21% blau - woder

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

r.moveDistance (-. 1)

a = msgbox ('s'ha trobat una font d'aigua, la ubicació es va traçar');

pausa (2)

esborrar (a)

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

so (y3, Fs3);

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

% save ('water_img.mat', woder)

% ubicació de la parcel·la en blau

i = 5;

trencar

en cas contrari

nou_plus_ten = 19;

final

final

nou_plus_ten = 21;

mentre que nine_plus_ten == 21% blancs - aliens monkaS

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

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

so (y5, Fs5);

pausa (3)

r.setDriveVelocity (0,.5)

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

so (ys, Fss);

pausa (3)

r. aturar-se

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

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

i = 5;

trencar

en cas contrari

nou_plus_ten = 19;

final

final

si i == 5

a = 1; % de girs

t = 9; % finalitza el bucle gran

i = 0;

final

final

Pas 6: executeu-lo

Després d’haver escrit tot el codi, combineu-ho tot en un sol fitxer i voilà! El vostre bot Roomba ara serà completament funcional i funcionarà tal i com s’anuncia. Tanmateix, el control Bluetooth hauria d'estar en un fitxer separat o separat de la resta del codi amb %%.

Gaudeix d'utilitzar el teu robot !!

Recomanat: