Sommario:
- Passaggio 1: materiali e forniture:
- Passo 2:
- Passaggio 3: assemblare il tuo "giardino"
- Passaggio 4: scrittura del codice
- Passaggio 5: copia il codice
Video: Garden Helper Roomba Bot: 8 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:04
Kiara Myers, Ahmad Alghadeer e Madison Tippet
Scopo:
Questo tutorial ti insegnerà come programmare un Roomba Bot, usando MATLAB, per navigare in un giardino, rilevando frutta/verdura di forma circolare che sono abbastanza maturi da essere raccolti in base alle loro dimensioni. Questo robot ti invia anche un'email, avvisandoti di quanti frutti sono pronti per essere raccolti e del percorso che ha percorso.
Caratteristiche:
- Utilizza sensori di luce per rilevare i muri e gira leggermente per evitare di colpirli
- Utilizza sensori di urto per interrompere il programma quando colpisce la roccia alla fine del giardino
- Utilizza l'elaborazione delle immagini per rilevare un cerchio nel giardino e quindi determinarne il raggio
- Utilizza sensori di scogliera per rilevare un nastro colorato che indica la presenza di un frutto
Passaggio 1: materiali e forniture:
- Un computer portatile
- MATLAB 2017
- Roomba Aspirapolvere
- Lampone Pi
- Blocchi di legno
- Carta bianca
- Carta nera
- Nastro colorato/sottile striscia di carta colorata
- Roccia grande
Passo 2:
Passaggio 3: assemblare il tuo "giardino"
- Prendi la tua carta nera e taglia cerchi di varie dimensioni
-
Fissa questi cerchi neri su un grande foglio bianco
Questo contrasto sarà necessario quando si rileva un frutto
-
Usa i tuoi blocchi di legno per costruire un percorso da giardino simile a un labirinto per far navigare il tuo robot
Abbiamo scelto un percorso a forma di U come nella foto sopra
- Alla fine del tuo giardino aggiungi una roccia o una porta o un altro oggetto per far sapere al tuo robot che è fatto
-
Attacca il tuo foglio bianco con il cerchio sui muri del giardino
Abbiamo usato dei secchi per fissarlo perché le nostre pareti erano troppo corte per la telecamera
- Metti del nastro colorato/sottile striscia di carta colorata sul terreno davanti al frutto
Passaggio 4: scrittura del codice
Navigando nel giardino
Utilizzo dei sensori di impatto: per eseguire il programma, inseriamo la codifica in un'istruzione while che esegue il ciclo di varie istruzioni if fino a quando il codice non viene interrotto. Se uno dei respingenti viene colpito, il loro valore sarà uguale a vero (che in booleano è un valore di 1). Un'istruzione if viene utilizzata per violare il codice quando uno dei loro valori è uguale a 1.
Utilizzo dei sensori di dislivello: all'interno dell'istruzione while, utilizziamo un'istruzione if per comunicare a Roomba quando è arrivato nella posizione di un impianto. Roomba rileva il nastro colorato sul pavimento esaminando la soglia di rosso rilevata dai sensori di dislivello. Se il sensore di dislivello sinistro o destro rileva un colore con una soglia maggiore di quella del terreno, arresterà il robot per 2 secondi (utilizzando il comando di pausa). Durante questi 2 secondi, Roomba acquisirà e visualizzerà un'immagine del frutto. Usando il comando imfindcircles integrato, imposta un intervallo per i raggi dei tuoi cerchi e Roomba troverà il tuo cosiddetto frutto.
Utilizzo dell'elaborazione delle immagini: all'interno dell'istruzione if, incorporiamo un'altra istruzione if che dice: se il raggio rilevato, raggi3, è maggiore o uguale al nostro requisito minimo di un frutto maturo, r1 (lo decidi tu), quindi contare e visualizzare su il Roomba quanti frutti sono pronti e girare per continuare attraverso il giardino. In caso contrario, il turno di continuare attraverso il giardino. Nota: potrebbe essere necessario regolare l'angolo di rotazione perché ogni Roomba è diverso
Utilizzo dei paraurti luminosi: in un'altra istruzione if, i paraurti luminosi vengono analizzati per essere sicuri che nessuno di essi diventi più grande della nostra soglia determinata. Se il paraurti sinistro, destro, sinistro centrale, destro centrale, anteriore sinistro o anteriore destro supera la soglia, Roomba girerà leggermente con l'angolazione appropriata per evitare di sbattere contro un muro. Quindi, navigare nel labirinto.
Il resto del codice viene utilizzato per tracciare il percorso intrapreso da Roomba e quindi inviare i risultati alla tua email
Passaggio 5: copia il codice
% Scopo: In base alle loro dimensioni, il roomba attraverserà un giardino e distinguerà le verdure/frutta che sono pronte per essere raccolte. % Ingressi: sensori di luce, sensori di dislivello, sensori di impatto, immagine dalla telecamera % uscite: ogni volta che i sensori di luce sono superiori alla soglia, il roomba si girerà e scatterà un'immagine, emette un segnale acustico se il raggio di % verdura/frutta è compreso tra un intervallo specifico. Il codice si interrompe quando roomba si imbatte in % un oggetto, invia all'astronauta un'e-mail su quanti frutti sono pronti per essere % raccolti e una mappatura del movimento di roomba. % Utilizzo: istruzioni If e while, comandi di stampa, codice e-mail da MATLAB
k=0
tic
timerVal=tic
mentre vero
v=.2; % velocità r.setDriveVelocity(v, v);%roomba vai avanti L=r.getLightBumpers; LC=L.sinistraCentro; Rr=L.destra; Lf=L.sinistra; RC=L.rightCenter; LF=L.anteriore sinistro; RF=L.rightFront; Q= 75; % soglia. RTH=30; %Soglia rossa alta RTL=10; %Soglia rossa bassa B=r.getBumpers S=r.getCliffSensors; r1=24; r3=10; PL1=1800; se S.leftFront > PL1 || S.rightFront > PL1 %rileva se il colore a terra è al di sopra della soglia r.stop pause(2) elapsedTime=toc(timerVal-2) tic timerVal=tic % pausa per 2 secondi img = r.getImage; %take image imshow(img)%display image [centers3, radii3] = imfindcircles(img, [30 50], 'ObjectPolarity', 'dark', 'Sensitivity', 0.9); h = viscerchi(centri3, raggi3); %cerca cerchi di raggi w/in un intervallo specificato nell'immagine se raggi3>=r1 T=1 k=k+1 dist1=0.2.*elapsedTime %Se il raggio rilevato è maggiore o uguale al minimo %requisito di un frutto maturo, quindi Roomba conta questo frutto altrimenti se raggi3<=r3 T=0 altrimenti T=0 dist2=0.2.*Tempo trascorso %In caso contrario, non conta la fine del frutto
if T==1 r.setLEDDigits(num2str(k)) r.beep r.beep r.beep r.turnAngle(78) %Se è stato rilevato un frutto, visualizza il numero su Roomba, %fai un rumore e gira elseif T==2 r.turnAngle(78) %Se vengono rilevati 2 frutti, girare per continuare attraverso %garden else r.turnAngle(78) %Se non vengono rilevati frutti, girare per continuare attraverso %garden end if LC >Q r.stop r.turnAngle(-7) elseif RC >Q r.stop r.turnAngle(7) elseif LF >Q r.stop r.turnAngle(-7) elseif RF >Q r.stop r. turnAngle(7) elseif Lf > Q r.stop r.turnAngle(-7) elseif Rr >Q r.stop r.turnAngle(7) end %Se uno dei valori dei light bumper supera la soglia, %il Roomba girerà leggermente nella direzione appropriata per evitare % di sbattere contro un muro
se B.destra ==1 || B.sinistra==1 || B.front==1 dist3=0.2.*elapsedTime r.stop r.beep('F#*2, F#*2, c, F#*2, F#*2') r.turnAngle(360) %Se uno dei vengono colpiti i bumbers, quindi il roomba riproduce il suono, gira su se stesso, %e rompe il codice
fine pausa
end scatter(0.533, 0, '^') mantieni scatter(0.533, dist1, '<') mantieni scatter(-dist2, dist1, 'v') mantieni scatter(-dist2, 0, 'd') saveas (gcf, 'Movimento.png')
kmsg=num2str(k) mail= '[email protected]' password='Srsora123#' host='smtp.gmail.com' port='465'
setpref('Internet', 'E_mail', posta); setpref('Internet', 'SMTP_Server', host) props = java.lang. System.getProperties; props.setProperty('mail.smtp.user', mail); props.setProperty('mail.smtp.host', host); props.setProperty('mail.smtp.port', port); props.setProperty('mail.smtp.starttls.enable', 'true'); props.setProperty('mail.smtp.debug', 'true'); props.setProperty('mail.smtp.auth', 'true'); props.setProperty('mail.smtp.socketFactory.port', port); props.setProperty('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty('mail.smtp.socketFactory.fallback', 'false'); sendmail(mail, 'Ciao astronauta! Ci sono così tanti frutti nel giardino', kmsg, {'movement.png'})
Consigliato:
I lupi mannari di Miller's Hollow (狼人殺) Circuit Helper: 4 passaggi
The Werewolves of Miller's Hollow (狼人殺) Circuit Helper: questo progetto è fatto per le persone a cui piace giocare a The Werewolves of Miller's Hollow, e questa scatola è usata per giocare con 8 persone, con tre lupi mannari, due abitanti del villaggio e tre ruoli speciali (Veggente, Strega e Cacciatore). Questa scatola è fatta per sostituire il
Breadboard Wire Helper: 10 passaggi (con immagini)
Breadboard Wire Helper: queste istruzioni mostrano come costruire uno strumento per aiutare a rendere la prototipazione breadboard più semplice e ordinata. Lo chiamo Breadboard Wire Helper
Trash Built BT Line Drawing Bot - My Bot: 13 passaggi (con immagini)
Trash Built BT Line Drawing Bot - My Bot: Ciao amici dopo un lungo intervallo di circa 6 mesi eccomi qui con un nuovo progetto. Fino al completamento di Cute Drawing Buddy V1, SCARA Robot - Arduino prevedo un altro robot di disegno, l'obiettivo principale è quello di coprire un ampio spazio per il disegno. Quindi bracci robotici fissi c
Roomba Bot the Bulider: 5 passaggi (con immagini)
Roomba Bot the Bulider: Bot the Builder è un roomba, che con "grabber" attaccato alla parte anteriore sarà in grado di spostare gli oggetti. Il codice con esso è impostato per registrare il primo movimento con una finestra GUI che puoi controllare con un semplice clic del mouse. dopo
Garage Parking Helper con Arduino: 5 passaggi (con immagini)
Garage Parking Helper con Arduino: la sfidaQuando parcheggio nel mio garage lo spazio è molto limitato. Veramente. La mia auto (un monovolume familiare) è circa 10 cm più corta dello spazio disponibile. Ho i sensori di parcheggio nella mia macchina ma sono molto limitati: sotto i 20 cm mostrano l'allarme rosso quindi è