Sommario:

Mars Roomba Project UTK: 4 passaggi
Mars Roomba Project UTK: 4 passaggi

Video: Mars Roomba Project UTK: 4 passaggi

Video: Mars Roomba Project UTK: 4 passaggi
Video: Дневник хранящий жуткие тайны. Переход. Джеральд Даррелл. Мистика. Ужасы 2024, Luglio
Anonim
Progetto Roomba su Marte UTK
Progetto Roomba su Marte UTK
Mars Roomba Project UTK
Mars Roomba Project UTK

DISCLAIMER: FUNZIONA SOLO SE IL ROOMBA È CONFIGURATO IN A

MODO MOLTO SPECIFICO, QUESTO ISTRUZIONI È STATO CREATO E DESTINATO AD ESSERE UTILIZZATO DA STUDENTI E FACOLTÀ DELL'UNIVERSITÀ DEL TENNESSEE

Questo codice viene utilizzato per configurare un Roomba in modo che esegua il codice scritto e salvato localmente in MATLAB. Questo non funzionerà se non riesci a ottenere le biblioteche necessarie dal sito Web dell'Università del Tennessee. Se si dispone delle librerie, è possibile utilizzarle per programmare il proprio Roomba utilizzando le funzioni nella libreria. Questo Instructable ti insegna come installare le librerie, creare una cartella per tutto il codice e come codificare e utilizzare il programma che abbiamo fornito in basso.

Materiali richiesti:

· Roomba

· MATLAB

· Fotocamera Raspberry Pi e Pi

Passaggio 1: ottenere le librerie

Sul sito Web di ingegneria è fornita una cassetta degli attrezzi/libreria, scaricala e inseriscila in una nuova cartella. Questa cartella deve contenere tutti i file di lavoro del progetto in quanto qualsiasi funzione utilizzata in un programma che realizzerai dovrà fare riferimento alla libreria. Dopo averlo fatto, puoi iniziare a lavorare sui tuoi programmi

Passaggio 2: scrittura dei programmi

Ci sono alcune funzioni che possono essere utilizzate nel programma, queste funzioni sono accessibili usando il comando "doc roomba". Utilizzando queste funzioni, puoi controllare Roomba in molti modi diversi. Il codice riportato di seguito utilizza i sensori di urto, i sensori della barra luminosa, la fotocamera e i sensori di dislivello in modi diversi per creare un rover su Marte. Abbiamo utilizzato i sensori di impatto per rilevare quando Roomba colpisce un oggetto, quando ciò accade il robot si invertirà, si girerà e continuerà a muoversi. Prima che Roomba colpisca un oggetto, la barra luminosa rileverà l'oggetto e rallenterà Roomba in modo che quando urta l'oggetto per attivare il sensore di urto, Roomba sarà meno danneggiato/colpito dall'impatto. La telecamera cerca acqua o lava sulla superficie, se non viene trovato alcun liquido il robot continuerà a cercare, se viene trovata dell'acqua il robot invierà un messaggio agli operatori. I sensori di dirupo sono progettati per fermare il robot se si avvicina a un dirupo. Se il robot rileva una scogliera, invertirà e si girerà per evitare di cadere.

Passaggio 3: codice

Copia e incolla questo in un file MATLAB che si trova nella stessa cartella delle librerie

functionMainRoombaFile(r)

r.setDriveVelocity(0.1, 0.1)

while true % Infinito ciclo while per mantenere il codice in esecuzione

dontFall = cliffCheck(r) % Assegna la variabile 'dontFall' alla funzione 'cliffCheck'

if dontFall % if istruzione per procedere nel codice dopo il completamento di 'cliffCheck'

r.setDriveVelocity(0.1, 0.1) % Mantiene Roomba in movimento dopo il completamento di 'cliffCheck'

end % termina 'dontFall' if istruzione

bumper=bumpcheck(r) % Assegna la variabile 'bumper' alla funzione 'bumpcheck'

if bumper % if istruzione di procedere nel codice dopo il completamento del "bumpcheck"

r.setDriveVelocity(0.1, 0.1) % Mantiene Roomba in movimento dopo il completamento del "bumpcheck"

end % termina 'bumper' if istruzione

liquidi = LiquidCheck(r) % Assegna la variabile 'liquids' alla funzione 'LiquidCheck'

if liquids % if istruzione di procedere nel codice dopo il completamento di "LiquidCheck"

r.setDriveVelocity(0.1, 0.1) % Mantiene Roomba in movimento dopo il completamento di "LiquidCheck"

end % termina 'liquids' if istruzione

lightbumper=lightcheck(r) % Assegna la variabile 'lightbumper' alla funzione 'lightcheck'

pause(0.1) % Pausa brevemente per evitare l'iterazione del ciclo continuo

end % termina infinito ciclo while

fine % termina la funzione

funzione bumper=bumpcheck(r) % Crea la funzione 'bumpcheck'

bumpdata= r.getBumpers % Assegna tutti i dati dal paraurti alla variabile 'bumpdata'

paraurti = bumpdata.right || bumpdata.left || bumpdata.front % Crea una variabile memorizzata, 'bumper', per i diversi bumper

if bumpdata.right>0 % L'istruzione If fa sì che vengano eseguite diverse funzioni di roomba se Bumper viene urtato

r.stop % Arresta Roomba

r.moveDistance(-0.3, 0.2) % Inverte Roomba 0.3m

r.turnAngle(90, 0.5) % Ruota Roomba di 90 gradi il più velocemente possibile

fine

se bumpdata.front>0

r.stop

r.moveDistance(-0.3, 0.2)

r.turnAngle(randi(270), 0.5) % Ruota Roomba a un intervallo casuale tra 0 e 270 gradi il più velocemente possibile

fine

se bumpdata.left>0

r.stop

r.moveDistance(-0.3, 0.2)

r.turnAngle(-90, 0.5) % Ruota Roomba di -90 gradi il più velocemente possibile

fine

fine

function lightbumper=lightcheck(r) % Crea la funzione 'lightcheck'

lightdata= r.getLightBumpers % Assegna tutti i dati dal sensore di luce alla variabile 'lightdata'

lightbumper = lightdata.left || lightdata.right || lightdata.rightCenter || lightdata.leftCenter % Crea una variabile memorizzata, 'lightbumper', per i diversi light bumper

if lightbumper % Istruzione If per chiamare i dati lightbumper dall'alto

if lightdata.left>10 % L'istruzione If fa sì che si verifichino diverse funzioni di roomba se il paraurti della luce rileva più di 10 valori

r.setDriveVelocity(0.05, 0.05) % Rallenta roomba per prepararsi all'urto

end % termina l'istruzione if iniziale

se lightdata.rightCenter>10

r.setDriveVelocity(0.05, 0.05)

fine

se lightdata.right>10

r.setDriveVelocity(0.05, 0.05)

fine

se lightdata.leftCenter>10

r.setDriveVelocity(0.05, 0.05)

fine

end % termina 'lightbumper' if istruzione

end % termina la funzione di controllo luminoso

function dontFall = cliffCheck(r) % Crea la funzione 'cliffCheck'

data = r.getCliffSensors; % Assegna tutti i dati dal sensore di dislivello alla variabile 'dati'

dontFall = data.left<1020 || data.leftFront<1020 || data.rightFront<1020 || data.right<1020 % Crea una variabile memorizzata, 'dontFall', per i diversi sensori di dislivello

if dontFall % Istruzione If per chiamare i dati del sensore di dislivello dall'alto

if data.left < 1010 % L'istruzione If fa sì che si verifichino diverse funzioni del roomba se il sensore di dislivello rileva meno di 1010 valori

r.stop

r.moveDistance(-0.2, 0.2) % Inverte Roomba 0.2m

r.turnAngle(-90, 0.5) % Ruota Roomba di -90 gradi il più velocemente possibile

elseif data.leftFront < 1010

r.stop

r.moveDistance(-0.3, 0.2)

r.turnAngle(90, 0.5) % Ruota Roomba di 90 gradi il più velocemente possibile

elseif data.rightFront < 1010

r.stop

r.moveDistance(-0.3, 0.2)

r.turnAngle(90, 0.5) % Ruota Roomba di 90 gradi il più velocemente possibile

elseif data.right < 1010

r.stop

r.moveDistance(-0.3, 0.2)

r.turnAngle(90, 0.5) % Ruota Roomba di 90 gradi il più velocemente possibile

fine

fine

fine

function liquids = LiquidCheck(r) % Crea la funzione 'LiquidCheck'

while true %start ciclo infinito per la calibrazione

img = r.getImage; % legge la telecamera dal robot

image(img) % mostra l'immagine in una finestra di figura

red_mean = mean(mean(img(200, 150, 1)))% legge la quantità media di pixel rossi

blue_mean = mean(mean(img(200, 150, 3)))% legge la quantità media di pixel blu

liquidi = red_mean || blue_mean % Crea una variabile memorizzata, 'liquids', per le diverse variabili di colore

if liquids % Istruzione If per richiamare i dati dell'immagine dall'alto

if red_mean>170 % If istruzione per far sì che si verifichino diverse funzioni di roomba se la telecamera vede un colore rosso medio maggiore di 170

r.stop % ferma roomba

r.setLEDCenterColor(255) % imposta il cerchio sul colore rosso

r.setLEDDigits(); % cancella il display

f = waitbar(0, '*MESSAGGIO IN ARRIVO*'); % crea una barra di attesa per un messaggio di caricamento

r.setLEDDigits('HOT'); % imposta il display LED sull'uscita 'HOT'

pause(0.5) %Breve pausa per leggere le informazioni visualizzate

r.setLEDDigits('LAVA'); % imposta il display LED sull'uscita 'LAVA'

pausa(0.5)

waitbar(.33, f, '*MESSAGGIO IN ARRIVO*'); %crea un aumento della barra di attesa

r.setLEDDigits('HOT');

pausa(0.5)

r.setLEDDigits('LAVA');

pausa(0.5)

waitbar(.67, f, '*MESSAGGIO IN ARRIVO*'); % crea un aumento della barra di attesa

r.setLEDDigits('HOT');

pausa(0.5)

r.setLEDDigits('LAVA');

waitbar(1, f, '*MESSAGGIO IN ARRIVO*'); % completa la barra di attesa

pausa(1)

close(f) %chiude la barra di attesa

r.setLEDDigits(); % cancella il display a LED

chiudi tutto %Chiude tutte le finestre precedenti

assi('Color', 'none', 'XColor', 'none', 'YColor', 'none') % Cancella la finestra del tracciato degli assi e del grafico

y=0,5; % imposta la posizione y del testo nella finestra di stampa

x=0.06; % imposta la posizione x del testo nella finestra di stampa

title('FROM MARS ROOMBA', 'fontsize', 32) % Aggiunge un titolo alla finestra di stampa

quadeqtxt = 'LAVA PERICOLOSA'; % Imposta la variabile 'quadeqtxt' sull'output 0

text(x, y, quadeqtxt, 'interprete', 'latex', 'fontsize', 36); % visualizza il testo quadeq nella finestra di stampa

r.moveDistance(-0.2, 0.2) %inverte il roomba 0.2m

r.turnAngle(180, 0.5) %ruota roomba di 180 gradi il più velocemente possibile

r.setLEDCenterColor(128, 128); % imposta il LED centrale di roomba su arancione

chiudi tutto %chiude le finestre rimanenti aperte

elseif blue_mean>175 % If istruzione per far sì che si verifichino diverse funzioni di roomba se la telecamera vede un colore blu medio maggiore di 175

r.stop % ferma roomba

r.setLEDCenterColor(255) % imposta il cerchio sul colore rosso

r.setLEDDigits(); % cancella il display

f = waitbar(0, '*MESSAGGIO IN ARRIVO*'); % crea una barra di attesa per un messaggio di caricamento

r.setLEDDigits('GUARDA'); % imposta il display LED sull'uscita 'LOOK'

pause(0.5) %Breve pausa per leggere le informazioni visualizzate

r.setLEDDigits('WATR'); % imposta il display LED sull'uscita 'WATR'

pausa(0.5)

waitbar(.33, f, '*MESSAGGIO IN ARRIVO*'); %crea un aumento della barra di attesa

r.setLEDDigits('GUARDA');

pausa(0.5)

r.setLEDDigits('WATR');

pausa(0.5)

waitbar(.67, f, '*MESSAGGIO IN ARRIVO*'); % crea un aumento della barra di attesa

r.setLEDDigits('GUARDA');

pausa(0.5)

r.setLEDDigits('WATR');

waitbar(1, f, '*MESSAGGIO IN ARRIVO*'); % completa la barra di attesa

pausa(1)

close(f) %chiude la barra di attesa

r.setLEDDigits(); % cancella il display a LED

chiudi tutto %Chiude tutte le finestre precedenti

assi('Color', 'none', 'XColor', 'none', 'YColor', 'none') % Cancella la finestra del tracciato degli assi e del grafico

y=0,5; % imposta la posizione y del testo nella finestra di stampa

x=0.06; % imposta la posizione x del testo nella finestra di stampa

title('FROM MARS ROOMBA', 'fontsize', 32) % Aggiunge un titolo alla finestra di stampa

quadeqtxt = 'TROVATO ACQUA'; % Imposta la variabile 'quadeqtxt' sull'output 0

text(x, y, quadeqtxt, 'interprete', 'latex', 'fontsize', 36); % visualizza il testo quadeq nella finestra di stampa

r.moveDistance(-0.2, 0.2) %inverte il roomba 0.2m

r.turnAngle(180, 0.5) %ruota roomba di 180 gradi il più velocemente possibile

r.setLEDCenterColor(128, 128); % imposta il LED centrale di roomba su arancione

chiudi tutto %chiude le finestre rimanenti aperte

end %ends 'red_mean' if istruzione

end %ends 'liquids' if istruzione

end % chiude il ciclo while infinito

end % termina la funzione 'LiquidCheck'

Passaggio 4: esecuzione del codice

Dopo aver copiato e incollato il codice in MATLAB, devi connetterti a Roomba. Una volta connesso Roomba, è necessario denominare la variabile r. Le funzioni utilizzano la variabile r quando si fa riferimento a Roomba, quindi Roomba deve essere definito come variabile r. Dopo aver eseguito il codice, Roomba dovrebbe funzionare come indicato.

Consigliato: