Taula de continguts:

Robotècnic: 8 passos
Robotècnic: 8 passos

Vídeo: Robotècnic: 8 passos

Vídeo: Robotècnic: 8 passos
Vídeo: Промышленные роботы FANUC на выставке AUDI 2024, Juliol
Anonim
Robotècnic
Robotècnic

Imagineu-vos per un segon que sou un dels astronautes que aterra a Mart. Teniu un milió de coses per fer, mostres per fer, experiments per executar, dades per recollir, però una o dues vegades al dia heu de recórrer els mòduls d’habitatge i / o investigació que viviu i treballeu per inspeccionar-los. És necessari, algú ha de garantir que la cosa estigui en bona forma, que totes les milers de peces i peces estiguin treballant i en lloc. Però, i si hi hagués un ajudant automàtic que us alliberés d'alguns d'aquests deures. Què passa si hi hagués un petit robot que es pogués moure per dins dels mòduls per assegurar-se que tot estigués al seu lloc, funcionant i segur.

Robotècnic al rescat.

Bàsicament, aquest codi controla el Robotècnic ja que segueix un camí de color clar a terra. Seguirà aquest camí fins que trobi una cruïlla al camí o un gir, cosa que provocarà que es faci una foto per al processament d’imatges que permeti al Robotècnic prendre una decisió sobre cap a on seguir. Els sensors de protecció de llum i protecció de la llum funcionen per protegir el Robo-Technician dels danys i els sensors de protecció controlen quan es farà una foto de diagnòstic. En conjunt, el Robotècnic està dissenyat per ampliar els mòduls de Mar, alliberant el temps dels astronautes mentre realitza la tasca bàsica d’inspecció, només demana aportació humana quan troba alguna cosa malament.

De nou com a advertència, es tracta d’un treball en curs. El codi, tal com existeix, funciona, però té problemes, sobretot perquè hi ha diversos programes que se solapen. A més, perquè aquest projecte funcioni en una missió real de Mart, caldria construir un robot per a aquest propòsit específic, així que, de nou, suposo que es tracta d'una construcció de "prova de concepte".

Hi ha algunes coses que necessitareu per posar-ho en marxa. Necessitareu un programa car, paquets de suport per a aquest programa i una mica de fons en la codificació. Com que sóc estudiant i he proporcionat alguns dels codis de la planta baixa (per al raspberry pi), no parlaré específicament de la configuració. A continuació podeu trobar tots els enllaços d’aquest codi base. Anem a la llista de materials.

Maquinari

  • Raspberry Pi (hem utilitzat una versió 3)
  • iRobot ®
  • algun tipus de dispositiu de retenció per mantenir el Raspberry Pi unit al Robotècnic
  • Càmera Raspberry Pi (no importa quin tipus, sempre que tingui una bona resolució d’enfocament automàtic i imatge)
  • algun tipus de suport o funda per mantenir la càmera mirant cap endavant al Robotècnic
  • un material per utilitzar com a tira, de color blanc (o de colors molt clars), que es manté fermament al terra. Ha de ser una mica més ample que l’espai entre els dos sensors del penya-segat anteriors.
  • 4 signes amb text molt gran (amb les paraules IMATGE, DRETA, TORNADA i ESQUERRA impreses)
  • Fulls de paper de colors (almenys tres i preferiblement vermell, verd i blau)

Programari

  • Matlab (2018a i 2017b es van utilitzar tots dos i sembla que fan poca diferència)
  • Paquet de suport de Raspberry Pi per a Matlab
  • Codi Raspberry Pi per a la connexió a Matlab (enllaç al codi font que es proporciona a continuació)
  • Caixa d’eines de processament d’imatges per a Matlab (pràcticament no podeu fer aquest projecte sense la caixa d’eines)
  • OPCIONAL: Matlab Mobile està instal·lat al telèfon, cosa que explicaré més endavant

Pas 1: Configuració del maquinari

ef.engr.utk.edu/ef230-2018-08/projects/roo…

Aquest és l'enllaç del codi base per garantir que l'iRobot® es pugui comunicar amb Matlab, juntament amb un tutorial bàsic. Com he dit abans, no tractaré aquesta part específica, ja que el tutorial ja està molt ben dissenyat. Esmentaré que un cop hàgiu seguit els passos de l’enllaç, podeu utilitzar l’ordre "doc" de Matlab per buscar la informació inclosa. Concretament:

doc roomba

I un punt més important.

Quan descarregueu els fitxers des de l’enllaç anterior, POSEU-LOS A LA CARPETA QUE VAN DESCRIBIR MAIS A dalt, ja que Matlab requereix que els fitxers generats per l’usuari es trobin a la carpeta de treball actual.

Sense això, anem al codi.

Pas 2: trobar tots aquells sensors

Trobar tots aquells sensors
Trobar tots aquells sensors
Trobar tots aquells sensors
Trobar tots aquells sensors

Preneu-vos un segon i inspeccioneu l'iRobot®. És bo saber on es troben, de manera que teniu una idea de les entrades que rep el tècnic de robo i podreu esbrinar per què la cosa gira en cercles en lloc de seguir el camí que configurareu (això podria o potser no hauria passat). Evidentment, veureu el gran sensor de cops físic a la part frontal. Els sensors del penya-segat són una mica més difícils de veure, haureu de capgirar-lo i buscar les quatre finestres de plàstic transparents a prop de la vora frontal. Els sensors de cops de llum estan encara més amagats, però de moment n’hi haurà prou amb dir que el directe de la banda negra brillant recorre la part frontal de l’iRobot®, que es troba a la part frontal de la barra del sensor de cops.

Hi ha sensors de caiguda de roda, però no s’utilitzen en aquest projecte, de manera que passarem a provar els sensors.

Pas 3: proves per establir paràmetres

Proves per definir paràmetres
Proves per definir paràmetres

Abans d’enviar el tècnic de robo per fer la seva feina, hem d’esbrinar les seves peculiaritats i els seus rangs de sensors. Com que cada iRobot® és una mica diferent i canvia al llarg de la vida del robot, hem d’esbrinar com llegeixen els sensors sobre les àrees en què funcionarà. La manera més senzilla de fer-ho és configurar un camí de colors clars (He utilitzat tires d'impressora de paper blanc, però tot el que sigui de color clar farà) a la superfície que el Robotècnic farà funcionar.

Inicieu Matlab i obriu un nou script. Deseu l'script a la mateixa carpeta que he descrit abans i nomeneu-lo com vulgueu (intenteu fer-ho curt, ja que el nom d'aquest fitxer serà el nom de la funció). Enceneu el robot i utilitzeu la configuració de la variable roomba des del tutorial, escrivint les ordres a la finestra d'ordres.

Assegureu-vos que el Raspberry Pi estigui endollat a l’iRobot® i que l’ordinador estigui connectat a la mateixa connexió a Internet. Passareu menys temps traient els cabells intentant esbrinar per què Matlab no es connecta

r = roomba (número que heu configurat)

La variable "r" en aquesta circumstància no és necessària, la podeu anomenar com vulgueu, però facilita l'ús d'una variable de lletra única.

Un cop configurat el camí i connectat amb èxit el roomba, col·loqueu el futur Robotècnic on un o dos dels sensors del penya-segat es trobin a la part superior del camí. Viouslybviament, això significa que els altres dos o tres estan a la part superior de la superfície que heu triat.

Ara inicieu els sensors de prova amb l'ordre:

r.testSensors

Tingueu en compte que la "r" és la variable que heu definit anteriorment, de manera que si no és "r" canvieu la "r". al que hagis decidit. Això mostrarà la pantalla del sensor de prova amb un munt d'informació.

Per a aquest projecte, centreu-vos en les seccions lightBumpers, Bumpers i Cliff. Mou el Robo-Technician assegurant-te de veure com canvien els sensors sobre diferents superfícies o de quina distància ha de tenir un objecte perquè puguin canviar els valors del paràmetre ligth, etc. Tingues presents aquests números (o escriu-los) perquè els necessiteu per configurar els vostres paràmetres en un segon.

Pas 4: Inici del codi

En primer lloc, construireu una funció. L'he anomenat "camí", però, de nou, el nom no és necessari, però a partir d'ara m'hi referiré com a "camí".

La part superior del codi està configurant algunes opcions d'entrada d'usuari. Construeix algunes llistes que s'utilitzaran a la llista i, a continuació, obrirà un quadre de diàleg de llista. Això permet a l’usuari seleccionar quin color de camí vol seguir, que entrarà en joc més endavant.

list = {'Vermell', 'Blau', 'Verd'}

problist = {'Casualty, Save Image', 'Component of Place, Save Image', 'Expected, Continue'} pathcolor = listdlg ('PromptString', 'Selecciona un color de camí', … 'SelectionMode', 'single', 'ListString', list) prob = 0; driv = ;

Les variables "prob" i "driv" s'han de declarar aquí, ja que s'utilitzaran dins del bucle main while de la funció, però de nou, si voleu canviar el nom d'alguna d'aquestes variables o canviar les seleccions de la llista, estarà bé sempre que sou coherent a la resta del codi.

Pas 5: Part superior del bucle While: Sensors físics de cops

La part superior del bucle while conté la lògica del sensor de cops físic. Bàsicament, quan el Robotècnic es troba amb alguna cosa que s’atura (o per al sensor de protecció frontal fa una còpia de seguretat de 0,1 metres), es posiciona per fer una foto. Cobrim primer la porció de control de velocitat i posició.

Si heu provat tots els sensors del Robo-Technician en els passos anteriors, sabreu que els sensors de protecció tenen un valor lògic (0 o 1) amb zero que representa la posició normal del sensor que no es prem. Tingueu-ho en compte per al codi.

mentre que% true principal mentre el bucle% rep informació de para-xocs S = r.getBumpers si S.left ~ = 0 r.stop elseif S.right ~ = 0 r.stop elseif S.front ~ = 0 r.stop end

Aquesta és la part bàsica "si toca alguna cosa, atura". Si els sensors detecten una col·lisió, es mou cap a la següent part del codi, que reajusta la posició del tècnic de robo per obtenir una foto.

si S.left ~ = 0% si el bucle pren informació de para-xocs i alinea la càmera per a la foto r.turnAngle (5) pausa (0,5) img = r.getImage% fa foto i mostra la imatge (img)% quadre de diàleg prob = listdlg (' PromptString ',' S'ha trobat un obstacle inesperat, identifiqueu '…,' SelectionMode ',' single ',' ListString ', problist) elseif S.right ~ = 0 r.turnAngle (-5) pausa (0,5) img = r. getImage image (img) prob = listdlg ('PromptString', 'He trobat un obstacle inesperat, identifiqueu' …, 'SelectionMode', 'single', 'ListString', problist) elseif S.front ~ = 0 r.moveDistance (- 0.1) pausa (0.5) img = r.getImage image (img) prob = listdlg ('PromptString', 'S'ha trobat un obstacle inesperat, identifiqueu' …, 'SelectionMode', 'single', 'ListString', problist) end

Bàsicament, un cop presa la imatge, apareixerà un altre quadre de diàleg amb tres opcions. Les dues primeres opcions desen la foto en una carpeta especificada, que tractaré més endavant, mentre que la tercera opció simplement tanca el quadre de diàleg i continua a través del bucle. Si no recordeu les opcions, consulteu el pas anterior.

Ara he inserit una secció de codi entre la part del sensor de cops i la part d’estalvi de fotos. Això pren els valors de LightBumper i estableix la velocitat de la unitat a 0,025 metres / segon (molt lenta), cosa que en realitat no és necessària, però sí que redueix el robo-tècnic que colpeja les coses i, finalment, esgota els sensors de cops físics.

L = r.getLightBumpers si L.esquerra> 100 || L.leftFront> 100 || L.rightFront> 100 || L. dreta> 100 driv = 0,025 r.setDriveVelocity (0,025) else driv = 0,1 final

