Sommario:

Roomba controllato da MATLAB: 5 passaggi
Roomba controllato da MATLAB: 5 passaggi

Video: Roomba controllato da MATLAB: 5 passaggi

Video: Roomba controllato da MATLAB: 5 passaggi
Video: Videocorso su ROS - Introduzione 2024, Novembre
Anonim
Roomba controllato MATLAB
Roomba controllato MATLAB
Roomba controllato MATLAB
Roomba controllato MATLAB

L'obiettivo di questo progetto è utilizzare MATLAB e un robot programmabile iRobot modificato. Il nostro gruppo ha unito le nostre capacità di codifica per creare uno script MATLAB che utilizza molte funzioni di iRobot, inclusi i sensori di dislivello, i sensori di paraurti, i sensori di luce e la fotocamera. Abbiamo utilizzato queste letture del sensore e della fotocamera come input, consentendoci di creare determinati output che desideriamo utilizzando le funzioni e i loop del codice MATLAB. Usiamo anche il dispositivo mobile MATLAB e il giroscopio come un modo per connetterci all'iRobot e controllarlo.

Passaggio 1: parti e materiali

Parti e materiali
Parti e materiali
Parti e materiali
Parti e materiali
Parti e materiali
Parti e materiali
Parti e materiali
Parti e materiali

MATLAB 2018a

-La versione 2018 di MATLAB è la versione più preferita, soprattutto perché funziona al meglio con il codice che si connette al dispositivo mobile. Tuttavia, la maggior parte del nostro codice può essere interpretata nella maggior parte delle versioni di MATLAB.

iRobot Crea dispositivo

-Questo dispositivo è un dispositivo speciale il cui unico scopo è la programmazione e la codifica. (Non è un vero e proprio vuoto)

Raspberry Pi (con fotocamera)

- Questa è una scheda per computer non costosa che funziona come il cervello di iRobot. Può essere piccolo, ma è capace di molte cose. La fotocamera è un'aggiunta aggiuntiva. Utilizza anche il Raspberry Pi per ottenere tutte le sue funzioni e comandi. La fotocamera nella foto sopra è montata su un supporto stampato in 3D, creato dai dipartimenti di Engineering Fundamentals dell'Università del Tennessee

Passaggio 2: file di database Roomba

File di database Roomba
File di database Roomba

C'è un file principale di cui avrai bisogno per utilizzare le funzioni e i comandi corretti per il tuo roomba. Questo file è il punto in cui il codice scritto trae le funzioni per rendere più gestibile il funzionamento di roomba.

Puoi scaricare il file a questo link o il file scaricabile qui sotto

ef.engr.utk.edu/ef230-2017-08/projects/roomba-s/setup-roomba-instructable.php

Passaggio 3: connessione a Roomba

Innanzitutto, devi assicurarti che il tuo robot sia collegato alla scheda Raspberry Pi utilizzando una presa micro USB. Quindi devi connettere correttamente il tuo computer e robot allo stesso WiFi. Una volta fatto questo, puoi accendere il tuo robot e connetterti ad esso usando il comando dato nel file del database del robot. (Reimposta sempre il tuo robot prima e dopo averlo usato). Ad esempio, utilizziamo il comando "r.roomba(19)" per connetterci al nostro robot, assegnando la variabile r al nostro dispositivo. Questo si riferisce al file del database, che imposta la nostra variabile come una struttura a cui possiamo fare riferimento in un dato momento.

Passaggio 4: il codice

Il codice
Il codice
Il codice
Il codice

Abbiamo allegato il codice completo di seguito, ma ecco una breve panoramica che evidenzia gli elementi importanti nel nostro script. Abbiamo utilizzato tutti i sensori, nonché la telecamera per massimizzare al massimo il potenziale del nostro robot. Abbiamo anche incluso un codice che ci ha permesso di connettere un dispositivo mobile al nostro robot e utilizzare il suo crioscopio per controllarlo manualmente.

Abbiamo iniziato con il semplice comando "r.setDriveVelocity(.06)" che imposta la velocità di avanzamento del robot a 0,06 m/s. Questo è solo per far muovere il robot in anticipo

Quindi, il nostro script principale viene avviato con un ciclo while che recupera i dati del dato robot creando strutture a cui possiamo fare riferimento e utilizzare nelle istruzioni condizionali di seguito, consentendoci così di dire al robot di eseguire un determinato comando in base ai dati della struttura il robot legge con i suoi sensori. Lo abbiamo impostato in modo che il robot legga i suoi sensori di dislivello e segua un percorso nero

while true % Il ciclo while continua finché non si verifica qualcosa di "falso" (in questo caso continua all'infinito) data = r.getCliffSensors; data2 = r.getBumpers;% recupera continuamente i dati sui valori del sensore di dislivello e li assegna a una variabile % img = r.getImage; % Scatta una foto dalla fotocamera montata % image(img); % Mostra l'immagine che è stata scattata % red_mean = mean(mean(img(:,:, 1)));% Prende il valore medio per il colore verde se data.rightFront < 2000 r.turnAngle(-2); % ruota il Roomba di circa 0,2 gradi in senso orario una volta che il valore per i sensori di dislivello anteriore destro scende al di sotto di 2000 r.setDriveVelocity(.05); elseif data.leftFront data.leftFront && 2000 > data.rightFront r.moveDistance(.1); % indica a Roomba di andare avanti a circa 0,2 m/s se entrambi i valori dei sensori anteriore destro e sinistro scendono al di sotto del 2000 % r.turnAngle(0); % dice a Roomba di non girare se le condizioni sopra menzionate sono vere

elseif data2.right == 1 r.moveDistance(-.12); r.angolo di svolta(160); r.setDriveVelocity(.05); elseif data2.left == 1 r.moveDistance(-.2); r.angolo di rotazione(5); r.setDriveVelocity(.05); elseif data2.front == 1 r.moveDistance(-.12); r.angolo di svolta(160); r.setDriveVelocity(.05);

Dopo questo ciclo while, entriamo in un altro ciclo while che attiva i dati ottenuti tramite la fotocamera. E usiamo un'istruzione if all'interno di questo ciclo while che riconosce un'immagine utilizzando un programma specifico (alexnet) e una volta identificata l'immagine attiva immediatamente il controllo remoto del dispositivo mobile

anet = alexnet; % Assegna alexnet deep learning a una variabilewhile true % Infinite while loop img = r.getImage; img = imresize(img, [227, 227]); label = classify(anet, img); if label == "tovagliolo di carta" || label == "frigorifero" label = "acqua"; fine immagine (img); titolo(carattere(etichetta)); disegnato;

Il ciclo while che ci consente di controllare il dispositivo con il nostro telefono recupera quei dati dal giroscopio del telefono e li inseriamo in una matrice che invia continuamente i dati a MATLAB sul computer. Usiamo un'istruzione if che legge i dati della matrice e fornisce un output che sposta il dispositivo in base a determinati valori del giroscopio del telefono. È importante sapere che abbiamo utilizzato i sensori di orientamento del dispositivo mobile. La matrice uno per tre sopra menzionata è classificata in base a ciascun elemento dei sensori di orientamento del telefono, che è azimut, passo e lato. Le istruzioni if hanno creato condizioni che dichiaravano quando il lato supera i valori 50 o scende al di sotto di -50, quindi il robot si sposta di una certa distanza in avanti (50 positivo) o indietro (50 negativo). E lo stesso vale per il valore del passo. Se il valore del passo supera il valore di 25 o scende al di sotto di -25, il robot ruota con un angolo di 1 grado (25 positivo) o negativo di 1 grado (25 negativo)

while true pause(.1) % Pausa di 0,5 secondi prima che venga preso ogni valore Controller=iphone. Orientation; % Assegna la matrice per i valori dell'orientamento dell'iPhone ad una variabile Azimuthal=Controller(1); % Assegna il primo valore della matrice ad una variabile Pitch=Controller(2); % Assegna il secondo valore della matrice a una variabile (inclina in avanti e indietro quando iPhone viene tenuto di lato) Side=Controller(3); % Assegna il terzo valore della matrice a una variabile (inclina a sinistra ea destra quando l'iPhone è tenuto di lato) % Provoca un output basato sull'orientamento del telefono se Side > 130 || Side 25 r.moveDistance(-.1) % Sposta Roomba all'indietro di circa 0,1 metri se l'iPhone è inclinato all'indietro di almeno 25 gradi altrimenti se Side 25 r.turnAngle(-1) % Ruota Roomba di circa 1 grado in senso antiorario se l'iPhone è inclinato a sinistra di almeno 25 gradi altrimenti se Pitch < -25 r.turnAngle(1) % Ruota Roomba di circa 1 grado in senso orario se l'iPhone è inclinato di almeno 25 gradi end

Questi sono solo i punti salienti delle parti principali del nostro codice, che abbiamo incluso se hai bisogno di copiare e incollare rapidamente una sezione a tuo vantaggio. Tuttavia, il nostro intero codice è allegato di seguito, se necessario

Passaggio 5: conclusione

Questo codice che abbiamo scritto è progettato specificamente per il nostro robot e per la nostra visione complessiva del progetto. Il nostro obiettivo era utilizzare tutte le nostre abilità di codifica MATLAB per creare uno script ben progettato che utilizzasse la maggior parte delle funzionalità del robot. L'utilizzo del controller del telefono non è così difficile come potresti pensare e speriamo che il nostro codice possa aiutarti a comprendere meglio il concetto alla base della codifica di un iRobot.

Consigliato: