Applicazioni Augmented-Reality ready su piattaforma Android
Ivano Brogonzoli
Mi presento...
Ivano Brogonzoli
Mobile Sw Engineer
Funambol http://www.funambol.com
Open source mobile cloud sync for billions of connected devices!! Sync' Em All!!
IntroduzioneDefinizione di AR• Da http://it.wikipedia.org/wiki/Augmented_reality
La realtà aumentata (in inglese augmented reality, abbreviato AR) è la sovrapposizione di livelli informativi (elementi virtuali e multimediali, dati geolocalizzati etc) all'esperienza reale di tutti i giorni. Gli elementi che "aumentano" la realtà possono essere aggiunti attraverso un device mobile, come un telefonino di ultima generazione, (es. l'iPhone 3GS o un telefono Android), con l'uso di un pc dotato di webcam, con dispositivi di visione (es. occhiali VR), di ascolto (es. auricolari) e di manipolazione (es. guanti VR) che aggiungono informazioni multimediali alla realtà già percepita "in sè". Il sovrapporsi di elementii reali e virtuali crea una "Mixed Reality".
IntroduzioneApplicazioni AR• Device di riferimento:
– iPhone– Symbian– Android– Blackberry
• Applicazioni:– AR Browser (Layar - Wikitude) – Social (TagWhat – Google Latitude)– Giochi - Intrattenimento (SpecTrack – Zombie)– Advertising
• Frameworks:– Wikitude (http://www.wikitude.org/)– FLAR – Junaio (http://www.junaio.com/)
IntroduzionePiattaforma Android
• Android SDK:– Piattaforma in espansione con un framework aperto– Facilità di sviluppo e integrazione con le funzionalità del
sistema
• Telecamera
• Google Add-ons – GPS, Google Maps, Location …
• Sensori– Accelerometro, bussola, ...
TelecameraFrame preview 1/4
• Gestione del flusso di frame su una SurfaceView
• La superficie stessa implementa
android.view.SurfaceHolder.Callback che permette di controllare il display di riferimento e gli stati della superficie (created-changed-destroyed)
• L'oggetto holder controlla ioltre la corretta apertura e chiusura dell'interfaccia sul sensore della telecamera
CameraSurfacePreview
SurfaceHolder.Callback
SurfaceView
TelecameraFrame preview 2/4
TelecameraFrame preview 3/4
TelecameraFrame preview 4/4
TelecameraView Overlay 1/3
• Costruzione di una View e degli oggetti da visualizzare sulla preview della telecamera
• Aggiunta della vista allo z-stack
CameraSurfacePreview
View 1
View n
TelecameraView Overlay 2/3
TelecameraView Overlay 3/3
DEMO
TelecameraManipolare i frames
Occorre utilizzare l'interfaccia
android.hardware.Camera.PreviewCallback
e implementare il metodo onPreviewFrame(byte[] b, Camera c);
CameraSurfacePreview
SurfaceHolder.Callback
SurfaceView
PreviewCallback
TelecameraSuperfici 3D
• Supporto OpenGL ES 1.0
• android.opengl.GLSurfaceView
• Demo at:
http://www.cyrket.com/p/android/de.offis.magic.core/
Telecamera: Performance e stabilità• Performance e Impatto sulla Batteria
– Risoluzione, frequenza e spazio dei colori
– Uso di metodi hidden (Android 2.1) per il miglioramento delle performance (fps) tramite reflection e la diminuzione delle chiamate gc(). Si tratta di invocare il metodo hidden della classe android.hardware.Camera chiamato:
setPreviewCallbackWithBuffer(...)
http://www.users.muohio.edu/brinkmwj/android/
Google Maps Add-onLocation e Mappe• Google Add On per la localizzazione
(firma e chiave di accesso)– Activity dedicata:
com.google.android.maps.MapActivity
– Coordinate posizionali com.google.android.maps.GeoPoint
– Vista dedicata: com.google.android.maps.MapView controller associato:com.google.android.maps.MapControll
er
• Sono permessi Overlay di oggetti di tipo:– com.google.android.maps.Overlay
• La piattaforma Android è responsabile di GPS e del lancio di eventi posizionali
MapActivity
MapView GeoPoint
OverlayMapController
Google add on
Android LocationLocationListener
LocationManager Location
Sensore GPS: Location
Package android.location.LocationListener
LocationListener
GPSListener
Google Maps Add-onMapView 1/3• Controllo puntuale tramite
com.google.android.maps.MapController• Possibilità di visualizzare diversi contesti (Satellite...)• Funazionalità di Zoom• Capacità di gestire Overlay• L'activity che la crea deve estendere
com.google.android.maps.MapActivity– Accede ai Google Maps Service – Necessita permessi INTERNET– firma di deployment o debug nel codice o nel layout della vista– L'elemento “application” del manifest file deve dichiarare<uses-library android:name="com.google.android.maps" />
Google Maps Add-onMapView 2/3
Google Maps Add-onMapView 3/3
Location ed Eventi posizionali
• Alert di sistema:– Da android.location.LocationManager:addProximityAlert (double latitude, double longitude, float
radius, long expiration, PendingIntent intent)
• Alternativa: Calcolo puntuale della distanza con formule note:– Haversine;– Vincenty (più precisa);
SensoriBussola• Azimuth: Scostamento dal nord (Sway)• Variazione intorno a y (Surge)• Variazione intorno a z (Heave)
Y
X
0° → 360°
-45° → 45°Z
-45° → 45°
SensoriAccelerometro• Accelerazione x (Yaw)• Accelerazione y (Pitch)• Accelerazione z (Roll)
Y
X
Z
Sensori
• Elaboriazione dei valori rilevati (android.hardware.SensorEventListener)
SensorEventListener
OrientationListener
Sensori
• Attivazione (package android.hardware):
SensoriPerformance e stabilità
• Consumo cospicuo di batteria• Attivazione solo durante l'effettivo utilizzo• Limitazione della frequenza di campionamento• Rumore
Mettiamo tutto insieme
DEMO
Links utili
• Guida Android ufficialehttp://developer.android.com/guide/index.html
• - GPS Location and Mapshttp://www.dymsoft.com/2009/11/calculate-distance-between-
two-geolocations-in-android/
• Games alfrescohttp://gamesalfresco.com/
• Il mio bloghttp://superivomania.blogspot.com/
… Grazie dell'attenzione!
Q & A
Top Related