COSC 426 Lect. 3 -AR Developer Tools

108
L 3 AR D l T l Lecture 3: AR Developer Tools Mark Billinghurst [email protected] July 2011 COSC 426: Augmented Reality COSC 426: Augmented Reality

description

The third lecture in the COSC 426 graduate class on Augmented Reality taught by Mark Billinghurst at the HIT Lab NZ. This lecture is on AR Developer tools.

Transcript of COSC 426 Lect. 3 -AR Developer Tools

Page 1: COSC 426 Lect. 3 -AR Developer Tools

L 3 AR D l T lLecture 3: AR Developer Tools

Mark Billinghurst

[email protected]

July 2011

COSC 426: Augmented RealityCOSC 426: Augmented Reality

Page 2: COSC 426 Lect. 3 -AR Developer Tools

Building Compelling AR ExperiencesBuilding Compelling AR Experiences

experiences

applications

toolstools

components Display, Tracking

Sony CSL © 2004

Page 3: COSC 426 Lect. 3 -AR Developer Tools

Low Level AR Libraries

ARToolKit Marker based trackingg

FLARToolKitFl h f ART lKFlash version of ARToolKit

SSTTSimple Spatial Template Tracking

O iraOpiraRobust Natural Feature Tracking

Page 4: COSC 426 Lect. 3 -AR Developer Tools

Wh ART lK ?What is ARToolKit?

Marker Tracking Library for AR applicationsOpen Source Multi platform (Linux Windows MacOS)Open Source, Multi-platform (Linux, Windows, MacOS)

Overlays 3D virtual objects on real markersUses single tracking marker Determines camera pose information (6 DOF)

ARToolKit Websitehttp://www.hitl.washington.edu/artoolkit/http://artoolkit.sourceforge.net/

Page 5: COSC 426 Lect. 3 -AR Developer Tools

ART lK S fARToolKit SoftwareARToolKit version: 2 65 or laterARToolKit version: 2.65 or laterCurrently two license models

Open Source (GPL): ARToolKit 2 72Open Source (GPL): ARToolKit 2.72Commercial (ARToolWorks): ARToolKit 4.0

OS Li Wi d M OS X iPh /A d idOS: Linux, Windows, MacOS X, iPhone/AndroidProgramming language: CR l d fRelated software

ARToolKit Professional: Commercial versionARToolKitPlus: Advanced versionARToolKitPlus: Advanced versionNyARToolkit: Java and C# versionFLARToolKit: Flash version

Page 6: COSC 426 Lect. 3 -AR Developer Tools

ART lKit F ilARToolKit Family

ARToolKitARToolKit NFT

ARToolKit Plus

JARToolKit (Java)

ARToolKit (Symbian)

FLARToolKit (Flash)NyToolKit- Java, C#,- Android WM

FLARToolKit (Flash)

( )Android, WM FLARManager (Flash)

Page 7: COSC 426 Lect. 3 -AR Developer Tools

ART lK ARToolKit contents

LibrarieslibAR – trackingb t ac glibARvideo – video capturinglibARgsub – image/graphics drawinglibARgsub image/graphics drawinglibARmulti – multi-marker tracking

UtilitiesUtilitiesCamera calibrationMarker training

Page 8: COSC 426 Lect. 3 -AR Developer Tools

ARToolKit Structure

ARvideo.lib

DirectShow

Three key libraries:AR32 lib ARToolKit image processing functionsAR32.lib – ARToolKit image processing functionsARgsub32.lib – ARToolKit graphics functionsARvideo lib – DirectShow video capture classARvideo.lib – DirectShow video capture class

Page 9: COSC 426 Lect. 3 -AR Developer Tools

Additional Software

To build an AR application you may need additional softwareadditional softwareHigh level rendering library

Open VRML, Open Inventor, osgART, etc

Audio LibraryAudio LibraryFmod, etc

Peripheral support

Page 10: COSC 426 Lect. 3 -AR Developer Tools

What does ARToolKit Calculate?Position of makers in the camera coordinatesPose of markers in the camera coordinatesPose of markers in the camera coordinatesOutput format

3x4 matrix format to represent the transformation matrix from the marker coordinates to the camera coordinates

Page 11: COSC 426 Lect. 3 -AR Developer Tools

C d SCoordinate Systems

Page 12: COSC 426 Lect. 3 -AR Developer Tools

Tracking Range with Pattern Size

Rule of thumb – range = 10 x pattern widthRule of thumb range 10 x pattern width

Page 13: COSC 426 Lect. 3 -AR Developer Tools

Tracking Error with Range

Page 14: COSC 426 Lect. 3 -AR Developer Tools

Tracking Error with Angle

Page 15: COSC 426 Lect. 3 -AR Developer Tools

AR Application Development

Page 16: COSC 426 Lect. 3 -AR Developer Tools

An ARToolKit ApplicationI iti li tiInitialization

Load camera and pattern parametersM i LMain Loop

Step1. Image capture and displayStep2. Marker detectionStep3. Marker identificationStep4. Getting pose informationStep5. Object Interactions/SimulationStep6. Display virtual objects

End ApplicationCamera shut down

Page 17: COSC 426 Lect. 3 -AR Developer Tools

Image capture: libARvideo

Return the pointer for captured imageARUint8 *arVideoGetImage( void );

Pixel format and byte size are defined in config hPixel format and byte size are defined in config.h#define AR_PIX_FORMAT_BGR

#define AR_PIX_SIZE 3

Page 18: COSC 426 Lect. 3 -AR Developer Tools

Graphics handling: libARgsub

Set up and clean up the graphics windowvoid argInit( ARParam *cparam double zoomvoid argInit( ARParam *cparam, double zoom,

int fullFlag, int xwin, int ywin,int hmd_flag );

void argCleanup( void );

cparam: camera parameter

zoom: zoom ratiofullFlag: 0: normal, 1: full screen modeXwin, ywin: create small window for debughmd_flag: 0: normal, 1: optical see-through mode

Page 19: COSC 426 Lect. 3 -AR Developer Tools

Graphics handling: libARgsubGo into the iterative cyclevoid argMainLoop(

void (*mouseFunc)(int btn int state int x int y)void (*mouseFunc)(int btn,int state,int x,int y),void (*keyFunc)(unsigned char key, int x, int y),void (*mainFunc)(void)

));

Swap bufferspvoid argSwapBuffers( void );

Page 20: COSC 426 Lect. 3 -AR Developer Tools

Graphics handling: libARgsubSet the window for 2D drawing

id D M d 2D( id )void argDrawMode2D( void );

Set the window for 3D drawinggvoid argDrawMode3D( void );

void argDraw3dCamera( int xwin, int ywin );

Display imageid Di I ( ARUi t8 *ivoid argDispImage( ARUint8 *image,

int xwin, int ywin );

Page 21: COSC 426 Lect. 3 -AR Developer Tools

Sample ARToolKit Applications

Ex. 1: Simple video displayEx. 2: Detecting a markerEx. 3: Using patternE 4 G tti 3D i f tiEx. 4: Getting a 3D informationEx 5: Virtual object overlayEx. 5: Virtual object overlay

Page 22: COSC 426 Lect. 3 -AR Developer Tools

Ex 1: Simple Video Display

Program : sample1.cKey points

Loop structureLoop structureVideo image handlingCamera parameter handlingWindow setupWindow setupMouse and keyboard handling

Page 23: COSC 426 Lect. 3 -AR Developer Tools

Sample1.c Main Functionmain(){{

init();argMainLoop( mouseEvent, keyEvent,

mainLoop);a oop);}

Page 24: COSC 426 Lect. 3 -AR Developer Tools

Sample1.c - mainLoop Functionif( dataPtr = (ARUint8 *)arVideoGetImage()) == NULL ) {arVideoGetImage()) NULL ) {

arUtilSleep(2); return;return;

}D M d 2D()argDrawMode2D();

argDispImage(dataPtr, 0, 0 ); arVideoCapNext(); argSwapBuffers();

Page 25: COSC 426 Lect. 3 -AR Developer Tools

Sample1.c – video initializationC fi th id i tConfigure the video inputvconf = <video configuration string>

Start video capturearVideoCapStart();

In init(), open the videoarVideoOpen( vconf );arVideoInqSize(&xsize, &ysize);

When finished, close the video pathWhen finished, close the video patharVideoCapStop();arVideoClose();

Page 26: COSC 426 Lect. 3 -AR Developer Tools

Changing Image Size

For input capturevconf = “videoWidth=320,videoHeight=240";

Note – the camera must support this image size

For displayargInit( &cparam 1 5 0 0 0 0 );argInit( &cparam, 1.5, 0, 0, 0, 0 );

Th d f d l The second parameter means zoom ratio for display image size related to input image.

Page 27: COSC 426 Lect. 3 -AR Developer Tools

Ex. 2: Detecting a MarkerP l 2Program : sample2.cKey pointsy p

Threshold valueImportant external variablesImportant external variablesarDebug – keep thresholded imagearImage – pointer for thresholded imagearImage – pointer for thresholded imagearImageProcMode – use 50% image for image processingprocessing

- AR_IMAGE_PROC_IN_FULL - AR IMAGE PROC IN HALFAR_IMAGE_PROC_IN_HALF

Page 28: COSC 426 Lect. 3 -AR Developer Tools

Sample2.c – marker detection

/* detect the markers in the video frame */ if( D t tM k (d t Pt th hif(arDetectMarker(dataPtr, thresh, &marker_info, &marker_num) < 0 ) {l ()cleanup();

exit(0);}for( i = 0; i < marker_num; i++ ) {argDrawSquare(marker_info[i].vertex,0,0);

}

Page 29: COSC 426 Lect. 3 -AR Developer Tools

Sample2.c – marker_info structuretypedef struct {

int area; int id; int dir; double cf; double pos[2]; double line[4][3]; double vertex[4][2];

} ARMarkerInfo;

Page 30: COSC 426 Lect. 3 -AR Developer Tools

Ex. 3: Using a Pattern

Program : sample3.cKey pointsKey points

Pattern files loadingStructure of marker information

- Region features- Pattern Id, direction- Certainty factor

Marker identificationMarker identification

Page 31: COSC 426 Lect. 3 -AR Developer Tools

Making a pattern templateU f ili Use of utility program:

mk_patt.exeShow the patternShow the patternPut the corner of red line segments on the left-top segments on the left top vertex of the markerPattern stored as a template in a file1:2:1 ratio determines the

tt i dpattern region used

Page 32: COSC 426 Lect. 3 -AR Developer Tools

Sample3.c – Pattern File Loading

int patt_id;char *patt name = “Data/kanjiPatt”char patt_name Data/kanjiPatt

/* load pattern file *// load pattern file /if(patt_id=arLoadPatt (patt_name) < 0){{

printf ("Pattern file load error !! \n"); exit(0);exit(0);

}

Page 33: COSC 426 Lect. 3 -AR Developer Tools

Checking for known patterns/* check for known patterns */k = -1;for( i = 0; i < marker num; i++ ) {for( i = 0; i < marker_num; i++ ) {

if( marker_info[i].id == patt_id) {/* you've found a pattern */printf("Found pattern: %d \n",patt_id);if( k == -1 ) k = i;elseelse /* make sure you have the best pattern (highest confidence factor) */if( k i f [k] f k i f [i] f )if( marker_info[k].cf < marker_info[i].cf )

k = i;}

}

Page 34: COSC 426 Lect. 3 -AR Developer Tools

Ex. 4 – Getting 3D information

Program : sample4.cKey points

Definition of a real markerTransformation matrixTransformation matrix- Rotation component

T l ti t- Translation component

Page 35: COSC 426 Lect. 3 -AR Developer Tools

Sample4.c – Transformation matrix

double marker_center[2] = {0.0, 0.0};double marker_width = 80.0;double marker trans[3][4];_

arGetTransMat(&marker info[i]arGetTransMat(&marker_info[i], marker_center, marker_width, marker trans);marker_trans);

Page 36: COSC 426 Lect. 3 -AR Developer Tools

Finding the Camera PositionThis function sets transformation matrix from marker

to camera into marker_trans[3][4]._ [ ][ ]arGetTransMat(&marker_info[k], marker_center,

marker_width, marker_trans);

You can see the position information in the values of marker trans[3][4]marker_trans[3][4].

Xpos = marker_trans[0][3];Ypos = marker_trans[1][3];Zpos = marker_trans[2][3];

Page 37: COSC 426 Lect. 3 -AR Developer Tools

ARToolKit Coordinate Frame

Page 38: COSC 426 Lect. 3 -AR Developer Tools

Ex. 5- Virtual Object Display

Program : sample5.cKey points

OpenGL parameter settingOpenGL parameter settingSetup of projection matrixSetup of modelview matrix

Page 39: COSC 426 Lect. 3 -AR Developer Tools

Appending your own OpenGL code

Set the camera parameters to OpenGL Projection matrix.argDrawMode3D();gargDraw3dCamera( 0, 0 );

Set the transformation matrix from the marker to the camera to Set the transformation matrix from the marker to the camera to the OpenGL ModelView matrix.argConvGlpara(marker_trans, gl_para);glMatrixMode(GL_MODELVIEW);glLoadMatrixd( gl_para );

After calling these functions, your OpenGL objects are drawn in the real marker coordinates.

Page 40: COSC 426 Lect. 3 -AR Developer Tools

3D CG Model RenderingARToolKit does not have a function to handle 3D CG models3D CG models.3rd party CG rendering software should be employed.

OpenVRMLpOpenSceneGraphetcetc

Page 41: COSC 426 Lect. 3 -AR Developer Tools
Page 42: COSC 426 Lect. 3 -AR Developer Tools

Loading Multiple Patterns

Sample File: LoadMulti.cUses object c to load Uses object.c to load

Object Structuret d f t t {typedef struct { char name[256]; int id; int visible;double marker_coord[4][2];double trans[3][4];double trans[3][4];double marker_width;double marker_center[2];

} ObjectData_T;

Page 43: COSC 426 Lect. 3 -AR Developer Tools

Finding Multiple Transforms

Create object listObjectData T *object;ObjectData_T object;

Read in objects - in init( )read_ObjData( char *name, int *objectnum );

Find Transform in mainLoop( )Find Transform – in mainLoop( )for( i = 0; i < objectnum; i++ ) {

Ch k tt..Check patterns..Find transforms for each marker}}

Page 44: COSC 426 Lect. 3 -AR Developer Tools

Drawing Multiple Objects

Send the object list to the draw functiondraw( object, objectnum );

Draw each object individuallyj yfor( i = 0; i < objectnum; i++ ) {

if( object[i].visible == 0 ) continue;( j [ ] ) ;argConvGlpara(object[i].trans, gl_para);draw object( object[i].id, gl para);draw_object( object[i].id, gl_para);

}

Page 45: COSC 426 Lect. 3 -AR Developer Tools

Limitations of ARToolKitPartial occlusions cause tracking failureAffected by lighting and shadowsAffected by lighting and shadowsTracking range depends on marker sizeP f d d b f kPerformance depends on number of markers

cf artTag, ARToolKitPlusPose accuracy depends on distance to markerPose accuracy depends on angle to markery p g

Page 46: COSC 426 Lect. 3 -AR Developer Tools

ARToolKit in the World

H d d f jHundreds of projectsLarge research communityg y

Page 47: COSC 426 Lect. 3 -AR Developer Tools

FLARToolKitFlash AS3 Version of the ARToolKit (was ported from NyARToolkit the Java Version of the ARToolkit)

enables augmented reality on the Browseruses Papervision3D for as 3D Engineavailable at http://saqoosha.net/dual license, GPL and commercial license

Page 48: COSC 426 Lect. 3 -AR Developer Tools

AR Application Components

Adobe Flash

Papervision 3D

FLARToolkit

Page 49: COSC 426 Lect. 3 -AR Developer Tools

Source PackagesO i i l“ FLART lki„Original“ FLARToolkit (Libspark, Saqoosha)

(http://www.libspark.org/svn/as3/FLARToolKit/trunk/ )

Start-up-guidesSaqoosha (http://saqoosha.net/en/flartoolkit/start-up-guide/ )

Miko Haapoja (http://www.mikkoh.com/blog/?p=182 )

Frameworks“„FrameworksSquidder MultipleMarker – Example (http://www.squidder.com/2009/03/06/flar-how-to-multiple-instances-of-multiple-

k /markers/ )

FLARManager (http://words.transmote.com/wp/flarmanager/ )

Page 50: COSC 426 Lect. 3 -AR Developer Tools

Papervision 3Dhttp://www.papervision3d.org/Flash-based 3D-EngineFlash based 3D EngineSupports

import of 3D Modelstexturingganimationscene graphscene graph

alternatives: Away3d, Sandy,…

Page 51: COSC 426 Lect. 3 -AR Developer Tools

Papervision ExamplesRed Bull|Flugtage Flight Labhttp://www.redbull.com/flightlab/#/Game/TEMP_0

Barcinski JeanJean | 3D PortfolioBarcinski JeanJean | 3D Portfoliohttp://www.barcinski-jeanjean.com/

more cool papervision websiteshttp://blog.papervision3d.org/2009/04/24/2009-webby-awards-nominees/

Page 52: COSC 426 Lect. 3 -AR Developer Tools

AR Tools

Page 53: COSC 426 Lect. 3 -AR Developer Tools

B ildi C lli AR E iBuilding Compelling AR Experiences

experiences

applications

tools Authoringtools Authoring

components Tracking, Display

Sony CSL © 2004

Page 54: COSC 426 Lect. 3 -AR Developer Tools

AR AuthoringS ft Lib iSoftware Libraries

osgART, Studierstube, MXRToolKitgPlug-ins to existing software

DART (M di Di ) ARDART (Macromedia Director), mARxStand Alone

AMIRE, ComposAR, etcNext Generation

iaTAR (Tangible AR)iaTAR (Tangible AR)

Page 55: COSC 426 Lect. 3 -AR Developer Tools

mARx Plug-in

3D Studio Max Plug-inCan model and view AR content at the same time

Page 56: COSC 426 Lect. 3 -AR Developer Tools

BuildAR

http://www.buildar.co.nz/Stand alone applicationppVisual interface for AR model viewing application Enables non-programmers to build AR scenesEnables non-programmers to build AR scenes

Page 57: COSC 426 Lect. 3 -AR Developer Tools

ImageTclARAdds AR components to ImageTcl

http://metlab.cse.msu.edu/imagetclar/Modular Library (Scripting, Tcl)Supports several tracking systems (vision, magnetic, inertial)Easy to learn but little support, small community

Page 58: COSC 426 Lect. 3 -AR Developer Tools

DARTDesigners AR Toolkit

http://www cc gatech edu/dart/http://www.cc.gatech.edu/dart/AR plug-in for Macromedia DirectorD l d f d iDeveloped for designersVisual programmingScripting interface

Page 59: COSC 426 Lect. 3 -AR Developer Tools

StudierstubeComplete authoring toolComplete authoring tool

http://studierstube.icg.tu-graz.ac.at/Framework (Low Level Programming, C++)Modularity, Extensibility, Scalability, HeterogeneityModularity, Extensibility, Scalability, HeterogeneitySupport for wide range of trackers, displays, input

Page 60: COSC 426 Lect. 3 -AR Developer Tools

Metaio UnifEye SDKComplete commercial authoring platform

http://www.metaio.com/products/p pOffers viewer and editor toolsVisual interface and low level SDKVisual interface and low level SDKDelivery on desktop or mobile platforms

Page 61: COSC 426 Lect. 3 -AR Developer Tools

OSGART Programming LibraryIntegration of ARToolKit with a High-Level Rendering Engine (OpenSceneGraph)g g ( p p )OSGART= OpenSceneGraph + ARToolKit

Supporting Geometric + Photometric Registrationpp g g

Page 62: COSC 426 Lect. 3 -AR Developer Tools

osgART:Features

C++ (but also Python Lua etc)C++ (but also Python, Lua, etc).Multiple Video Input supports:

Direct (Firewire/USB Camera), Files, Network by ARvideo, PtGrey, CVCam, VideoWrapper, etc.

Benefits of Open Scene Graph Rendering Engine Plug-ins etcRendering Engine, Plug ins, etc

Page 63: COSC 426 Lect. 3 -AR Developer Tools

More Libraries

JARToolKitMRToolKit MXRToolKit ARLib OpenVIDIAMRToolKit, MXRToolKit, ARLib, OpenVIDIADWARF, Goblin XNAAMIRED’F iD’Fusion

Page 64: COSC 426 Lect. 3 -AR Developer Tools

Advanced Authoring: iaTAR (Lee 2004)

I i AR A th iImmersive AR AuthoringUsing real objects to create AR applications

Page 65: COSC 426 Lect. 3 -AR Developer Tools

osgART

Developing Augmented Reality Developing Augmented Reality Applications with osgART

Page 66: COSC 426 Lect. 3 -AR Developer Tools

What is a Scene Graph?Tree-like structure for organising a virtual worldTree-like structure for organising a virtual world

e.g. VRML

Hi h f d th t d fiHierarchy of nodes that define:Groups (and Switches, Sequences etc…)TransformationsProjectionsGeometry…

And states and attributes that define:Materials and texturesLighting and blending…

Page 67: COSC 426 Lect. 3 -AR Developer Tools

Scene Graph Example

Page 68: COSC 426 Lect. 3 -AR Developer Tools

Benefits of a Scene GraphP fPerformance

Structuring data facilitates optimizationoptimization

- Culling, state management, etc…

AbstractionAbstractionUnderlying graphics pipeline is hiddenLow-level programming (“how do I display this?”) replaced with high-l l t (“ h t d I t t

Image: sgi

level concepts (“what do I want to display?”)

Page 69: COSC 426 Lect. 3 -AR Developer Tools

About Open Scene Graphhttp://www.openscenegraph.org/Open-source scene graph implementationBased on OpenGLObject-oriented C++ following design pattern principlesUsed for simulation, games, research, and industrial projectsActive development community

Maintained by Robert Osfield~2000 mailing list subscribersDocumentation project: www osgbooks comDocumentation project: www.osgbooks.com

Uses the OSG Public License (similar to LGPL)

Page 70: COSC 426 Lect. 3 -AR Developer Tools

About Open Scene Graph (2)

Pirates of the XXI Century Flightgear SCANeR

3DVRII Research Institute EOR VRlab Umeå University3DVRII Research Institute EOR VRlab Umeå University

Page 71: COSC 426 Lect. 3 -AR Developer Tools

Open Scene Graph FeaturesPlugins for loading and saving

3D: 3D Studio (.3ds), OpenFlight (.flt), Wavefront (.obj)…2D: .png, .jpg, .bmp, QuickTime movies

NodeKits to extend functionalityye.g. osgShadow

Cross-platform support for:Cross platform support for:Window management (osgViewer)Threading (OpenThreads)Threading (OpenThreads)

Page 72: COSC 426 Lect. 3 -AR Developer Tools

Open Scene Graph Architecture

Inter-operability with other environments,

e.g. Python

Plugins read and NodeKits extend Plugins read and write 2D image and 3D model files

core functionality, exposing higher-level node types

Scene graph and rendering

functionalityfunctionality

Page 73: COSC 426 Lect. 3 -AR Developer Tools

Some Open Scene Graph Demos

osgviewer osgmotionblur osgparticle

You may want to get the OSG data package:Via SVN: http://www.openscenegraph.org/svn/osg/OpenSceneGraph-Data/trunk

osgreflect osgdistortion osgfxbrowser

Page 74: COSC 426 Lect. 3 -AR Developer Tools

Learning OSGCheck out the Quick Start Guide

Free PDF download at http://osgbooks.com/, Physical copy $13US

J i h ili li Join the mailing list: http://www.openscenegraph.org/projects/osg/wiki/MailingLists

Browse the website: http://www.openscenegraph.org/projects/osg

Use the forum: http://forum.openscenegraph.orgp p g p g

Study the examplesRead the source?

Page 75: COSC 426 Lect. 3 -AR Developer Tools

ARTosgART

Page 76: COSC 426 Lect. 3 -AR Developer Tools

What is osgART?

osgART adds AR to Open Scene GraphFurther developed and enhanced by:Further developed and enhanced by:

Julian LooserH S hHartmut SeichterRaphael Grasset

Current version 2.0, Open Sourcehttp://www osgart orghttp://www.osgart.org

Page 77: COSC 426 Lect. 3 -AR Developer Tools

osgART Approach: Basic Scene Graph

Root

T f0.988 -0.031 -0.145 0 -0.048 0.857 -0.512 0 [ ]Transform 0.141 0.513 0.846 0 10.939 29.859 -226.733 1 [ ]

3D ObjectTo add Video see-through AR:

Integrate live videogApply correct projection matrixUpdate tracked transformations in realtime

Page 78: COSC 426 Lect. 3 -AR Developer Tools

osgART Approach: AR Scene Graph

Root

Transform

3D Object

Page 79: COSC 426 Lect. 3 -AR Developer Tools

osgART Approach: AR Scene GraphRoot

Transform

VirtualCamera

VideoLayer

Video3D Obj

Layer

Geode 3D Object

Page 80: COSC 426 Lect. 3 -AR Developer Tools

osgART Approach: AR Scene GraphRoot

Projection matrix fromtracker calibration

Orthographic

Transform

VirtualCamera

Transformation matrix updated from marker tracking in realtimeVideo

Layer

Orthographic projection

Video3D Obj

LayerFull-screen quad with live texture updated from Video source

Geode 3D ObjectVideo source

Page 81: COSC 426 Lect. 3 -AR Developer Tools

osgART Approach: AR Scene GraphRoot

Projection matrix fromtracker calibration

Orthographic

Transform

VirtualCamera

Transformation matrix updated from marker tracking in realtimeVideo

Layer

Orthographic projection

Video3D Obj

LayerFull-screen quad with live texture updated from Video source

Geode 3D ObjectVideo source

Page 82: COSC 426 Lect. 3 -AR Developer Tools

osgART ArchitectureLike any video see-through AR library, osgART requires video input and tracking capabilities.

AVideo Sourcee g DirectShow A

R Lib

Applica

e.g. DirectShow

rary

ationTracking Module(libAR.lib)

Page 83: COSC 426 Lect. 3 -AR Developer Tools

osgART ArchitectureosgART uses a plugin architecture so that video sources and tracking technologies can be plugged in as necessary

OpenCVVideo

V

OpenCVVideo -VidCapture -CMU1394 -

PointGrey SDK -VidereDesign -

V d W

os

App

Video Plugin

VideoWrapper -VideoInput -

VideoSource -DSVL -

Intranel RTSP - sgART

plication

TrackeARToolKit4 -

ARToolkitPlus - ner Plugin

MXRToolKit -ARLib -

bazAR (work in progress) -ARTag (work in progress) -

Page 84: COSC 426 Lect. 3 -AR Developer Tools

Basic osgART TutorialD l ki ART li ti f t hDevelop a working osgART application from scratch.Use ARToolKit 2.72 library for tracking and video capturecapture

Page 85: COSC 426 Lect. 3 -AR Developer Tools

osgART Tutorial 1: Basic OSG ViewerStart with the standard Open Scene Graph ViewerWe will modify this to do AR!y

Page 86: COSC 426 Lect. 3 -AR Developer Tools

osgART Tutorial 1: Basic OSG Viewer

The basic osgViewer…#include <osgViewer/Viewer>#include <osgViewer/ViewerEventHandlers>#include <osgViewer/ViewerEventHandlers>

int main(int argc, char* argv[]) {

// Create a viewerosgViewer::Viewer viewer;

// Create a root nodeosg::ref_ptr<osg::Group> root = new osg::Group;

// Attach root node to the viewerviewer.setSceneData(root.get());g

// Add relevant event handlers to the viewerviewer.addEventHandler(new osgViewer::StatsHandler);viewer.addEventHandler(new osgViewer::WindowSizeHandler);viewer.addEventHandler(new osgViewer::ThreadingHandler);viewer addEventHandler(new osgViewer::HelpHandler);viewer.addEventHandler(new osgViewer::HelpHandler);

// Run the viewer and exit the program when the viewer is closedreturn viewer.run();

}

Page 87: COSC 426 Lect. 3 -AR Developer Tools

osgART Tutorial 2: Adding VideoAdd a video plugin

Load, configure, start video capture…

Add a video backgroundCreate, link to video, add to scene-graphg p

Page 88: COSC 426 Lect. 3 -AR Developer Tools

osgART Tutorial 2: Adding VideoNew code to load and configure a Video Plugin:

// Preload the video and tracker// Preload the video and trackerint _video_id = osgART::PluginManager::getInstance()->load("osgart_video_artoolkit2");

// Load a video plugin.osg::ref_ptr<osgART::Video> video =

dynamic_cast<osgART::Video*>(osgART::PluginManager::getInstance()->get(_video_id));

// Check if an instance of the video stream could be createdif (!video.valid()) {

// Without video an AR application can not work. Quit if none found.osg::notify(osg::FATAL) << "Could not initialize video plugin!" << std::endl;exit(-1);

}

// Open the video. This will not yet start the video stream but will// get information about the format of the video which is essential// for the connected tracker.video->open();video->open();

Page 89: COSC 426 Lect. 3 -AR Developer Tools

osgART Tutorial 2: Adding VideoNew code to add a live video background

osg::Group* createImageBackground(osg::Image* video) {osgART::VideoLayer* _layer = new osgART::VideoLayer();_layer->setSize(*video);osgART::VideoGeode* _geode = new osgART::VideoGeode(osgART::VideoGeode::USE_TEXTURE_2D, video);addTexturedQuad(*_geode, video->s(), video->t());_layer->addChild(_geode);return _layer;

}

osg::ref_ptr<osg::Group> videoBackground = createImageBackground(video.get());

In the main function…

videoBackground->getOrCreateStateSet()->setRenderBinDetails(0, "RenderBin");

root->addChild(videoBackground.get());video->start();

Page 90: COSC 426 Lect. 3 -AR Developer Tools

osgART Tutorial 3: TrackingAdd T k l Add a Tracker plugin

Load, configure, link to videoAdd a Marker to track

Load activateLoad, activateTracked node

C li k i h k i ki llb kCreate, link with marker via tracking callbacksPrint out the tracking data

Page 91: COSC 426 Lect. 3 -AR Developer Tools

osgART Tutorial 3: TrackingLoad a tracking plugin and associate it with the video plugin

int _tracker_id = osgART::PluginManager::getInstance()->load("osgart_tracker_artoolkit2");

osg::ref_ptr<osgART::Tracker> tracker = dynamic_cast<osgART::Tracker*>(osgART::PluginManager::getInstance()->get(_tracker_id));

oa a t ac g p ug a assoc ate t w t t e v eo p ug

if (!tracker.valid()) {// Without tracker an AR application can not work. Quit if none found.osg::notify(osg::FATAL) << "Could not initialize tracker plugin!" << std::endl;exit(-1);

}

// get the tracker calibration objectosg::ref_ptr<osgART::Calibration> calibration = tracker->getOrCreateCalibration();

// load a calibration fileif (!calibration->load("data/camera para dat"))if (!calibration->load( data/camera_para.dat )) {

// the calibration file was non-existing or couldnt be loadedosg::notify(osg::FATAL) << "Non existing or incompatible calibration file" << std::endl;exit(-1);

}

// set the image source for the trackertracker->setImage(video.get());

osgART::TrackerCallback::addOrSet(root.get(), tracker.get());

// create the virtual camera and add it to the sceneosg::ref_ptr<osg::Camera> cam = calibration->createCamera();root->addChild(cam.get());

Page 92: COSC 426 Lect. 3 -AR Developer Tools

osgART Tutorial 3: TrackingLoad a marker and activate itLoad a marker and activate itAssociate it with a transformation node (via event callbacks)Add the transformation node to the virtual camera node

osg::ref_ptr<osgART::Marker> marker = tracker->addMarker("single;data/patt.hiro;80;0;0");if (!marker.valid()) {

// Without marker an AR application can not work. Quit if none found.osg::notify(osg::FATAL) << "Could not add marker!" << std::endl;osg::notify(osg::FATAL) << "Could not add marker!" << std::endl;exit(-1);

}

marker->setActive(true);

osg::ref_ptr<osg::MatrixTransform> arTransform = new osg::MatrixTransform();osgART::attachDefaultEventCallbacks(arTransform.get(), marker.get());cam->addChild(arTransform.get());

Add a debug callback to print out information about the tracked marker

osgART::addEventCallback(arTransform.get(), new osgART::MarkerDebugCallback(marker.get()));

Add a debug callback to print out information about the tracked marker

Page 93: COSC 426 Lect. 3 -AR Developer Tools

osgART Tutorial 3: Tracking

Tracking information is goutput to console

Page 94: COSC 426 Lect. 3 -AR Developer Tools

osgART Tutorial 4: Adding ContentN t the trackin data t se!Now put the tracking data to use!Add content to the tracked transformBasic cube code

arTransform->addChild(osgART::testCube());arTransform->getOrCreateStateSet()->setRenderBinDetails(100, "RenderBin");

Page 95: COSC 426 Lect. 3 -AR Developer Tools

osgART Tutorial 5: Adding 3D ModelO S G h l d 3D f di lOpen Scene Graph can load some 3D formats directly:

e.g. Wavefront (.obj), OpenFlight (.flt), 3D Studio (.3ds), COLLADAOthers need to be convertedOthers need to be converted

Support for some formats is much better than otherse.g. OpenFlight good, 3ds hit and miss.

Recommend native .osg and .ive formats.osg – ASCII representation of scene graphive Binary OSG file Can contain hold textures.ive – Binary OSG file. Can contain hold textures.

osgExp : Exporter for 3DS Max is a good choicehttp://sourceforge.net/projects/osgmaxexp

Otherwise .3ds files from TurboSquid can work

Page 96: COSC 426 Lect. 3 -AR Developer Tools

osgART Tutorial 5: Adding 3D Model Replace the simple cube with a 3D model

std::string filename = "media/hollow_cube.osg";arTransform->addChild(osgDB::readNodeFile(filename));

Replace the simple cube with a 3D modelModels are loaded using the osgDB::readNodeFile() function

arTransform >addChild(osgDB::readNodeFile(filename));

3D St di M

Export to .osg

Note: Scale is important Units are in mm

3D Studio Max

osgARTNote: Scale is important. Units are in mm.

Page 97: COSC 426 Lect. 3 -AR Developer Tools

osgART Tutorial 6: Multiple Markers

Repeat the process so far to track more than one marker simultaneouslyy

Page 98: COSC 426 Lect. 3 -AR Developer Tools

osgART Tutorial 6: Multiple MarkersR h f k h k

Load and activate two markers

Repeat the process so far to track more than one marker

Load and activate two markersosg::ref_ptr<osgART::Marker> markerA = tracker->addMarker("single;data/patt.hiro;80;0;0");markerA->setActive(true);

osg::ref_ptr<osgART::Marker> markerB = tracker->addMarker("single;data/patt.kanji;80;0;0");_markerB->setActive(true);

Create two transformations, attach callbacks, and add models

osg::ref_ptr<osg::MatrixTransform> arTransformA = new osg::MatrixTransform();osgART::attachDefaultEventCallbacks(arTransformA.get(), markerA.get());arTransformA->addChild(osgDB::readNodeFile("media/hitl_logo.osg"));arTransformA->getOrCreateStateSet()->setRenderBinDetails(100, "RenderBin");cam->addChild(arTransformA.get());

osg::ref_ptr<osg::MatrixTransform> arTransformB = new osg::MatrixTransform();osgART::attachDefaultEventCallbacks(arTransformB.get(), markerB.get());arTransformB->addChild(osgDB::readNodeFile("media/gist_logo.osg"));arTransformB->getOrCreateStateSet()->setRenderBinDetails(100, "RenderBin");cam->addChild(arTransformB.get());

Page 99: COSC 426 Lect. 3 -AR Developer Tools

osgART Tutorial 6: Multiple Markers

Page 100: COSC 426 Lect. 3 -AR Developer Tools

Basic osgART Tutorial: Summary

Standard OSG Viewer Addition of Video Addition of Tracking

Addition of basic 3D graphics

Addition of 3D Model Multiple Markersg p

Page 101: COSC 426 Lect. 3 -AR Developer Tools

FLARMFLARManagerhttp://transmote com/flarhttp://transmote.com/flar

Page 102: COSC 426 Lect. 3 -AR Developer Tools

FLARManager:

Makes building FLARToolkit apps easierIs open-source, with a free and commercial licenseIs open source, with a free and commercial licenseIs designed to allow exploration of both augmented reality and alternative controllersreality and alternative controllersWas initiated by Eric Socolofsky, developed with

ib i f FLART lki icontributions from FLARToolkit communityDecouples FLARToolkit from Papervision3DConfiguration without recompilation, via xml config

Page 103: COSC 426 Lect. 3 -AR Developer Tools

FLARManager: features

Gives more control over application environmentProvides multiple input optionsRobust multiple marker managementRobust multiple marker managementSupports multiple 3D frameworksOff f f i i iOffers features for optimizationAllows for customization

Page 104: COSC 426 Lect. 3 -AR Developer Tools

Resources

Page 105: COSC 426 Lect. 3 -AR Developer Tools

Websites

Software Downloadhttp://artoolkit sourceforge net/http://artoolkit.sourceforge.net/

ARToolKit Documentationhttp://www.hitl.washington.edu/artoolkit/

ARToolKit ForumARToolKit Forumhttp://www.hitlabnz.org/wiki/Forum

ARToolworks Inchttp://www.artoolworks.com/p

Page 106: COSC 426 Lect. 3 -AR Developer Tools

ARToolKit PlusARToolKit Plushttp://studierstube.icg.tu-

t/h dh ld / t lkit l hgraz.ac.at/handheld_ar/artoolkitplus.php

osgARThttp://www.osgart.org/

FLARToolKitFLARToolKithttp://www.libspark.org/wiki/saqoosha/FLARToolKit/

FLARManagerhttp://words transmote com/wp/flarmanager/http://words.transmote.com/wp/flarmanager/

Page 107: COSC 426 Lect. 3 -AR Developer Tools

BooksI E h O S Interactive Environments with Open-Source Software: 3D Walkthroughs and Augmented R li f A hi i h Bl d 2 43 DART Reality for Architects with Blender 2.43, DART 3.0 and ARToolKit 2.72 by Wolfgang Höhl

A Hitchhikers Guide to Virtual Reality by Karen y yMcMenemy and Stuart Ferguson

Page 108: COSC 426 Lect. 3 -AR Developer Tools

More Information

M k Billi h t• Mark Billinghurst– [email protected]

• Websiteshi l b– www.hitlabnz.org