Sommario:

Roomba Explorer: 4 passaggi
Roomba Explorer: 4 passaggi

Video: Roomba Explorer: 4 passaggi

Video: Roomba Explorer: 4 passaggi
Video: Робот-пылесос: как правильно пользоваться 2024, Novembre
Anonim
Roomba Explorer
Roomba Explorer

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

Inizializzazione e sensori
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', '[email protected]'); % 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

Conclusione
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.

Consigliato: