Sommario:
- Passaggio 1: inizializzazione e sensori
- Passaggio 2: ottenere dati
- Passaggio 3: completare la missione
- Passaggio 4: conclusione
Video: Roomba Explorer: 4 passaggi
2025 Autore: John Day | day@howwhatproduce.com. Ultima modifica: 2025-01-13 06:57
Utilizzando MATLAB e il robot Create2 di iRobot, questo progetto esplorerà diverse aree di un luogo sconosciuto. Abbiamo impiegato i sensori sul Robot per aiutare a manovrare un terreno pericoloso. Ottenendo fotografie e feed video da un Raspberry Pi allegato, siamo stati in grado di determinare gli ostacoli che il Robot dovrà affrontare e saranno classificati.
Parti e materiali
Per questo progetto, avrai bisogno di
-un computer
-versione più recente di MATLAB (per questo progetto è stato utilizzato MATLAB R2018b)
- roombaInstall toolbox
-Robot Create2 di iRobot
-Raspberry Pi con fotocamera
Passaggio 1: inizializzazione e sensori
Prima di iniziare qualsiasi programmazione, abbiamo scaricato il toolbox roombaInstall, che ha consentito l'accesso a diversi componenti del Robot.
Inizialmente, abbiamo creato una GUI per inizializzare qualsiasi Robot. Per fare ciò, è necessario digitare il numero del Robot come input. Ciò consentirà l'accesso per eseguire il nostro programma al robot Abbiamo lavorato per far sì che il robot si manovrasse attraverso i molti terreni che avrebbe incontrato. Abbiamo implementato i sensori di dislivello, i sensori di urto luminoso e i sensori di urto fisico, utilizzando le loro uscite per far scattare il robot per cambiarne la velocità e/o la direzione. Quando uno dei sei sensori di luce d'urto rileva un oggetto, il valore emesso diminuirà, causando una diminuzione della velocità del robot per evitare una collisione a piena velocità. Quando finalmente il Robot urta un ostacolo, i sensori Physical Bump riporteranno un valore maggiore di zero; per questo motivo il Robot si fermerà, quindi non ci saranno ulteriori collisioni e più funzioni potranno essere messe in atto. Per i sensori di dislivello, leggeranno la luminosità dell'area circostante. Se il valore è maggiore di 2800, abbiamo determinato che il Robot sarebbe su un terreno stabile e sicuro. Ma, se il valore è inferiore a 800, i sensori di dislivello rileveranno una scogliera, fermandosi immediatamente per non cadere. Qualsiasi valore intermedio è stato determinato per rappresentare l'acqua e farà sì che il Robot interrompa la sua azione. Utilizzando i sensori di cui sopra, la velocità del Robot viene modificata permettendoci di determinare meglio se c'è qualche pericolo.
Di seguito è riportato il codice (da MATLAB R2018b)
%% Inizializzazione
dlgPrompts = {'Numero Roomba'};
dlgTitle = 'Seleziona il tuo Roomba';
dlgDefaults = {''};
opts. Resize = 'on';
dlgout = inputdlg(dlgPrompts, dlgTitle, 1, dlgDefaults, opts) % Crea finestra che richiede all'utente di inserire il proprio numero roomba
n=str2double(dlgout{1});
r=roomba(n); % Inizializza Roomba specificato dall'utente %% Determinazione della velocità dai sensori di urto luminoso mentre true s=r.getLightBumpers; % ottieni sensori di urto luminoso
lbumpout_1=extractfield(s, 'sinistra'); % prende i valori numerici dei sensori e li rende più utilizzabili lbumpout_2=extractfield(s, 'leftFront');
lbumpout_3=extractfield(s, 'leftCenter');
lbumpout_4=extractfield(s, 'rightCenter');
lbumpout_5=extractfield(s, 'rightFront');
lbumpout_6=extractfield(s, 'right');
lbout=[lbumpout_1, lbumpout_2, lbumpout_3, lbumpout_4, lbumpout_5, lbumpout_6] % converte i valori in matrice
sLbump=sort(lbout); %sorts matrice al valore più basso può essere estratta
lowLbump=sLbump(1); speed=.05+(lowLbump)*.005 %usando il valore più basso, che rappresenta gli ostacoli vicini, per determinare la velocità, velocità più alta quando non viene rilevato nulla
r.setDriveVelocity(velocità, velocità)
fine
% paraurti fisici
b=r.getBumpers; %Uscita vero, falso
bsen_1=extractfield(b, 'sinistra')
bsen_2=extractfield(b, 'right')
bsen_3=extractfield(b, 'fronte')
bsen_4=extractfield(b, 'leftWheelDrop')
bsen_5=extractfield(b, 'rightWheelDrop')
urti=[bsen_1, bsen_2, bsen_3, bsen_4, bsen_5] tbump=sum(bums)
se tbump>0 r.setDriveVelocity(0, 0)
fine
% Sensori di dislivello
c=r.getCliffSensors %% 2800 sicuro, altrimenti acqua
csen_1=extractfield(c, 'sinistra')
csen_2=extractfield(c, 'right')
csen_3=extractfield(c, 'leftFront')
csen_4=extractfield(c, 'rightFront')
scogliere=[csen_1, csen_2, csen_3, csen_4]
ordcliff=sort(scogliere)
se ordcliff(1) < 2750
r.setDriveVelocity(0, 0)
se scogliera<800
disp 'scogliera'
altro
versare 'acqua'
fine
r. Angolo di svolta(45)
fine
Passaggio 2: ottenere dati
Dopo l'attivazione dei sensori di impatto fisico, il Robot implementerà il Raspberry Pi a bordo per scattare una fotografia dell'ostacolo. Dopo aver scattato una fotografia, utilizzando il riconoscimento del testo se c'è del testo nell'immagine, il Robot determinerà qual è l'ostacolo e cosa dice l'ostacolo.
img = r.getImage; imshow(img);
imwrite(img, 'imgfromcamera.jpg')
foto = imread('imgfromcamera.jpg')
ocrResults = ocr(foto)
riconosciutoText = ocrResults. Text;
figura;
imshow(photo) text(220, 0, sharedText, 'BackgroundColor', [1 1 1]);
Passaggio 3: completare la missione
Quando il Robot determina che l'ostacolo è CASA, completerà la sua missione e resterà a casa. Dopo il completamento della missione, il Robot invierà un'e-mail di avviso che è tornato a casa e invierà le immagini che ha scattato durante il suo viaggio.
% Invio di posta elettronica
setpref('Internet', 'Server_SMTP', 'smtp.gmail.com');
setpref('Internet', 'E_mail', 'tylerreynoldsroomba@gmail.com'); % account di posta da inviare da setpref('Internet', 'SMTP_Username', 'inserisci l'email del mittente'); % username del mittente setpref('Internet', 'SMTP_Password', 'inserire la password del mittente'); % password mittente
props = java.lang. System.getProperties; props.setProperty('mail.smtp.auth', 'true'); props.setProperty('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty('mail.smtp.socketFactory.port', '465');
sendmail('Inserisci l'email di ricezione', 'Roomba', 'Roomba è tornato a casa!!', 'imgfromcamera.jpg') % account di posta a cui inviare
Il Robot è quindi finito.
Passaggio 4: conclusione
Il programma MATLAB incluso è separato dall'intero script utilizzato con il Robot. Nella bozza finale, assicurati di inserire tutto il codice, ad eccezione della fase di inizializzazione, in un ciclo while per assicurarti che i bumper siano costantemente in esecuzione. Questo programma può essere modificato in base alle esigenze dell'utente. Viene mostrata la configurazione del nostro Robot.
*Promemoria: non dimenticare che il toolbox roombaInstall è necessario affinché MATLAB interagisca con il Robot e il Raspberry Pi integrato.