Sommario:
- Passaggio 1: ottenere le librerie
- Passaggio 2: scrittura dei programmi
- Passaggio 3: codice
- Passaggio 4: esecuzione del codice
Video: Mars Roomba Project UTK: 4 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:02
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:
Trasformare il Roomba in un Mars Rover: 5 passaggi
Trasformare il tuo Roomba in un Mars Rover:
Robot Project UTK 2017: 3 passaggi
Robot Project UTK 2017: Mission: Il nostro team di ingegneri è stato assunto da Froogle, una fondazione non profit per lo sviluppo di tecnologie open source, per sviluppare un innovativo "rover" Human Assisting Mars Rover. è un roomba che abbiamo codificato per eseguire una serie di
Mars Rover con Raspberry Pi: 5 passaggi
Mars Rover con Raspberry Pi: cari tutti grandi studenti, sono sempre curioso di conoscere il rover su Marte, con 6 ruote che possono andare su tutta la superficie di Marte ed esplorare le cose dalla Terra. Voglio anche esplorare la cosa sedendomi sul mio laptop. Quindi ora penso che sia il momento giusto per farlo e
Mars Roomba: 6 passaggi
Mars Roomba: questo Instructable ti guiderà nelle direzioni di funzionamento di un robot aspirapolvere Roomba controllato da Raspberry Pi. Il sistema operativo che utilizzeremo è tramite MATLAB
Progetto UTK EF 230 MarsRoomba Autunno 2018: 5 passaggi
Progetto UTK EF 230 MarsRoomba Autunno 2018: Attualmente, i rover su Marte vengono utilizzati per raccogliere dati sulla superficie di Marte attraverso vari metodi, allo scopo ultimo di saperne di più sul potenziale del pianeta per la vita microbica. I rover utilizzano principalmente la fotografia e gli strumenti di analisi del suolo per la raccolta dei dati