OpenVino – creare i progetti demo con visual studio 2019

Per iniziare ad usare OpenVino è possibile utilizzare i modelli demo, contenuti nel direttorio:

C:\Program Files (x86)\IntelSWTools\openvino_2020.1.033\deployment_tools\open_model_zoo\demos

Prima di utilizzarli è necessario generare i progetti visual studio per ciascun demo. E’ sufficiente lanciare il comando:

build_demos_msvc.bat

Questo lancerà tutta una serie di comandi cmake, uno per ogni progetto, generando tutti i progetti all’interno del direttorio:

C:\Users\NomeUtente\Documents\Intel\OpenVINO\omz_demos_build

Questi si potranno lanciare nell’IDE visual studio uno alla volta oppure utilizzando la comoda soluzione demos.sln che li genererà tutti insieme.

Il risultato sarà compilato nel direttorio:

C:\Users\NomeUtente\Documents\Intel\OpenVINO\omz_demos_build\intel64\Debug

Ovviamente si potranno compilare anche in versione Release.

Prima di lanciare uno qualsiasi degli eseguibili generati è necessario impostare alcune variabili d’ambiente. E’ sufficiente eseguire il comando setupvars.bat che si trova in:

C:\Program Files (x86)\IntelSWTools\openvino_2020.1.033\bin

e nello stesso prompt andare nel direttorio dove si trovano gli eseguibili generati e eseguire da lì i programmi.

OpenVino – scaricare i modelli di apprendimento per Inferenza

Dopo aver configurato OpenVino e scaricato tutte le dipendenze, incluso python3, per eseguire inferenze sui diversi modelli disponibili è necessario scaricare i modelli disponibili online.

Questo modelli sono file con estensione .xml e .bin e ve ne sono per ogni tipo di inferenza, come face detection, pose detection, car detection e così via.

Per scaricare questi documenti è necessario aprire una finestra del prompt e eseguire il comando:

python ./downloader.py –all –output_dir c:/intel/models

Questo scaricherà tutto l’albero dei modelli di inferenza nel direttorio indicato.

Il comando downloader.py si trova nel direttorio:

C:\Program Files (x86)\IntelSWTools\openvino_2020.1.033\deployment_tools\open_model_zoo\tools\downloader

Compilazione di wxWidgets

Per utilizzare le classi dell’ottimo framework wxWidgets, è conveniente scaricare i sorgenti dall’apposito sito e compilare le dll e i file lib per poterli utilizzare con la corretta versione di Visual Studio.

Ogni versione di Visual studio, infatti, utilizza un tipo diverso di file lib per le librerie, pertanto è necessario utilizzare quelli generati per la propria versione.

Per la compilazione è necessario avviare il prompt dei comandi di visual studio, corrispondente alla cpu per cui si intende compilare (x86 oppure x64).

Poi si deve andare nel direttorio %wxWidgets%\build\msw e da qui lanciare il seguente comando:

nmake /a /f makefile.vc SHARED=1 TARGET_CPU=X64 COMPILER_VERSION=142

Questa istruzione andrà a compilare l’intero framework di dll che servono per il target scelto, creando la directory vc142_x64.dll dentro %wxWidgets%\lib .

Per qualche motivo non compreso, wxWidgets continua a caricare le dll in debug dalla directory vc110_x64.dll, pertanto è necessario rinominare la cartella. Nel file setup.h attuale è necessario impostare il path con cui il framework va a cercare le dll, in quanto attualmente non viene considerato visutal studio 2019. Il file da modificare è: include\msvc\wx\setup.h e la riga è la 69. Bisogna cambiare da vc141 a vc110 nel caso di _MSC_VER >= 1910.

Configurazione Bluetooth su raspberry pi 3

La configurazione Bluetooth si trova dentro il file /etc/bluetooth/rfcomm.conf.
All’interno si deve configurare il ssid della rete a cui ci si collega e le relative password di accesso.
Successivamente, per fare il pairing bisogna mettere il dispositivo in modalità di attesa: è sufficiente il comando
sudo hciconfig hci0 piscan

A questo punto il dispositivo si porrà in attesa di essere pareggiato con un altro (la consueta password 1234 dovrebbe essere corretta).

Una volta configurato il tutto, è necessario istruire raspberry a fare lo start del Bluetooth all’avvio. Il comando da inserire in /etc/inittab oppure in /etc/rc.local è

sudo bluez-simple-agent

Nel file inittab si deve caricare una riga per permettere di aprire un terminale attraverso una porta del Bluetooth. Lo supporta sia windows (utilizzando putty) che raspberry.

Come ti configuro il controller “THT Arcade console 2P USB Player”

La configurazione di questo controller con raspberry dipende da alcuni parametri settati nei file di configurazione, in alternativa il sistema rileva solo un unico joystick pilotato dalle due levette. Innanzitutto è necessario estrapolare il codice del dispositivo, che deve essere stato rilevato correttamente all’avvio del kernel. Si dà il seguente comando:

# cat /proc/bus/input/devices
I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name=”Xbox Gamepad (userspace driver)”
P: Phys=
S: Sysfs=/devices/virtual/input/input0
U: Uniq=
H: Handlers=js0 event0
B: PROP=0
B: EV=b
B: KEY=7fdb0000 0 0 0 0 0 0 0 0 0
B: ABS=3001b

I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name=”Xbox Gamepad (userspace driver) #2″
P: Phys=
S: Sysfs=/devices/virtual/input/input1
U: Uniq=
H: Handlers=js1 event1
B: PROP=0
B: EV=b
B: KEY=7fdb0000 0 0 0 0 0 0 0 0 0
B: ABS=3001b

I: Bus=0003 Vendor=16c0 Product=05e1 Version=0101
N: Name=”THT THT Arcade console 2P USB Player”
P: Phys=usb-3f980000.usb-1.4/input0
S: Sysfs=/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.4/1-1.4:1.0/0003:16C0:05E1.0001/input/input2
U: Uniq=
H: Handlers=js2 event2
B: PROP=0
B: EV=1b
B: KEY=3ff 0 0 0 0 0 0 0 0 0
B: ABS=3
B: MSC=10

I: Bus=0003 Vendor=16c0 Product=05e1 Version=0101
N: Name=”THT THT Arcade console 2P USB Player”
P: Phys=usb-3f980000.usb-1.4/input0
S: Sysfs=/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.4/1-1.4:1.0/0003:16C0:05E1.0001/input/input3
U: Uniq=
H: Handlers=js3 event3
B: PROP=0
B: EV=1b
B: KEY=fff 0 0 0 0 0 0 0 0 0
B: ABS=3
B: MSC=10

I parametri che servono sono quelli che compaiono al centro della stringa Sysfs=….. /0003:16C0:05e1………

Questi vanno inseriti nel file /boot/cmdline.txt in fondo all’unica riga presente, aggiungendo la stringa:

usbhid.quirks=0x16c0:0x05e1:0x040

Un bel reboot et voilà.

Pistola in legno con elastici

Prendendo spunto dal fantastico tutorial visibile all’indirizzo Tutorial M9 Rubber Band Gun ho deciso di realizzarmi una fantastica pistola in legno con proiettili elastici.
Il tutorial è corredato anche di piani dettagliati di montaggio della pistola, scaricabili all’indirizzo pdf.
Tali piani possono essere stampati e poi ricalcati con una sega a nastro, oppure, come ho fatto io, possono essere tagliati alla cnc, essendo già disegnati a misura.

I piani si compongono di alcuni strati, da incollare tra di loro, di multistrato da 4 mm di spessore.

L’unica cosa a cui bisogna prestare molta attenzione, altrimenti si corre il rischio di dover tagliare più volte le sagome in legno, è che i percorsi nel file pdf non sono tutti chiusi. A prima vista, sembrerebbe di sì, ma se si esegue il taglio ci si accorge che i percorsi di taglio sono calcolati un po’ all’interno e un po’ all’esterno, pregiudicando il corretto allineamento dei pezzi.

Il risultato è visibile in figura

Pistola a elastici
Pistola a elastici cnc

Nella figura sottostante si vede il meccanismo di caricamento degli elastici che, a seconda delle dimensioni, possono arrivare fino a 7-8 consecutivi.

caricamento
caricamento

Infine, un particolare del caricatore che permette di installare degli elastici di riserva in caso di emergenza:

caricatore
caricatore

DIY cnc – firmware open source (Parte 2)

Dopo qualche settimana di lavoro l’assez finalmente viene completato e quindi passo al progetto delle parti della struttura.

Dal mio fidato fornitore lmsystem2000 ordino le viti e le chiocciole rigorosamente a ricircolo necessarie allo spostamento del piano. Queste sono tutte da 20mm a passo 10mm, ovviamente essendo lunghe oltre un metro ho bisogno che siano di una certa dimensione minima. 20 mm è sufficiente per la tolleranza e la precisione che desidero.



Dopo quasi un anno trascorso a disegnare, acquistare e montare i vari pezzi sono arrivato ad avere la macchina “dei miei sogni”. Finalmente funzionante. Ringrazio ovviamente Luigi della sua disponibilità e bravura.
Purtroppo per qualche mia distrazione durante il disegno mi sono dimenticato alcuni piccoli particolari ma con l’aiuto di mio fidato suocero e dei suoi strumenti di lavoro tuttofare, sono giunto al capolinea.
Ovviamente, mi sono buttato alla ricerca di qualcosa da tagliare, per iniziare col botto. Tra i vari disegni disponibili online, mi sono regalato un bel trex:

TRex
Trex

DIY cnc – firmware open source (Parte 1)

Per tanto tempo ho desiderato avere una cnc, uno strumento con il quale realizzare i numerosi piccoli/GRANDI progetti che mi invadevano la mente.

Un paio di anni fa presi la decisione: avrei progettato e (possibilmente) realizzato la mia cnc.

Per ottenere un buon risultato avevo bisogno di qualche rinfrescatina di meccanica, dato che, da buon ingegnere elettronico, evidentemente la componente elettronica non mi spaventava.

Allora ho preso di mira Amazon e in particolare i migliori libri di meccanica e di costruzioni disponibili. Sono passato attraverso la serie del Belluzzi per le costruzioni, fino ad arrivare allo Shigley per la parte di meccanica vera e propria. Qualcuno in ufficio mi considerava un po’ squilibrato vedendomi leggere, nelle pause pranzo, il manuale del cemento armato. Eppure, l’esperienza è stata interessante e proficua. Dopo diverse letture ho riacquisito dimestichezza con le nozioni di meccanica, necessarie per il dimensionamento della struttura della macchina che volevo realizzare.

La “mia” macchina, infatti, doveva avere dimensioni ragguardevoli, almeno 100 x100 cm sul piano e 25 cm per l’asse z. Inoltre, dato che non volevo limitarmi ai lavori effettuati sul piano, mi serviva spazio libero al di sotto del piano e, di conseguenza, ho optato per una soluzione con due motori sull’asse y.

Trovato il modo per dimensionare la struttura, me la sono disegnata con il miglior cad disponibile, autocad inventor.

Una volta terminato il progetto, dovevo trovare qualcuno disponibile a fresarmi i pezzi in alluminio, senza farmi spendere una cifra irraggiungibile. Così ho cercato qualcuno disponibile navigando sui vari forum in internet e finalmente ho trovato il mitico LuigiM, nel forum di http://www.cncitalia.net.

A distanza di qualche settimana ecco arrivare il pacco dell’asse z, visibile nella figura in tutta la sua bellezza:

Asse z
Asse z

La struttura è molto pesante, alcuni punti sono in alluminio spesso 30mm, forse anche troppo, ma ormai sta nascendo…

Prosegue al passo 2

Come ti simulo una tastiera con Arduino

Da qualche tempo mi diletto a rivivere il passato dei giochi, quelli per intenderci che spopolavano le sale giochi e/o che giravano sui vecchissimi (ma divertentissimi) commodore 64, amiga, zx spectrum, ecc.

Innanzitutto un po’ di spiegazioni, prima di arrivare al punto in cui ci servirà fare uso del nostro fidato arduino.

Cercando in giro si trova davvero di tutto. Esistono emulatori che permettono di emulare singole piattaforme, come n64, commodore 64, ecc. Ne esistono altri, invece, e di questi parlerò in questo articolo, che non emulano nessuna piattaforma in particolare, come MAME.

Dopo aver provato i vari retropie, pimame, su raspberry, con scarsi risultati, devo dire, mi sono concentrato su quello che potevo far girare sul mio Android, un Samsung s3 di oltre due anni fa.

Quello che ho trovato più interessante, tra i vari disponibili sullo store, è Mame4droid.

Di questo ne esistono due versioni, che possono essere installate entrambe contemporaneamente. La prima si chiama Mame4droid 0.37b5 e la seconda Mame4droid 0.139.

Visto che ci ho messo un po’ a capire la differenza ve la riporto: la prima permette di far girare giochi le cui rom hanno il numero di versione 0.37b5 (veramente io ho utilizzato le 0.37b11), la seconda vi obbliga a cercare qualcosa con il numero di versione 0.139.

Vi domanderete: embè ? Che me ne faccio ?

Per far girare qualcosa all’interno di un emulatore è necessario procurarsi le cosiddette roms. Sono dei piccoli (a volte) file compressi che contengono una copia binaria fedele al gioco originale, in formato leggibile dall’emulatore, che qualcuno si è preso la briga di creare per voi.

Tralasciando il discorso che, ovviamente, scaricare queste rom equivale a commettere un “piccolo” reato, in rete si trovano archivi enormi di questi giochi, alcune volte già pronti per essere solo installati. L’importante è avere un po’ di pazienza e cercare solo quello che vi serve (ricordate la versione). Oppure vi create la vostra bella copia di una rom partendo da un gioco già in vostro possesso…

Una volta che avrete il vostro nuovo archivio di roms su PC, queste vanno caricate nella flash di android.

Allora, per la versione 0.37b5, vanno caricate nella directory /sdcard/ROMS/MAME4ALL/roms, mentre per la versione 0.139 vanno caricate sotto /sdcard/ROMS/MAME/roms. Non sbagliate, altrimenti l’emulatore non le troverà mai.

Se ritenete di avere copiato il file nella posizione giusta ma l’emulatore non vi trova ancora nulla, allora vuol dire che non avete caricato la versione del file corretta, come spiegato sopra. Cercate altrove.

Quello che dovreste vedere quando avviate l’applicazione è qualcosa del genere:

immagine Mame4droid0.139

immagine Mame4droid0.139

A tra poco per il proseguimento… Continua a leggere Come ti simulo una tastiera con Arduino