Taula de continguts:

Roomba controlat MATLAB: 5 passos
Roomba controlat MATLAB: 5 passos

Vídeo: Roomba controlat MATLAB: 5 passos

Vídeo: Roomba controlat MATLAB: 5 passos
Vídeo: Roomba dev 0.0b F1 2024, Desembre
Anonim
Roomba controlat per MATLAB
Roomba controlat per MATLAB
Roomba controlat per MATLAB
Roomba controlat per MATLAB

L'objectiu d'aquest projecte és utilitzar MATLAB i un robot programable iRobot modificat. El nostre grup va combinar les nostres habilitats de codificació per crear un script MATLAB que utilitza moltes funcions de l’iRobot, inclosos els sensors de penya-segats, els sensors de para-xocs, els sensors de llum i la càmera. Hem fet servir aquestes lectures de sensors i càmeres com a entrades, cosa que ens permet crear determinades sortides que volem mitjançant funcions i bucles de codi MATLAB. També fem servir el dispositiu mòbil MATLAB i el giroscopi per connectar-nos a l’iRobot i controlar-lo.

Pas 1: peces i materials

Peces i materials
Peces i materials
Peces i materials
Peces i materials
Peces i materials
Peces i materials
Peces i materials
Peces i materials

MATLAB 2018a

-La versió 2018 de MATLAB és la versió més preferida, sobretot perquè funciona millor amb el codi que es connecta al dispositiu mòbil. Tanmateix, la majoria del nostre codi es pot interpretar en la majoria de versions de MATLAB.

iRobot Crea un dispositiu

-Aquest dispositiu és un dispositiu de fabricació especial que té com a únic propòsit programar i codificar. (No és un buit real)

Raspberry Pi (amb càmera)

- Es tracta d’una placa d’ordinador no costosa que funciona com a cervell de l’iRobot. Pot ser petit, però és capaç de moltes coses. La càmera és un complement addicional. També utilitza el raspberry pi per obtenir totes les seves funcions i ordres. La càmera que es mostra a la part superior està muntada en un suport imprès en 3D, creat pels departaments d’Enginyeria Fonaments de la Universitat de Tennessee

Pas 2: fitxer de base de dades Roomba

Fitxer de base de dades Roomba
Fitxer de base de dades Roomba

Hi ha un fitxer principal que necessitareu per utilitzar les funcions i les ordres adequades per al vostre roomba. Aquest fitxer és el lloc on escriviu el codi que extreu funcions per tal de fer més manejable el funcionament del vostre roomba.

Podeu descarregar el fitxer en aquest enllaç o el fitxer descarregable següent

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

Pas 3: Connectar-se a Roomba

En primer lloc, heu d’assegurar-vos que el robot està connectat a la vostra placa raspberry pi mitjançant un endoll micro USB. A continuació, heu de connectar correctament l’ordinador i el robot al mateix WiFi. Un cop fet això, podeu encendre el robot i connectar-vos-hi mitjançant l'ordre indicada al fitxer de base de dades del robot. (Restableix sempre el robot abans i després d'utilitzar-lo). Per exemple, fem servir l'ordre "r.roomba (19)" per connectar-nos al nostre robot, assignant la variable r al nostre dispositiu. Això fa referència al fitxer de base de dades, que configura la nostra variable com una estructura a la qual podem fer referència en qualsevol moment.

Pas 4: el codi

El codi
El codi
El codi
El codi

A continuació us adjuntem el codi complet, però aquí teniu una breu visió general que ressalta els elements importants del nostre guió. Hem utilitzat tots els sensors i la càmera per maximitzar al màxim el potencial del nostre robot. També hem inclòs un codi que ens permetia connectar un dispositiu mòbil al nostre robot i utilitzar el seu grioscopi per controlar-lo manualment.

Vam començar amb l'ordre simple "r.setDriveVelocity (.06)" que estableix la velocitat d'avanç del robot a.06 m / s. Això és només perquè el robot es mogui prèviament

A continuació, el nostre script principal s’inicia amb un bucle while que recupera les dades del robot donat creant estructures que podem fer referència i utilitzar en les sentències condicionals que es mostren a continuació, cosa que ens permet dir al robot que executi una determinada ordre basada en les dades de l’estructura. el robot llegeix amb els seus sensors. Ho configurem perquè el robot llegeixi els seus sensors de penya-segat i segueixi un camí negre

mentre true% while loop va fins que es produeix alguna cosa "falsa" (en aquest cas continua infinitament) data = r.getCliffSensors; data2 = r.getBumpers;% recupera dades contínuament sobre els valors del sensor de penya-segat i els assigna a una variable% img = r.getImage; % Pren una imatge de la càmera muntada% image (img); % Mostra la imatge que s'ha pres% red_mean = mean (mean (img (:,:, 1)));% Pren el valor mitjà del color verd si data.rightFront <2000 r.turnAngle (-2); % gira el Roomba aproximadament.2 graus CW un cop el valor dels sensors de penya-segat davanters caigui per sota de 2000 r.setDriveVelocity (.05); elseif data.leftFront data.leftFront && 2000> data.rightFront r.moveDistance (.1); % indica a Roomba que continuï avançant aproximadament a 2,2 m / s si els dos valors dels sensors frontal dret i esquerre es situen per sota del 2000% r.turnAngle (0); % diu a Roomba que no giri si les condicions esmentades anteriorment són certes

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);

Després d’aquest bucle while, introduïm un altre loop while que activa les dades obtingudes a través de la càmera. I fem servir una sentència if dins d’aquest bucle while que reconeix una imatge mitjançant un programa específic (alexnet) i, un cop identificada la imatge, activa immediatament el control remot del dispositiu mòbil

anet = alexnet; % Assigna l'aprenentatge profund alexnet a una variable mentre sigui veritable% Infinite while loop img = r.getImage; img = imresize (img, [227, 227]); etiqueta = classificar (anet, img); si etiqueta == "tovallola de paper" || label == "nevera" label = "aigua"; imatge final (img); títol (caràcter (etiqueta)); dibuix;

El bucle while que ens permet controlar el dispositiu amb el nostre telèfon recupera aquestes dades del giroscopi del telèfon i les connectem a una matriu que contínuament transmet dades a MATLAB a l’ordinador. Utilitzem una sentència if que llegeix les dades de la matriu i dóna una sortida que mou el dispositiu segons certs valors del giroscopi del telèfon. És important saber que hem utilitzat els sensors d’orientació del dispositiu mòbil. La matriu d’un en tres esmentada anteriorment es classifica per cada element dels sensors d’orientació del telèfon, que és l’azimut, el to i el lateral. Les sentències if van crear condicions que s’indicaven quan el costat supera els valors 50 o cau per sota de -50, el robot avança una certa distància cap endavant (positiu 50) o cap enrere (negatiu 50). I el mateix passa amb el valor del to. Si el valor del to supera el valor de 25 de caigudes per sota de -25, el robot gira amb un angle d'1 grau (25 positiu) o negatiu 1 grau (25 negatiu)

mentre que true pausa (.1)% Pausa de.5 segons abans de prendre cada valor Controlador = iphone. Orientation; % Assigna la matriu dels valors de l'orientació de l'iPhone a una variable Azimuthal = Controller (1); % Assigna el primer valor de la matriu a una variable Pitch = Controller (2); % Assigna el segon valor de la matriu a una variable (inclinació cap endavant i cap enrere quan l'iPhone es manté cap als costats) Side = Controller (3); % Assigna el tercer valor de la matriu a una variable (inclinació cap a l'esquerra i cap a la dreta quan l'iPhone es manté lateral)% Provoca una sortida basada en l'orientació del telèfon si Side> 130 || Side 25 r.moveDistance (-. 1)% Mou el Roomba cap enrere aproximadament.1 metres si l’iPhone s’inclina cap enrere com a mínim 25 degrés enrere si el costat 25 r.turnAngle (-1)% Gira el Roomba aproximadament 1 grau CCW si l’iPhone s'inclina a l'esquerra com a mínim 25 graus més si es fa un pas <-25 r.turnAngle (1)% Gira el Roomba aproximadament 1 grau CW si l'iPhone està inclinat almenys 25 graus final

Aquests són només els aspectes més destacats de les principals parts del nostre codi, que hem inclòs si necessiteu copiar i enganxar ràpidament una secció per al vostre benefici. Tot i així, tot el nostre codi s’adjunta a continuació, si cal

Pas 5: Conclusió

Aquest codi que vam escriure està dissenyat específicament per al nostre robot, així com per a la nostra visió general del projecte. El nostre objectiu era utilitzar totes les nostres habilitats de codificació MATLAB per tal d’elaborar un guió de disseny bé que utilitzi la majoria de les funcions del robot. L’ús del controlador del telèfon no és tan difícil com penseu i esperem que el nostre codi us pugui ajudar a entendre millor el concepte que hi ha darrere de codificar un iRobot.

Recomanat: