Arxiu mensual: gener de 2018

Detecció dels dards: Primeres proves

Ja tinc el prototipus del moble, i ja puc començar a fer proves per a detectar els dards. Com es veu al video, la detecció és molt bona. Si ens fixem en la configuració, la webcam està en el mateix pla XY que la diana. Això crec que té avantatges en la detecció del dard; i desavantatges: necessitaré 2 webcams, i possiblement 3 webcams per posicionar amb fiabilitat el dard en la diana.

Utilitzem la llibreria OpenCV sobre C++, i el flux bàsic consisteix en fer una captura de la webcam; llençar el dard; i fer una altra captura. Aleshores es fa la diferència de les imatges; es converteix a binari; s’aplica una màscara per eliminar bona part del dard. En aquest moment hem de veure la part de baix del dard, i ben clarament la punta. Tenim un número limitat de punts blancs. Amb aquests punts calculem el moment, que seria el centre de gravetat dels punts. I fent un bucle sobre tots els punts puc detectar el punt més inferior, que seria la punta del dard. Finalment, per eliminar possibles errors, calculo la distància entre la punta i el moment, que ha de ser un valor petit.

Encara queda molta feina per fer. D’una banda, s’ha de traduir la detecció del dard als possibles sectors on està el dard. Després afegir una altra webcam. I si afegeixo una tercera webcam, segurament necessitaré algun USB Hub. L’objectiu és utilitzar una sola Raspberry Pi 3 en tot el projecte.

Prototipus de diana de dards II

Fa uns dies vaig construir el primer prototipus de moble, i ja vam fer unes quantes proves per detectar els dards. He tret bastantes conclusions del primer prototipus, i he arribat a la conclusió de què s’ha de fer un nou moble, amb unes noves dimensions.

La primera consideració és la distància de la webcam a la diana. Amb la webcam amb què estic fent les proves (Creative Live! Cam Sync HD), la distància de la webcam al centre de la diana ha de ser com a mínim de 46 cm. Un altre tema important és que el pla de la càmera ha de coincidir exactament amb el pla XY de la diana (aquesta és la manera com jo abordo la posició de les càmeres, evidentment necessitaré dues càmeres, o potser tres). La il·luminació ha de ser uniforme, i sobretot, la construcció ha de ser sòlida. La clau està en què quan faig la sostracció entre una captura i la següent (en la què s’ha llençat un dard), la diferència entre les imatges ha de ser realment la detecció del nou dard (no ha d’haver-hi cap mena de soroll).

Ja he estat fent proves amb el nou prototipus, i val a dir que els resultats han estat molt bons (faré un post i un video properament), o sigui que puc afrontar amb optimisme la part més crítica del projecte.

Com es veu en la imatge, la idea que tinc del moble és integrar una pantalla de 15 polzades just a a sota de la diana, i ficar-hi també els tres o quatre botons que necessitaré per interactuar amb el software. La part del software la tinc bastant avançada, però ara m’he de centrar més en la detecció dels dards.

Un altre tema que he de fer els propers dies és convertir la posició del dard a la puntuació de la diana. No cal dir que amb una sola càmera (en el mateix pla XY que la diana) això és impossible, es necessitaran dues càmeres mínim.

Llaç groc: llibertat presos polítics

Finalment hem penjat el llaç groc des del nostre balcó fins al balcó del senyor Jaume, al bell mig del carrer Milà i Fontanals de Barcelona. Avui, 30 de gener de 2018, dia que no s’ha pogut celebrar el ple del parlament perquè el nostre president Puigdemont no pot venir a defensar la seva candidatura a la presidència de la Generalitat.

Cada dia recordem que hi ha presos polítics: Oriol Junqeras, Quim Forn, Jordi Sánchez i Jordi Cuixart, i gent que està a l’exili i que no pot tornar amb garanties. Delictes? El que és delicte és continuar sent súbdits del Regne d’Espanya. Algú dirà que no hi ha majoria per proclamar la idependència… doncs fem un referèndum.

Prototipus de diana de dards amb bona il.luminació

A veure si dono una empenta al projecte de la diana electrònica. He avançat bastant en el software. Vaig fer proves en el seu dia amb la llibreria OpenCV, i ara és el moment d’atacar la part crítica del problema, que és la detecció fiable dels darts.

Com que el problema és bastant crític, el primer serà tenir la diana amb unes condicions de llum ben controlades, amb il·luminació uniforme i sense ombres. Per fer-ho, he fet una estructura de fusta amb tira de LEDs pels costats, com es veu a la foto. El següent pas serà aconseguir unes webcams decents. De moment les proves les he fet amb una webcam molt senzilla amb resolució de 480px. Estic esperant una webcam de 720px, que a part d’una millor resolució espero que tingui una millor qualitat. Finalment també disposo d’una RaspiCam NoIR (la càmera d’infrarrojos pròpia de la Raspberry Pi). Aquesta sí que té una bona resolució i qualitat, el problema és que no és USB, i per tant en una Raspberry Pi només hi pot haver una càmera RaspiCam.

La meva idea inicial és utilitzar una sola Raspberry Pi 3, amb dues webcams USB connectades. Es tracta d’anar fent proves i anar controlant totes les variables i causístiques que es puguin donar. Per sort, en tot aquest procés no estic sol, sinó que hi ha més gent engrescada en la construcció d’una diana eletrònica amb dards de punta de ferro. Concretament el projecte https://github.com/hanneshoettinger/opencv-steel-darts i la discussió que es genera en el grup de Facebook de https://www.facebook.com/groups/281778298914107/. Feia anys que no entrava al Facebook, ja veig que les properes setmanes seré un assidu.

Ja aniré explicant les meves aventures i avenços.

Tauleta Pinball, nova màquina

Per Nadal vaig acabar aquesta taula de pinball, en el format de taula de cafè. Ja és la segona que he fet seguint aquest esquema, montant una TV de 32”. En aquest cas he incorporat algunes millores: la disposició dels botons i la implementació del nudge.

En el procés de construcció m’han vingut ganes de construir una màquina de pinball amb dos monitors (la configuració típica de playfield i backlight), o sigui que estic reunint les peces i ja estic pensant en el disseny. Serà un dels projectes per aquest trimestre.

Nova màquina: recreativa arcade vertical

Aquesta setmana he acabat una nova màquina, una recreativa vertical. Curiosament, és la segona que faig seguides. A mi aquest format m’agrada molt, ja veig que no sóc l’únic.

Com a novetat, he mirat de perfeccionar el tema del vidre que protegeix la pantalla, i el vidre del marquee retroil·luminat. La idea és que amb la fresadora s’ha de fer ranures, i el vidre va encastat dins d’aquestes ranures. El vidre es pinta per darrere, seguint el marc de la pantalla. Queda un resultat molt professional.

recreativa dards v0.0.8

Ja tinc ganes de fer aquesta nova recreativa: una màquina de darts amb detecció automàtica dels darts i la seva puntuació. Però no dards amb punta de plàstic. Ha de ser un dartboard original de suro amb dards de punta metàl·lica.

Per a la detecció dels dards hi havia la possibilitat d’utilitzar una malla resistiva i poder posicionar on llencem els dards. Però crec que no seria de fiar. El millor serà utilitzar visió per computadora amb OpenCV. Ja parlaré sobre el tema més endavant.

De moment he estat treballant amb la lògica dels diferents jocs de dards que hi ha. Els més populars són: 301, 501, Count Up, Cricket, Round the Clock, Halve it. I ara ja puc presentar la primera versió de l’aplicació, no funcional, que només funciona a la consola de Linux. Aquesta versió simula partides reals de fins a 4 jugadors: primer esculls el joc; després número de jugadors; després assignes els usuaris; comencem a jugar al joc seleccionat passant per les diferents rondes (cada ronda són tres tirades dels dards). I així anem registrant la puntuació fins que arribem al guanyador.

En les següent versions del programa (escrit amb C++) s’haurà d’implementar tota la part de OpenCV, i finalment tota la part de SDL (llibreria gràfica). Tot haurà de córrer en una Raspberry Pi 3, de manera que el desenvolupament el faig en el portàtil, però assegurant la portabilitat a la RPi3. Aquest hauria de ser el projecte estrella d’aquest semestre. És una idea que em persegueix de fa tres anys. De fet no és una idea original, hi ha diversos projectes que utilitzen dards amb punta de ferro i taulells de suro o fibra, en comptes de les dianes electròniques amb puntes de plàstic. Potser ara el projecte més similar seria open-cv-steeldarts, que s’està desenvolupant amb Python i que encara no és plenament funcional. Li donaré una ullada sobretot pel tema de la calibració i detecció dels dards.

Enllaços: