Cuprins:

Roomba controlată MATLAB: 5 pași
Roomba controlată MATLAB: 5 pași

Video: Roomba controlată MATLAB: 5 pași

Video: Roomba controlată MATLAB: 5 pași
Video: Active Cleaning Head iRobot Roomba 600 700 Series 2024, Iulie
Anonim
Roomba controlată MATLAB
Roomba controlată MATLAB
Roomba controlată MATLAB
Roomba controlată MATLAB

Scopul acestui proiect este de a utiliza MATLAB, precum și un robot programabil iRobot modificat. Grupul nostru a combinat abilitățile noastre de codificare pentru a crea un script MATLAB care utilizează multe funcții ale iRobot, inclusiv senzori de stâncă, senzori de protecție, senzori de lumină și cameră. Am folosit aceste senzori și citirile camerei ca intrări, permițându-ne să creăm anumite ieșiri pe care le dorim folosind funcțiile și buclele codului MATLAB. De asemenea, folosim dispozitivul mobil MATLAB și giroscopul ca modalitate de conectare la iRobot și control al acestuia.

Pasul 1: Piese și materiale

Piese și materiale
Piese și materiale
Piese și materiale
Piese și materiale
Piese și materiale
Piese și materiale
Piese și materiale
Piese și materiale

MATLAB 2018a

-Versiunea 2018 a MATLAB este cea mai preferată versiune, mai ales pentru că funcționează cel mai bine cu codul care se conectează la dispozitivul mobil. Cu toate acestea, majoritatea codului nostru poate fi interpretat în majoritatea versiunilor MATLAB.

iRobot Creați dispozitiv

-Acest dispozitiv este un dispozitiv special realizat, care are ca unic scop programarea și codificarea. (Nu este un vid real)

Raspberry Pi (cu camera foto)

- Aceasta este o placă de computer care nu este costisitoare și funcționează ca creierul iRobot. Poate fi mic, dar este capabil de multe lucruri. Camera este un supliment suplimentar. De asemenea, folosește raspberry pi pentru a obține toate funcțiile și comenzile sale. Camera foto din imaginea de mai sus este montată pe un suport tipărit 3D, creat de departamentele Inginerie Fundamentale de la Universitatea din Tennessee

Pasul 2: Fișierul de baze de date Roomba

Fișier de baze de date Roomba
Fișier de baze de date Roomba

Există un fișier principal de care veți avea nevoie pentru a utiliza funcțiile și comenzile adecvate pentru camera dvs. Acest fișier este locul în care ați scris codul din care trage funcții pentru a vă face mai ușor de operat camera dvs..

Puteți descărca fișierul de la acest link sau fișierul descărcabil de mai jos

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

Pasul 3: Conectarea la Roomba

Mai întâi, trebuie să vă asigurați că robotul dvs. este conectat la placa dvs. raspberry pi utilizând o mufă micro USB. Apoi, trebuie să vă conectați computerul și robotul la același WiFi. După ce ați făcut acest lucru, vă puteți porni robotul și vă puteți conecta la acesta folosind comanda dată în fișierul bazei de date a robotului. (Resetați întotdeauna robotul înainte și după ce îl utilizați). De exemplu, folosim comanda „r.roomba (19)” pentru a ne conecta la robotul nostru, atribuind variabila r dispozitivului nostru. Aceasta se referă înapoi la fișierul bazei de date, care configurează variabila noastră ca o structură pe care o putem referi în orice moment dat.

Pasul 4: Codul

Codul
Codul
Codul
Codul

Am atașat codul complet mai jos, dar iată o scurtă prezentare generală care evidențiază elementele importante din scriptul nostru. Am folosit toți senzorii, precum și camera pentru a maximiza pe deplin potențialul robotului nostru. De asemenea, am inclus un cod care ne-a permis să conectăm un dispozitiv mobil la robotul nostru și să folosim grioscopul acestuia pentru a-l controla manual.

Am început cu comanda simplă „r.setDriveVelocity (.06)” care setează viteza de avans a robotului la.06 m / s. Aceasta este doar pentru a pune robotul în mișcare în prealabil

Apoi, scriptul nostru principal este pornit cu o buclă while care preia datele robotului dat prin crearea de structuri pe care le putem referi și utiliza în instrucțiunile condiționale de mai jos, permițându-ne astfel să spunem robotului să execute o anumită comandă bazată pe datele structurii. robotul citește cu senzorii săi. L-am configurat astfel încât robotul să își citească senzorii de stâncă și să urmeze o cale neagră

în timp ce adevărat% while bucla merge până când apare ceva „fals” (în acest caz merge infinit) data = r.getCliffSensors; data2 = r.getBumpers;% recuperează continuu date despre valorile senzorului de stâncă și le atribuie unei variabile% img = r.getImage; % Face o fotografie din camera montată% image (img); % Afișează imaginea realizată% red_mean = mean (mean (img (:,:, 1)));% Prinde valoarea medie pentru culoarea verde dacă data.rightFront <2000 r.turnAngle (-2); % întoarce Roomba aproximativ.2 grade CW odată ce valoarea pentru senzorii din stânca din față din dreapta scade sub 2000 r.setDriveVelocity (.05); elseif data.leftFront data.leftFront && 2000> data.rightFront r.moveDistance (.1); % îi spune Roomba să meargă înainte cu aproximativ.2 m / s dacă ambele valori de la senzorii din față dreapta și din stânga scad sub 2000% r.turnAngle (0); % îi spune Roomba să nu se întoarcă dacă condițiile menționate mai sus sunt adevărate

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

După această buclă while, introducem o altă buclă while care declanșează datele obținute prin intermediul camerei. Și folosim o declarație if în interiorul acestei bucle while care recunoaște o imagine folosind un anumit program (alexnet) și, odată ce identifică imaginea, declanșează imediat telecomanda dispozitivului mobil

anet = alexnet; % Atribuie alexnet deep learning unei variabile în timp ce este adevărat% Infinite while loop img = r.getImage; img = imresize (img, [227, 227]); eticheta = clasifica (anet, img); dacă eticheta == "prosop de hârtie" || eticheta == "frigider" eticheta = "apa"; imagine finală (img); titlu (char (etichetă)); drawow;

Bucla while care ne permite să controlăm dispozitivul cu telefonul nostru preia acele date din giroscopul telefonului și le conectăm la o matrice care transmite continuu datele înapoi în MATLAB de pe computer. Folosim o declarație if care citește datele matricei și oferă o ieșire care mută dispozitivul pe baza anumitor valori ale giroscopului telefonului. Este important să știm că am folosit senzorii de orientare ai dispozitivului mobil. Matricea una câte trei menționată mai sus este clasificată în funcție de fiecare element al senzorilor de orientare ai telefonului, care este azimut, înălțime și lateral. Instrucțiunile if au creat condiții care au fost declarate atunci când partea depășește valorile 50 sau coboară sub -50, atunci robotul se deplasează o anumită distanță înainte (pozitiv 50) sau înapoi (negativ 50). Și același lucru este valabil și pentru valoarea pitch. Dacă valoarea pitch-ului depășește valoarea de 25 de scade sub -25, robotul se rotește la un unghi de 1 grade (pozitiv 25) sau negativ 1 grade (negativ 25)

în timp ce pauză adevărată (.1)% Pauză de.5 secunde înainte ca fiecare valoare să fie luată Controler = iphone. Orientation; % Atribuie matricea pentru valorile orientării iPhone-ului unei variabile Azimuthal = Controller (1); % Atribuie prima valoare a matricei unei variabile Pitch = Controller (2); % Atribuie a doua valoare a matricei unei variabile (înclinați înainte și înapoi când iPhone-ul este ținut lateral) Side = Controller (3); % Atribuie a treia valoare a matricei unei variabile (înclinați la stânga și la dreapta când iPhone-ul este ținut lateral)% Provoacă o ieșire bazată pe orientarea telefonului dacă Side> 130 || Partea 25 r.moveDistance (-. 1)% Mută Roomba înapoi aproximativ.1 metri dacă iPhone-ul este înclinat înapoi cel puțin 25 de grade altfel dacă partea 25 r.turnAngle (-1)% Întoarce Roomba aproximativ 1 grad CCW dacă iPhone-ul este înclinat la stânga cu cel puțin 25 de grade altfel dacă Pitch <-25 r.turnAngle (1)% Întoarce Roomba aproximativ 1 grad CW dacă iPhone-ul este înclinat cel puțin 25 de grade

Acestea sunt doar elementele esențiale ale pieselor majore ale codului nostru, pe care le-am inclus dacă trebuie să copiați și să inserați rapid o secțiune în beneficiul dvs. Cu toate acestea, întregul nostru cod este atașat mai jos, dacă este necesar

Pasul 5: Concluzie

Acest cod pe care l-am scris este conceput special pentru robotul nostru, precum și pentru viziunea noastră generală asupra proiectului. Scopul nostru a fost să folosim toate abilitățile noastre de codificare MATLAB pentru a crea un script de proiectare care să utilizeze majoritatea caracteristicilor robotului. Utilizarea controlerului telefonului nu este atât de dificilă pe cât credeți și sperăm că codul nostru vă poate ajuta să înțelegeți mai bine conceptul din spatele codării unui iRobot.

Recomandat: