venerdì 27 aprile 2018

DayDream Emulator Controller

Ho trovato ad un prezzo stranamente basso (30 euro) un visore Daydream e il controller collegato ed ho voluto provarlo
Solo dopo ho scoperto che non e' necessario avere Daydream per poterci sviluppare.
Avendo un telefono di riserva (non necessariamente supportato da Daydream) si puo' installare un emulatore di controller che si collega al telefono principale sia via Bluetooth che via WiFi



L'emulazione del controller funziona anche con il package Unity mediante una connessione USB

Peraltro sto sperimentando molti problemi con il controller fisico (quello grigio all'estrema destra) che e' molto carino ma ha difficolta' a rimanere collegato al telefono. In un caso estremo sono dovuto andare in Impostazioni/App/Servizi Google VR/Spazio di archiviazione/Cancella Dati. Questa operazione resetta le impostazioni di Google VR



Daydream Controller in Unity

Un semplice esempio di script da aggiungere al Player per muovere la Camera di Unity con il DayDream Controller





public class move_player : MonoBehaviour {


    // Use this for initialization
    void Start () {
        
    }
    
    // Update is called once per frame
    void Update () {
        Quaternion ori;

        ori = GvrController.Orientation;
        if (ori.eulerAngles.z > 20 && ori.eulerAngles.z < 90) {
            Debug.Log ("Roll Left ");
        }

        if (ori.eulerAngles.z > 270 && ori.eulerAngles.z < 340) {
            Debug.Log ("Roll Right");
        }

        if (ori.eulerAngles.x > 20 && ori.eulerAngles.x < 90) {
            Debug.Log ("Drop");
            var rot = transform.rotation;
            rot.z -= Time.deltaTime * 1;
            transform.rotation = rot;
        }

        if (ori.eulerAngles.x > 270 && ori.eulerAngles.x < 340) {
            Debug.Log ("Climb");
            var rot = transform.rotation;
            rot.z += Time.deltaTime * 1;
            transform.rotation = rot;

        }





        Debug.Log ("X : " + ori.eulerAngles.x.ToString("#.0")); //pitch
        Debug.Log ("Y : " + ori.eulerAngles.y.ToString("#.0")); // yaw
        Debug.Log ("Z : " + ori.eulerAngles.z.ToString("#.0")); // roll



        if (GvrController.IsTouching) {
            Vector2 touchPos = GvrController.TouchPos;
            Debug.Log ("Toccato " + touchPos.x.ToString ("#.00"));

            var x = touchPos.x * Time.deltaTime * 5.0f;
            var y = touchPos.y * Time.deltaTime * 5.0f;
            if (touchPos.x < 0.5f)
                x *= -1.0f;
            else
                x *= +1.0f;
            
            if (touchPos.y < 0.5f)
                y *= -1.0f;
            else
                y *= +1.0f;

            transform.Translate (x, y, 0.0f);
        }
        
    }
}

giovedì 12 aprile 2018

Alla ricerca di WannaCrypt

Ogni tanto ritorno sul luogo del delitto e mi trovo a giocare con una sottorete di una LAN piuttosto complessa che e' distribuita in diversi punti di Firenze. Esiste una organizzazione gerarchica per cui sono presenti nei vari uffici degli amministratori di rete locali (ruolo che ho ricoperto per un periodo di tempo anche io) che fanno capo ad un amministratore generale responsabile delle macchine di frontiera.

Qualche giorno fa l'amministratore generale ha inviato un warning del tipo

Oggetto: WARNING: GARR-CERT-A-B-1803100820-0007 Nodo probabilmente infetto da wannacrypt su XXX.XXX.XXX.XXX

la macchina di frontiera aveva individuato un traffico relativo al malware wannacrypt per la chiamata su porta 80 al dominio di controllo di WannaCrypt

 Porta locale: 49197
 IP:porta C&C: 104.17.41.137:80
(www.iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea.com)
 Malware: wannacrypt
 URL: /

il problema e' che la macchina di frontiera non era riusciuta a risolvere l'IP della macchina compromessa ma solo l'indirizzo di uscita fornito dal DHCP...c'era quindi da cercare il responsabile tra 256 computer distribuiti in diversi edifici. Come fare?

La prima ipotesi era quella di sniffare il traffico su porta 80 sullo switch in attesa che il client si collegasse al 104.17.41.137. Cosa lunga e poco efficace. 
C'e' pero' da considerare che WannaCrypt si basa su una vulnerabilita' su protocollo SMB di Windows fino alla versione 7 o Windows Servers 2008 e precedenti...considerando che adesso i client della rete sono quasi tutti Mac i Win10 il campo si restringe in modo significativo

Usando nmap ho lanciato la seguente ricerca

nmap --script smb-os-discovery -p 445 XXX.XXX.XXX.1/24 

ovvero la ricerca in tutti i computer della sottoclasse del servizio SMB aperto e facendomi fornire anche il tipo di sistema operativo installato

Nmap scan report for xxx.xxx.xxx.xxx
Host is up (0.00052s latency).
PORT    STATE SERVICE
445/tcp open  microsoft-ds
MAC Address: F0:4D:XX:XX:XX:XX:XX (Dell)

Host script results:
| smb-os-discovery: 
|   OS: Windows 7 Professional 7601 Service Pack 1 (Windows 7 Professional 6.1)
|   OS CPE: cpe:/o:microsoft:windows_7::sp1:professional
|   Computer name: XXXXXXX
|   NetBIOS computer name: XXXXXX
|   Workgroup: XXXXXXX
|_  System time: 2018-03-16T10:35:03+01:00


Una volta andato a controllare il client di persona e' emerso che la macchina non effettuava gli aggiornamenti automatici ed era quindi priva di patch di sicurezza. Problema trovato

mercoledì 11 aprile 2018

Tango Tablet vs Kinect

Ho provato a mettere alla prova il Tablet di Project Tango con il Kinect sulle Mura Etrusche a Fiesole gia' utilizzate come bersaglio in questo post


Pur ammettendo una giornata piovosa la prova con il tablet Tango e' stata disastrosa. Il sensore di profondita' e' riuscito ad acquisire al massimo 1100 punti da una distanza compresa tra 1.0 e 1.5 m; allontanandosi non veniva effettuata nessuna acquisizione mediante il software ParaView.

L'idea che mi sono fatto e' che il sensore di profondita' del tablet Tango non risulta avere una potenza di emissione cosi' elevata da avere riflessioni significative su superfici non omogenee e poco riflettenti.

In buona sostanza non e' possibile farne un utilizzo "in campagna" per scopi geologici. Il suo mondo e' il rilevamento di interni

martedì 10 aprile 2018

Esperimenti Tango : ParaView

Continuano gli esperimenti con Tango Tablet. La applicazione RTAB-MAP e' decisamente completa ma a me serviva una soluzione semplice per esportare la nuvola dei punti di una singola acquisizione ed ho trovato ParaView in versione Android per l'acquisizione e Desktop per la successiva visualizzazione

IMPORTANTE : non si devono aggiornare le applicazioni originali del tablet. Sia Tango Core che le GApps danno continuamente errore se aggiornate




I fotogrammi vengono acquisiti circa ogni 200 millisecondi.
Il massimo di numero di punti acquisiti e' intorno a 11.000-12.000.
Ad una distanza di 2 m da un muro la visione laterale e' +/- 1.0 m circa sull'asse X (orizzontale) e circa +/- 0.6 m sull'asse verticale. La FOV stimata e' di circa 53°x33°


I dati dello snapshot della app Android vengono salvate in formato .vtk. Dalla versione desktop i dati  possono essere esportati in csv in formato testo da File/Save Data/*.csv

sabato 7 aprile 2018

Test di Project Tango Tablet per la geologia

Scansioni 3D effettuate con Tablet Project Tango ed RTAB-MAP con visualizzazione in MeshLab

L'aspetto interessante di utilizzare RTAB-MAP e' che non e' necessario utilizzare una ripresa statica da cavelletto ma si puo' muovere la camera perche' viene gestito il motion tracking. Questo permette di riprendere anche zone che possono risultare "in ombra" da una ripresa frontale

Prova 1 







Prova 2







giovedì 5 aprile 2018

Project Tango

Visto che il Progetto Tango di Google e' stato dismesso a Marzo 2018 i prezzi dei dispositivi Tango sono scesi ad un livello umano e mi sono preso un Project Tango Tablet Development Kit. In estrema sintesi si tratta di una tablet Android NVidia con processore Tegra K1 e 128 Giga di memoria dotato di sensori simili a quelli del Kinect per il calcolo della distanza degli oggetti inquadrati


Il nome in codice del tablet e' Yellowstone altrimenti conosciuto con la sigla NX-74751 (in Star Trek la nave USS Yellowstone ha il codice NX-74751) ed e' stato sviluppato internamente da Google presso Google's ATAP (Advanced Technology and Projects). Per sapere quale hardware c'e' dentro si rimanda a questo link

Attualmente la documentazione delle API di Tango sono sparite dal sito sviluppatori di Google ma sono sempre recuperabili su Archive.org mentre il codice di esempio e' stato spostato qui. Al momento non sono riuscito a trovare una immagine del firmware da poter scaricare
Il sensore di profondita' e' un OV4682 con una matrice di 320x180 pixels (risoluzione molto lontana dal Kinect) ed ha funzione anche di camera RGB. Ci sono inoltre una camera standard da 4 Megapixels piu' una camera fisheye da 120° ed una da 180° (in totale di sono 4 camere)

OSAndroid™ 4.4 (KitKat®)
Screen7.02” 1920x1200 HD IPS display (323 ppi)
Scratch-resistant Corning® glass
Camera1 MP front facing, fixed focus
4 MP 2µm RGB-IR pixel sensor
Size119.77 x 196.33 x 15.36 mm
Weight0.82 lbs (370 g)
Battery4960 mAH cell (2 x 2480 cells)
ProcessorNVIDIA Tegra K1 with 192 CUDA cores
Network/Wireless4G LTE¹
Dual-band Wi-Fi (2.4GHz/5GHz) WiFi 802.11 a/b/g/n
Bluetooth 4.0
NFC (reader and peer to peer modes)
Memory128 GB internal storage (actual formatted capacity will be less)
4 GB RAM
ConnectivityMicro HDMI
USB 3.0 host via dock connector²
Micro SD card
Nano SIM slot
SensorsMotion tracking camera
3D depth sensing
Accelerometer
Ambient light
Barometer
Compass
aGPS
Gyroscope
Audio OutputDual stereo speakers
3.5 mm audio connector (OMTP)

Viene riportato che il sensore della bussola non sia funzionante

Il tablet viene fornito con un dock che funziona da ricarica ed ha una porta USB. La porta USB serve solo per connettere eventuali USB drive o simili, non funziona come canale Adb. Inoltre il tablet e' talmente assetato di risorse che se si connette il solo cavo USB (e non l'alimentazione del dock, 12V 2A con connettore positivo al centro del jack) il dispositivo si scarica invece di caricarsi)

Alcune applicazioni gia' pronte risultano essere
  • App Discovery Project Tango 
  • Room Scanner
  • RTAB-Map (permette esportazione in ply)
  • Tango Scan View (converte i file OBJ in PLY)
  • ADF Tools
  • Tango Explorer
  • Java Point Cloud Example (dagli esempi Java)
Scansione con RTAB-Map visualizzata con MeshLab

E' possibile ancora ricompilare gli esempi ma non sono riuscito a ricompilare questo progetto


Per ottenere i permessi di root si usa TangoRoot e ChainFireSU (io non sono riuscito ad eseguire il root perche' Android continua a dire che e' TangoRoot e' una applicazione pericolosa e non la mette in esecuzione)

I dati delle immagini di profondita' vengono immagazzinati di default in formato super compresso binario proprietario ADF che risulta poco documentato. In ogni caso ci sono applicazione di terze parti che esportano in formati piu' comuni come PLY. La directory di salvataggio dei file ADF e' mutata nel tempo ma in ogni caso sembra richiedere i permessi di root


Retrain Yolo8 con rifiuti su spiaggia

Ho provato a fare il retraining di Yolo 8 con rifiuti spiaggiati usando il dataset al link sottostante  https://universe.roboflow.com/baeula...