Aquesta seria la part en què entren en joc els valors que observàveu (i esperem que anotàveu) abans

El valor "L. (costat i direcció del sensor)> 100" es basa en els valors que he observat, de manera que si les vostres observacions són diferents, canvieu aquests números. La idea és que si el Robotècnic detecta alguna cosa uns centímetres per davant, disminuirà la velocitat, cosa que és innecessària.

La següent part és on es guarden les fotos per després.

% si s'ha seleccionat la primera o la segona opció al quadre de diàleg prob, desa la imatge si prob == 1% si el bucle crea informació del fitxer per a la foto, escriu amb marca de temps t = rellotge; basename = sprintf ('\ img_% d_% d_% d_% d_% d.png', t (1), t (2), t (3), t (4), t (5)); folder = 'E: / UTK / Classes / fall 18 / ef230 / irobot / images'; fullFileName = fullfile (carpeta, nom base); imwrite (img, fullFileName) tancar Figura 1 pausa (2) elseif prob == 2 t = clock; basename = sprintf ('\ img_% d_% d_% d_% d_% d.png', t (1), t (2), t (3), t (4), t (5)); folder = 'E: / UTK / Classes / fall 18 / ef230 / irobot / images'; fullFileName = fullfile (carpeta, nom base); imwrite (img, fullFileName) close Figura 1 pausa (2) final

Tots els noms de fitxers i ubicacions on es guarden les fotos són opcionals. He escollit una carpeta que es troba a la carpeta roomba que he creat al pas d’introducció, però pot ser a qualsevol lloc que trieu. A més, les fotos es guarden amb la marca de temps, però això no és especialment necessari (tot i que seria hipotèticament útil per a una missió a Mart).

Amb els sensors físics de cops coberts, podem passar als sensors del penya-segat i seguir el camí.

Pas 6: seguir el camí

El codi dels sensors de penya-segat està configurat per comparar els valors dels dos valors del sensor frontal i dos laterals. Haureu de canviar aquests valors (probablement) en funció dels valors observats. Probablement també haureu d’editar aquests valors després d’executar unes quantes proves i canviar-los en funció de la llum ambiental, l’hora del dia (segons la il·luminació de la zona de prova) o quan les finestres del sensor estiguin brutes.

Abans d'arribar al codi del sensor de penya-segat, però, hi ha un segment de codi curt que he inserit per eliminar algunes de les dades innecessàries de Matlab. Aquesta part no és necessària, però la vaig fer servir per reduir l’emmagatzematge necessari per executar el programa.

clear img clear t clear base base clear fullFileName clear folder

El següent segment de codi és la carn del projecte. Permet al Robotècnic seguir el camí de colors clars que s’ha col·locat a terra. En poques paraules, intenta dirigir-se de manera que els dos sensors anteriors del penya-segat estiguin per sobre del llindar, en funció dels valors observats, i permet al programa iniciar els passos de processament de la imatge una mica més endavant.

C = r.getCliffSensors% si el bucle segueix una banda de color (blanc) si C.leftFront> 2000 && C.rightFront> 2000% guia de camí recte r.setDriveVelocity (driv) elseif C.leftFront 2000% gira a la dreta si el robot va massa lluny left r.turnAngle (-2,5) elseif C.leftFront> 2000 && C.rightFront <2000% gira a l'esquerra si el robot va massa a la dreta r.turnAngle (2,5) elseif C.leftFront <2000 && C.rightFront 100 || L.leftFront> 100 || L.rightFront> 100 || L.right> 100 img = r.getImage final% comprova si hi ha un revolt del camí si C.left> 2800 && C.right <2800 r.turnAngle (2.5) elseif C.left 2800 r.turnAngle (- 2.5) end% posicionador de lloc per al reconeixement d'imatges de ruta disp ("OBTENIR IMATGE") end end end

Tingueu en compte que els noms de variables que he escollit són opcionals, però de nou crec que fa que sigui més fàcil utilitzar variables d'una sola lletra quan sigui possible

Per explicar la secció central del codi, quan els dos sensors frontals corren per la vora del camí (quan es tracta d’una intersecció o quan arriba al final del camí), mira si hi ha alguna cosa al davant.. Haureu de col·locar un objecte a terra al final del camí o en qualsevol intersecció perquè això funcioni.

Un cop feta la foto, utilitza el reconeixement d’imatges per esbrinar què fer. També hi ha un titular en aquesta secció de codi:

% de posicionador per al reconeixement d'imatges de camí d'accés ("OBTENCIÓ D'IMATGES")

Ho he fet servir de moment perquè volia parlar específicament sobre el processament de text i color que es produeix, que es troba al següent pas.

Pas 7: processament d'imatges

El processament d’imatges té dues parts. El primer és el reconeixement del color, que calcula la intensitat del color a la imatge per decidir si voleu continuar o no amb el reconeixement de text. Els càlculs del color es basen en l’elecció que es va fer en aquell primer quadre de diàleg al principi (he utilitzat vermell, blau, verd, però podeu triar els colors que vulgueu, sempre que els valors mitjans de la intensitat del color es puguin reconèixer per Càmera Raspberry Pi).

img = r.getImage img = imcrop (img, [0 30 512 354]) imgb = imcrop (img, [0 30 512 354]) imgt = imcrop (img, [0 30 512 354]) red = mean (mitjana (imgb (:,:, 1))); g = mitjana (mitjana (imgb (:,:, 2)))); b = mitjana (mitjana (imgb (:,:, 3))));

Aquesta és la comprovació de la intensitat. S’utilitzarà al següent segment per decidir què vol fer.

si vermell> g && vermell> b si pathcolor == 1 imgc = imcrop (img, [0 30 512 354]) R = ocr (img) si R. Words {1} == IMATGE || R. Paraules {2} == IMATGE || R. Paraules {3} == IMATGE t = rellotge; basename = sprintf ('\ img_% d_% d_% d_% d_% d.png', t (1), t (2), t (3), t (4), t (5)); folder = 'E: / UTK / Classes / fall 18 / ef230 / irobot / images'; fullFileName = fullfile (carpeta, nom base); imwrite (img, fullFileName) pausa (2) elseif R. Words {1} == DRETA || R. Paraules {2} == DRETA || R. Words {3} == DRETA r.turnAngle (-75) elseif R. Words {1} == ESQUERRA || R. Paraules {2} == ESQUERRA || R. Words {3} == ESQUERRA r.turnAngle (75) elseif R. Words {1} == TORNAR || R. Paraules {2} == TORNAR || R. Words {3} == TORNAR r.turnAngle (110) end else r.turnAngle (110) end end

Aquest segment decideix si el color seleccionat al primer quadre de diàleg coincideix amb el color que veu la càmera. Si ho fa, executa el reconeixement de text. Sembla veure quina paraula (IMATGE, ESQUENA, DRETA o ESQUERRA) apareix i, a continuació, gira (per la dreta i l’esquerra), gira (per esquena) o fa una foto i la desa de la mateixa manera que abans.

Només he proporcionat una única secció del codi per als diferents colors

Per permetre que el codi reconegui el blau i el verd, simplement copieu el codi i canvieu la comprovació lògica a la part superior del segment i configureu el "pathcolor == (número)" perquè correspongui a les seleccions de colors del quadre de diàleg superior (per al com es mostra, el blau seria 2 i el verd seria 3).

Pas 8: el producte acabat

El producte acabat
El producte acabat

Ara el Robotècnic hauria d’apropar els mòduls de la missió de Mart i informar als astronautes quan hi hagi alguna cosa fora de lloc.

Recordeu que cal canviar tots els valors del sensor de penya-segat i de lightBumper a quins són els vostres valors observats. A més, per experiència, he trobat millor provar aquest projecte en un terra de color fosc i és encara millor si aquest pis no és reflectant. Això fa que el contrast augmenti entre el camí i el terra, cosa que fa que sigui més probable que el Robotècnic el segueixi correctament.

Espero que us hagi agradat configurar un petit ajudant per a la missió de Mart i us divertiu a construir.

Recomanat: