09:16 
1 
fb.com/RVA.BR 
pt.slideshare.net/christophercerqueira 
christophercerqueira@gmail.com 
fb.com/RVA.BR
Using AR/CR, with markers and others, to control and inspect hardware with ARDUINO based interface. 
Utilização de Realida...
Agenda: 
•Conceitos e openFrameworks ~60m 
•Estado da prática no INPE 
•Criando o primeiro programa em openFrameworks ~20m...
Exemplo prático que vai ser montado 
•Vamos controlar o Arduino: 
•Acender e apagar led, via botão físico e botão virtual ...
O que teremos ao final do dia: 
09:16 
fb.com/RVA.BR 
5
CONCEITOS GERAIS 
Algumas definições, como cheguei no openFrameworks, e estado da prática de estudos de interação e visão ...
“The product is no longer the basis of value. The experience is.” 
Venkat Ramaswamy 
The Future of Competition 
7 
12/11/2...
Valor de uma boa experiência 
8 
12/11/2014 
fb.com/RVA.BR
IHC – Interação Homem-Computador 
•Estudo da interação entre pessoas e computadores. 
•Onde são formadas as experiências. ...
Mas quem desenvolve experiência? 
•UX Developer – User Experience 
•A pessoa que caminha entra o design e a tecnologia. 
h...
Interação 
11 
Texto, som, cores, visual, mecânico ou fisico. 
Interface 
Mensagens 
Usuário 
Sistema 
12/11/2014 
fb.com/...
Usabilidade 
09:16 
fb.com/RVA.BR 
12
Exemplo: 
•Usabilidade: 
1.Facilidade de aprendizado 
2.Eficiência 
3.Facilidade de memorização 
4.Erros 
5.Satisfação sub...
3 níveis 
Lógico: Resolvem, solucionam, facilitam. 
Emocional: Satisfazem necessidades e desejos afetivos. 
Visceral: reso...
Espera.... Visceral? 
15 
12/11/2014 
fb.com/RVA.BR
16 
12/11/2014 
fb.com/RVA.BR
CLI – Command Line 
Códigos, estritos 
GUI – Grafical 
Metáforas, exploratória 
NUI – Natural 
Direta, intuitiva 
RV 
RA 
...
Gerações: 
09:16 
fb.com/RVA.BR 
18
Começo 
•1963 
•Ivan Sutherland 
•51 ANOS 
Sutherland 
9:16 
19
Realidades – Realidade Virtual 
interface que permite ao usuário interagir, em tempo real, com um mundo tridimensional ger...
Billinghurst Vision 
12/11/2014 
21 
fb.com/RVA.BR
Realidades – Realidade Aumentada 
uma interface baseada na sobreposição de informações virtuais geradas por computador (en...
Christopher Vision 
Informação virtual 
Interação Natural 
dispositivos tecnológicos 
12/11/2014 
23 
fb.com/RVA.BR
Realidades – Realidade Cruzada 
é um ambiente de realidade misturada ubíqua, que vem da fusão de uma rede de sensores e at...
Milgram Continuum - interfaces 
SOURCE: Milgram et al. (1995) 
Aumento de elementos reais 
Aumento de elementos virtuais 
...
Kirner’s Diagram – elementos 
Source: (KIRNER et al., 2012) 
12/11/2014 
26 
fb.com/RVA.BR 
M$ 
GRU 
Lego 
Cave 
2L
Realidade Cruzada 
Objetos reais 
Sensores e Atuadores 
Realidade Aumentada 
OCR 
NOCR 
NOCR 
Introdução 
12/11/2014 
27 
...
HIT - ROADMAP 
CR 
AI 
HI 
AR 
IoT 
HR 
KMatsuda 
9:16 
28
OPENFRAMEWORKS 
09:16 
fb.com/RVA.BR 
29
ERA TROGLODITA 
•Graduação (2010): 
•ARToolKit 
•PTAMM 
•Bolsista DTI (2011): 
•basAR 
Conectar com ARDUINO em C++ 
Litera...
Processing 
Adobe Flash 
Unity 
Cinder 
openFrameworks 
31 
12/11/2014 
fb.com/RVA.BR
openframeworks.cc 
32 
•Vídeo oF1..Media7_openFrameworks1.mp4 
•Vídeo oF2..Media7_openFrameworks2.mp4 
12/11/2014 
fb.com/...
oF 
•Criado para artistas e designers 
•Desenvolvido por: Zach Liberman, Theo Watson, Artuno Castro e Chris O’Shea 
•Propo...
utilizar oF quando: 
•O projeto renderiza muitos gráficos 3D, e/ou; 
•Utilizar muita visão computacional, e/ou; 
•Controla...
Página Principal – openframeworks.cc 
35 
12/11/2014 
fb.com/RVA.BR
Libs no pacote padrão 
•OpenGL, GLEW, GLUT, libtess2 e cairo para gráficos. 
•rtAudio, PortAudio ou FMOD e Kiss FFT para e...
Addons da comunidade 
09:16 
fb.com/RVA.BR 
37
38
OSX, Linux, Windows, iOS, Android, Linux ARM 
09:17 
fb.com/RVA.BR 
39
ERA TROGLODITA (C++) 
•Graduação (2010): 
•ARToolKit 
•PTAMM 
•Bolsista DTI (2011): 
•basAR 
ERA DO FOGO (C++/oF) 
•Mestra...
•Introdução à utilização de openFrameworks para o desenvolvimento de aplicações de RVA 
http://pt.slideshare.net/christoph...
OPENFRAMEWORKS 
ROUND ONE 
09:17 
fb.com/RVA.BR 
42
Ambiente de desenvolvimento deste tutorial 
oF 0.8.4 
Visual Studio Express 2012 
C++ 11 
Windows 8.1 
09:17 
fb.com/RVA.B...
Descompactando 
•addons – recursos fora do core do oF 
•apps – local onde ocorre o devel 
•docs –  
•examples -  +100 
•...
Exemplos 
09:17 
fb.com/RVA.BR 
45 
•Ex1.: 3D  pointPicker 
•Ex2.: graphics polylineBlobs 
•Ex3.: utilssorting 
•Ex4.: ...
O EXEMPLO VAZIO! 
o exemplo vazio serve para explorar a estrutura de arquivos do oF, a utilização do gerador automático e ...
Onde encontrar? 
09:17 
fb.com/RVA.BR 
47
Level Easy: Gerador Automático 
48
Escolhendo expansões 
49 
Do core oF 
Da comunidade
Estrutura do projeto 
09:17 
fb.com/RVA.BR 
50
Exemplo básico 
09:17 
fb.com/RVA.BR 
51 
// ofApp.cpp 
void ofApp::setup(){ 
mensagem = "Hello WRVA2014!!!"; 
raio = 0; 
...
ARDUINO 
O que é? Onde vivem? 
Existe? Hoje no Glob.. 
Fritzing, Arduino 1.0, Firmata, exemplo openFrameworks 
09:17 
fb.c...
O que tem no ARDUINO? 
12/11/2014 
53 
fb.com/RVA.BR
Outras versões 
12/11/2014 
54 
fb.com/RVA.BR
Shields 
12/11/2014 
55 
fb.com/RVA.BR
FIRMATA 
Literatura indica FIRMATA: 
http://firmata.org/wiki/Download 
12/11/2014 
56 
fb.com/RVA.BR
O que a FIRMATA faz!? 
•Transforma o ARDUINO numa interface de controle, podendo ser modificado por um host. 
•Quais as va...
Obs.: Mudança da nomenclatura dos pinos após Firmata 2.3 (Arduino 1.0) 
09:17 
fb.com/RVA.BR 
58
Instalando a Firmata no Arduino 
•Faça download do Arduino 1.0.6 http://arduino.cc/en/Main/Software 
•Abra o sketch do Fir...
“esquemático” 
12/11/2014 
60 
fb.com/RVA.BR 
•#crashcourse fritzing 
•http://fritzing.org/home/
Arduino e openFrameworks 
09:17 
fb.com/RVA.BR 
61
Métodos para conectar com o ARDUINO 
connect() 
disconnect() 
getAnalog() 
getAnalogPinReporting() 
getDigital() 
ge...
Código no openFrameworks 
•Exploração do exemplo: communicationfirmataExample 
09:17 
fb.com/RVA.BR 
63
Fluxograma básico 
09:17 
fb.com/RVA.BR 
64 
SETUP 
Habilita callback de Arduino Alive 
Arduino Responde Evento Alive 
Con...
Código 
09:17 
fb.com/RVA.BR 
65 
//ofApp.h #pragma once #include "ofMain.h" class ofApp : public ofBaseApp{ public: … ofA...
09:17 
fb.com/RVA.BR 
66 
MatrixCube 
Robot 
Insect 
Weather 
Patchube
Momento histórico: 2014-11-12 
•Primeira aterrisagem num cometa 
•ESA. Missão Rosetta 
16:06 
fb.com/RVA.BR 
67
REALIDADE AUMENTADA 
Marcadores: ofxARToolKitPlus 
“sem marcadores”: ofxOpenCv, ofxCv 
09:17 
fb.com/RVA.BR 
68
Definição atual 
Uma definição mais atualizada é: realidade aumentada é uma interface baseada na sobreposição de informaçõ...
Frameworks 
Marcador 
•ARToolKit (C) – 90´s 
•NYARToolKit (Java, C#, C++, Android) 
•AndAR (Android) 
•FLARToolKit (AS3) 
...
71 
GLASS 
9:17
72 
AREngine 
Tango 
Tango 
9:17
NUI 
Tangíveis 
Móveis 
Especializados 
Institutos 
iFORM 
Sand 
MYO 
META 
Kinect 
9:17 
73
ARTOOLKITPLUS 
09:17 
fb.com/RVA.BR 
74
Marcadores 
ARToolKit 
•HITLab 
•Compara templates. 
•Template marker detection 
•Mais lento 
•(Costumava ser) Inviável em...
ARToolKit 
76
ARToolKitPlus 
77
Voltando ao mundo real 
•openFrameworks + ARToolKitPlus. 
•Add-on ofxARToolKitPlus. (https://github.com/fishkingsin/ofxARt...
ARToolKitPlus original: 
•https://launchpad.net/artoolkitplus 
•released on 2014-10-05 (  ) 
•ARToolKitPlus is a software...
•Utilizar o gerador automático e gerar com os seguintes add-nos: 
•ofxARToolKitPlus 
•ofxOpenCv (necessário para o ofxARTo...
Ajustando o projeto - caminhos 
1.Configuration Properties  Linker GeneralAdditional Library Directories e inclua o cam...
Fluxograma 
09:19 
fb.com/RVA.BR 
82 
SETUP 
Configura câmera e ARTKP 
UPDATE 
Update câmera e ARTKP 
DRAW 
Desenha 2D 
De...
Lets code... 
// ofApp.cpp 
#pragma once 
#include "ofMain.h" 
#include "ofxOpenCv.h" //Cabeçalho do OpenCV 
#include "ofx...
Configurando – testApp::setup() 
//-------------------------------------------------------------- 
void ofApp::setup(){ 
o...
Rastreio - testApp::update() 
//-------------------------------------------------------------- 
void ofApp::update(){ 
vid...
Exibindo - testApp::draw() – p1 
void ofApp::draw(){ 
ofSetColor(ofColor::white); // inicia a cor dos objetos como branca ...
Exibindo - testApp::draw() – p2 
for(int i=0; i<numDetected; i++) { // marcadores encontrados 
artk.applyModelMatrix(i); /...
Alterando o threshold - testApp::keyPressed(int key) 
//-------------------------------------------------------------- 
vo...
Lembrar de copiar a ARToolKitPlus.dll para a pasta destino 
Lembrar de copiar as definições de câmera do ARToolKitPlus 
09...
Resultado esperado 
90
USANDO OPENCV 
09:19 
fb.com/RVA.BR 
91
Teoria: Rastreio de cores 
1.Breve teoria de cores e rastreio de blobs em openCV, 
2.Construção dos artefatos de manipulaç...
Cores 
RGB-A (red, green, blue)-alfa 
HSV (hue (cor), saturation, value) 
12/11/2014 
93 
fb.com/RVA.BR
Blobs 
•Método de busca de características. 
•Blobs compartilham propriedades constantes que podem ser “percebidas” na ima...
Construção dos artefatos : Rastreio Cores 
12/11/2014 
95 
fb.com/RVA.BR
Bonus: Projection Mapping 
12/11/2014 
fb.com/RVA.BR 
96 
Audi case 
PM 
PM
Usos 
•Table-tops 
•Projeções em paredes 
12/11/2014 
97 
fb.com/RVA.BR 
SketchSynth 
Sensetable 
L.A.S.E.R. Tag 
Climbing...
SVR2014 - Resultados 
12/11/2014 
98 
fb.com/RVA.BR
SVR2014 - Resultados 
12/11/2014 
99 
fb.com/RVA.BR
Voltando ao mundo real 
•openFrameworks + openCV. 
•Addon ofxOpenCV – Incluso no openFrameworks 
•Addon ofxCv (https://git...
Exemplos interessantes 
•ofxCvexample-difference-Colummns 
•ofxCvexample-countours-advanced 
09:19 
fb.com/RVA.BR 
101
Fluxograma: Challange: rastrear mão 
09:19 
fb.com/RVA.BR 
102 
SETUP 
Configura câmera 
Configura “padrão” 
UPDATE 
Câmer...
Rastrear mão (apontador 2D) 
•Restrições (para facilitar) 
•Fundo homogêneo 
•Longe das quinas 
•Uma mão só 
•Pseudo-códig...
Lets code babe 
#include "ofMain.h" 
#include "ofxOpenCv.h" //Cabeçalho do OpenCV 
#include "ofxCv.h" 
class ofApp : publi...
Setup 
void ofApp::setup(){ 
width = 320; height = 240; 
vidGrabber.initGrabber(width, height); //abre câmera 
colorImage....
Update 
void ofApp::update(){ 
vidGrabber.update(); // Pega frame da câmera 
if(vidGrabber.isFrameNew()){ // é um frame no...
Ponto mais distante – p1 
ofPoint ofApp::encontraPontoMaisDistante(){ 
int n = contourFinder.size(); //qtidade de blobs ca...
Ponto mais distante – p2 
for(itVec = vertices.begin(); itVec != vertices.end(); itVec++){ 
//encontrar ponto mais distant...
Draw 
void ofApp::draw(){ 
ofSetColor(255); grayImage.draw(0, 0); // desenha camera 
ofTranslate(320, 0); grayDiff.draw(0,...
Resultado desejado: 
09:19 
fb.com/RVA.BR 
110
Só use mais hardware quando realmente precisar. 
09:51 
fb.com/RVA.BR 
111
JUNTANDO TUDO. 
Controlar e monitorar Arduino em RA. 
09:19 
fb.com/RVA.BR 
112
O que nós sabemos (em tese) até agora: 
•Como se localizar no openFrameworks 
•projectGenerator, ofApp.h, ofApp.cpp, métod...
Fluxograma simplificado 
09:19 
fb.com/RVA.BR 
114 
SETUP 
Configura Arduino, Câmera, ARToolkitPlus e Rastreio 
Aguarda Ar...
Funcionando! 
09:19 
fb.com/RVA.BR 
115
WRAP-UP 
09:19 
fb.com/RVA.BR 
116 
O QUE APRENDEMOS HOJE
•Existe um framework easy (noob level) em C++ chamado openFrameworks. 
•openFrameworks pode ser expandido com componentes ...
•ARToolKitPlus é um tipo de marcador para RA, que é mais rápido que o ARToolKit. 
•openCV é uma biblioteca de visão comput...
09:19 
fb.com/RVA.BR 
119
120 
Claudio Kirner1 and Christopher S. Cerqueira12 
1Federal University of Itajubá – Universidade Federal de Itajubá (UNI...
Próximos SlideShares
Carregando em…5
×

[WRVA2014] Utilização de Realidade Aumentada, com marcadores(ARToolKitPlus) e outros (utilizando openCV), para controle e inspeção de hardware, utilizando a interface ARDUINO

930 visualizações

Publicada em

Objetivo:Mostrar as possibilidades de uso de realidade aumentada para controle de hardware utilizando o openFrameworks, explicando as etapas de construção da aplicação. Mostrar caminhos simplificados de desenvolvimento com foco no exemplo.

Publicada em: Educação
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
930
No SlideShare
0
A partir de incorporações
0
Número de incorporações
16
Ações
Compartilhamentos
0
Downloads
24
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

[WRVA2014] Utilização de Realidade Aumentada, com marcadores(ARToolKitPlus) e outros (utilizando openCV), para controle e inspeção de hardware, utilizando a interface ARDUINO

  1. 1. 09:16 1 fb.com/RVA.BR pt.slideshare.net/christophercerqueira christophercerqueira@gmail.com fb.com/RVA.BR
  2. 2. Using AR/CR, with markers and others, to control and inspect hardware with ARDUINO based interface. Utilização de Realidade Aumentada, com marcadores(ARToolKitPlus) e outros (utilizando openCV), para controle e inspeção de hardware, utilizando a interface ARDUINO. 2 Claudio Kirner1 and Christopher S. Cerqueira12 1Federal University of Itajubá – Universidade Federal de Itajubá (UNIFEI) 2National Institute for Space Research – Instituto Nacional de Pesquisas Espaciais (INPE) 1ckirner@gmail.com ,2christophercerqueira@gmail.com 1http://realidadevirtual.com.br/, 2http://cscerqueira.com.br 09:16
  3. 3. Agenda: •Conceitos e openFrameworks ~60m •Estado da prática no INPE •Criando o primeiro programa em openFrameworks ~20m •Conectando com o Arduino ~40m •Realidade Aumentada + ex.: Realidade Cruzada ~ 60min •Usando marcadores -ofxARToolKitPlus •Usando openCV - ofxOpenCv •Controlar e monitorar equipamentos usando RA ~60min •Arduino + openCV + marcadores 09:16 fb.com/RVA.BR 3 Três etapas: 1.10h30 – 12h00 2.14h00 – 15h30 3.16h00 – 17h30
  4. 4. Exemplo prático que vai ser montado •Vamos controlar o Arduino: •Acender e apagar led, via botão físico e botão virtual (usando marcador tipo ofxARToolKitPlus) •Movimentar um servo usando rastreio de mão (usando ofxOpenCv) 09:16 fb.com/RVA.BR 4
  5. 5. O que teremos ao final do dia: 09:16 fb.com/RVA.BR 5
  6. 6. CONCEITOS GERAIS Algumas definições, como cheguei no openFrameworks, e estado da prática de estudos de interação e visão computacional na Engenharia e Tecnologia Espacial. 09:16 fb.com/RVA.BR 6
  7. 7. “The product is no longer the basis of value. The experience is.” Venkat Ramaswamy The Future of Competition 7 12/11/2014 fb.com/RVA.BR
  8. 8. Valor de uma boa experiência 8 12/11/2014 fb.com/RVA.BR
  9. 9. IHC – Interação Homem-Computador •Estudo da interação entre pessoas e computadores. •Onde são formadas as experiências. 9 12/11/2014 fb.com/RVA.BR
  10. 10. Mas quem desenvolve experiência? •UX Developer – User Experience •A pessoa que caminha entra o design e a tecnologia. http://blog.alexandremagno.net/2013/02/o-que-seria-um-ux-developer/ 10 12/11/2014 fb.com/RVA.BR
  11. 11. Interação 11 Texto, som, cores, visual, mecânico ou fisico. Interface Mensagens Usuário Sistema 12/11/2014 fb.com/RVA.BR
  12. 12. Usabilidade 09:16 fb.com/RVA.BR 12
  13. 13. Exemplo: •Usabilidade: 1.Facilidade de aprendizado 2.Eficiência 3.Facilidade de memorização 4.Erros 5.Satisfação subjetiva 13 Meta- Mensagens Usuário Sistema 12/11/2014 fb.com/RVA.BR
  14. 14. 3 níveis Lógico: Resolvem, solucionam, facilitam. Emocional: Satisfazem necessidades e desejos afetivos. Visceral: resolvem questões fundamentais, sem consciência. Impulso. 14 12/11/2014 fb.com/RVA.BR
  15. 15. Espera.... Visceral? 15 12/11/2014 fb.com/RVA.BR
  16. 16. 16 12/11/2014 fb.com/RVA.BR
  17. 17. CLI – Command Line Códigos, estritos GUI – Grafical Metáforas, exploratória NUI – Natural Direta, intuitiva RV RA Evolução das interfaces 9:16 17
  18. 18. Gerações: 09:16 fb.com/RVA.BR 18
  19. 19. Começo •1963 •Ivan Sutherland •51 ANOS Sutherland 9:16 19
  20. 20. Realidades – Realidade Virtual interface que permite ao usuário interagir, em tempo real, com um mundo tridimensional gerado por computador, usando seus sentidos através de equipamentos especiais. SOURCE: NASA (2013a) 9:16 20
  21. 21. Billinghurst Vision 12/11/2014 21 fb.com/RVA.BR
  22. 22. Realidades – Realidade Aumentada uma interface baseada na sobreposição de informações virtuais geradas por computador (envolvendo imagens estáticas e dinâmicas, sons espaciais e sensações hápticas) com o ambiente físico do usuário, percebida através de dispositivos tecnológicos e usando as interações naturais do usuário, no mundo físico. Claudio Kirner SOURCE: Adapted from ESA (2009) and Capua (2008) 12/11/2014 22 fb.com/RVA.BR
  23. 23. Christopher Vision Informação virtual Interação Natural dispositivos tecnológicos 12/11/2014 23 fb.com/RVA.BR
  24. 24. Realidades – Realidade Cruzada é um ambiente de realidade misturada ubíqua, que vem da fusão de uma rede de sensores e atuadores (que coletam e enviam dados relacionados ao mundo real) com mundos virtuais compartilhados, usando a interface da realidade aumentada. Claudio Kirner Introdução 12/11/2014 24 fb.com/RVA.BR
  25. 25. Milgram Continuum - interfaces SOURCE: Milgram et al. (1995) Aumento de elementos reais Aumento de elementos virtuais 12/11/2014 25 fb.com/RVA.BR
  26. 26. Kirner’s Diagram – elementos Source: (KIRNER et al., 2012) 12/11/2014 26 fb.com/RVA.BR M$ GRU Lego Cave 2L
  27. 27. Realidade Cruzada Objetos reais Sensores e Atuadores Realidade Aumentada OCR NOCR NOCR Introdução 12/11/2014 27 fb.com/RVA.BR
  28. 28. HIT - ROADMAP CR AI HI AR IoT HR KMatsuda 9:16 28
  29. 29. OPENFRAMEWORKS 09:16 fb.com/RVA.BR 29
  30. 30. ERA TROGLODITA •Graduação (2010): •ARToolKit •PTAMM •Bolsista DTI (2011): •basAR Conectar com ARDUINO em C++ Literatura indica FIRMATA: http://firmata.org/wiki/Download 12/11/2014 30 fb.com/RVA.BR https://github.com/bodusb http://cscerqueira.com.br/basar
  31. 31. Processing Adobe Flash Unity Cinder openFrameworks 31 12/11/2014 fb.com/RVA.BR
  32. 32. openframeworks.cc 32 •Vídeo oF1..Media7_openFrameworks1.mp4 •Vídeo oF2..Media7_openFrameworks2.mp4 12/11/2014 fb.com/RVA.BR
  33. 33. oF •Criado para artistas e designers •Desenvolvido por: Zach Liberman, Theo Watson, Artuno Castro e Chris O’Shea •Proposta: Arrumar a falta de comunicação entre diversas bibliotecas em C++, e permitir portabilidade. •Escrita em C++ •Licença: MIT (educacional e venda) 33 12/11/2014 fb.com/RVA.BR
  34. 34. utilizar oF quando: •O projeto renderiza muitos gráficos 3D, e/ou; •Utilizar muita visão computacional, e/ou; •Controlar equipamentos, como, por exemplo, o ARDUINO. 34 12/11/2014 fb.com/RVA.BR
  35. 35. Página Principal – openframeworks.cc 35 12/11/2014 fb.com/RVA.BR
  36. 36. Libs no pacote padrão •OpenGL, GLEW, GLUT, libtess2 e cairo para gráficos. •rtAudio, PortAudio ou FMOD e Kiss FFT para entrada, saída e análise de áudio. •FreeType para fontes. •FreeImage para salvar e carregar imagens. •Quicktime e videoInput para playback e aquisição de vídeo. •Poco, que contém uma variedade de utilidades. 36 12/11/2014 fb.com/RVA.BR
  37. 37. Addons da comunidade 09:16 fb.com/RVA.BR 37
  38. 38. 38
  39. 39. OSX, Linux, Windows, iOS, Android, Linux ARM 09:17 fb.com/RVA.BR 39
  40. 40. ERA TROGLODITA (C++) •Graduação (2010): •ARToolKit •PTAMM •Bolsista DTI (2011): •basAR ERA DO FOGO (C++/oF) •Mestrado (2012): •Doutorado (2014): 12/11/2014 40 fb.com/RVA.BR
  41. 41. •Introdução à utilização de openFrameworks para o desenvolvimento de aplicações de RVA http://pt.slideshare.net/christophercerqueira/svr2013-o-frev •Construção de aplicações de Realidade Cruzada Projetiva utilizando openFrameworks e ARDUINO http://pt.slideshare.net/christophercerqueira/ppt-svr2014 12/11/2014 41 fb.com/RVA.BR
  42. 42. OPENFRAMEWORKS ROUND ONE 09:17 fb.com/RVA.BR 42
  43. 43. Ambiente de desenvolvimento deste tutorial oF 0.8.4 Visual Studio Express 2012 C++ 11 Windows 8.1 09:17 fb.com/RVA.BR 43
  44. 44. Descompactando •addons – recursos fora do core do oF •apps – local onde ocorre o devel •docs –  •examples -  +100 •export – dlls •libs – bibliotecas do oF •others – pde para exemplo com Arduino •projectGenerator – gerador automático de projetos •scripts – compilar tudo, e base para criação de projetos 09:17 fb.com/RVA.BR 44
  45. 45. Exemplos 09:17 fb.com/RVA.BR 45 •Ex1.: 3D  pointPicker •Ex2.: graphics polylineBlobs •Ex3.: utilssorting •Ex4.: 3DcameraLensOffset •Ex5.: addonsassimp •(particulas)
  46. 46. O EXEMPLO VAZIO! o exemplo vazio serve para explorar a estrutura de arquivos do oF, a utilização do gerador automático e a organização do código. 46
  47. 47. Onde encontrar? 09:17 fb.com/RVA.BR 47
  48. 48. Level Easy: Gerador Automático 48
  49. 49. Escolhendo expansões 49 Do core oF Da comunidade
  50. 50. Estrutura do projeto 09:17 fb.com/RVA.BR 50
  51. 51. Exemplo básico 09:17 fb.com/RVA.BR 51 // ofApp.cpp void ofApp::setup(){ mensagem = "Hello WRVA2014!!!"; raio = 0; } void ofApp::draw(){ ofEnableAlphaBlending(); ofSetColor(ofColor::blue,128); ofCircle(x_i,y_i,raio); ofSetColor(ofColor::red); ofDrawBitmapString(mensagem,mouseX,mouseY); } // ofApp.cpp void ofApp::mouseDragged(int x, int y, int button){ raio = ofDist(x_i,y_i,x,y); } void ofApp::mousePressed(int x, int y, int button){ x_i = x; y_i = y; } void ofApp::mouseReleased(int x, int y, int button){ raio = ofDist(x_i,y_i,x,y); } // ofApp.h ... string mensagem; int x_i,y_i; float raio; ...
  52. 52. ARDUINO O que é? Onde vivem? Existe? Hoje no Glob.. Fritzing, Arduino 1.0, Firmata, exemplo openFrameworks 09:17 fb.com/RVA.BR 52
  53. 53. O que tem no ARDUINO? 12/11/2014 53 fb.com/RVA.BR
  54. 54. Outras versões 12/11/2014 54 fb.com/RVA.BR
  55. 55. Shields 12/11/2014 55 fb.com/RVA.BR
  56. 56. FIRMATA Literatura indica FIRMATA: http://firmata.org/wiki/Download 12/11/2014 56 fb.com/RVA.BR
  57. 57. O que a FIRMATA faz!? •Transforma o ARDUINO numa interface de controle, podendo ser modificado por um host. •Quais as vantagens? •O host controla a execução! •O host tem mais memória. •Desvantagens?! •Tem que ficar atrelado ao host! 12/11/2014 57 fb.com/RVA.BR
  58. 58. Obs.: Mudança da nomenclatura dos pinos após Firmata 2.3 (Arduino 1.0) 09:17 fb.com/RVA.BR 58
  59. 59. Instalando a Firmata no Arduino •Faça download do Arduino 1.0.6 http://arduino.cc/en/Main/Software •Abra o sketch do Firmata Standard. •Transfira para a board. 09:17 fb.com/RVA.BR 59 http://arduino.cc/en/reference/firmata
  60. 60. “esquemático” 12/11/2014 60 fb.com/RVA.BR •#crashcourse fritzing •http://fritzing.org/home/
  61. 61. Arduino e openFrameworks 09:17 fb.com/RVA.BR 61
  62. 62. Métodos para conectar com o ARDUINO connect() disconnect() getAnalog() getAnalogPinReporting() getDigital() getDigitalPinMode() getPwm() getString() isArduinoReady() isInitialized() sendAnalogPinReporting() sendByte() sendDigital() sendDigitalPinMode() sendPwm() sendReset() sendString() setUseDelay() update() 12/11/2014 62 fb.com/RVA.BR
  63. 63. Código no openFrameworks •Exploração do exemplo: communicationfirmataExample 09:17 fb.com/RVA.BR 63
  64. 64. Fluxograma básico 09:17 fb.com/RVA.BR 64 SETUP Habilita callback de Arduino Alive Arduino Responde Evento Alive Configura Arduino Loop de execução – sem Arduino Enviar comandos pro Arduino Recebeu um evento Digital Recebeu um evento Analógico Loop de execução – Arduino Update
  65. 65. Código 09:17 fb.com/RVA.BR 65 //ofApp.h #pragma once #include "ofMain.h" class ofApp : public ofBaseApp{ public: … ofArduino ard; bool bSetupArduino; private: void setupArduino(const int & version); void digitalPinChanged(const int & pinNum); void analogPinChanged(const int & pinNum); void updateArduino(); }; //ofApp.cpp void ofApp::setup(){ ... ard.connect("COM3", 57600); //conecta com arduino ofAddListener(ard.EInitialized, this, &ofApp::setupArduino); bSetupArduino= false;// flag arduino ok  } void ofApp::setupArduino(const int & version) { ofRemoveListener(ard.EInitialized, this, &ofApp::setupArduino); bSetupArduino = true; // agora pode usar o arduino. ard.sendDigitalPinMode(2, ARD_INPUT); //pino entrada digital ard.sendAnalogPinReporting(0, ARD_ANALOG); // pino entrada analógica ard.sendDigitalPinMode(13, ARD_OUTPUT); // configura pino saída digital ard.sendDigitalPinMode(11, ARD_PWM); // configura pino saída PWM ard.sendServoAttach(9); // diz que o pino tem um servo. ofAddListener(ard.EDigitalPinChanged, this, &ofApp::digitalPinChanged); //callback para eventos de pino digital. ofAddListener(ard.EAnalogPinChanged, this, &ofApp::analogPinChanged); //callback para eventos de pino analógico } void ofApp::updateArduino(){ ard.update(); // verifica se algo mudou no Arduino - obrigatório if (bSetupArduino) { //envia o que for para o Arduino. ard.sendPwm(11, (int)(128 + 128 * sin(ofGetElapsedTimef()))); // pwm... } } //ofApp.cpp void ofApp::digitalPinChanged(const int & pinNum) { // trata o pino digital - ard.getDigital(pinNum) } void ofApp::analogPinChanged(const int & pinNum) { // trata o pino analógico - ard.getAnalog(pinNum) } //outros comandos ard.sendServo(9, 180, false); ard.sendDigital(8, ARD_HIGH);
  66. 66. 09:17 fb.com/RVA.BR 66 MatrixCube Robot Insect Weather Patchube
  67. 67. Momento histórico: 2014-11-12 •Primeira aterrisagem num cometa •ESA. Missão Rosetta 16:06 fb.com/RVA.BR 67
  68. 68. REALIDADE AUMENTADA Marcadores: ofxARToolKitPlus “sem marcadores”: ofxOpenCv, ofxCv 09:17 fb.com/RVA.BR 68
  69. 69. Definição atual Uma definição mais atualizada é: realidade aumentada é uma interface baseada na sobreposição de informações virtuais geradas por computador (envolvendo imagens estáticas e dinâmicas, sons espaciais e sensações hápticas) com o ambiente físico do usuário, percebida através de dispositivos tecnológicos e usando as interações naturais do usuário, no mundo físico. (KIRNER 2011) 69
  70. 70. Frameworks Marcador •ARToolKit (C) – 90´s •NYARToolKit (Java, C#, C++, Android) •AndAR (Android) •FLARToolKit (AS3) •Vuforia Sem marcador •OpenCV – Multiplataforma •HandyAR •MetaIO •PTAMM (C++) •Kinect like (Meta / Tango) 70
  71. 71. 71 GLASS 9:17
  72. 72. 72 AREngine Tango Tango 9:17
  73. 73. NUI Tangíveis Móveis Especializados Institutos iFORM Sand MYO META Kinect 9:17 73
  74. 74. ARTOOLKITPLUS 09:17 fb.com/RVA.BR 74
  75. 75. Marcadores ARToolKit •HITLab •Compara templates. •Template marker detection •Mais lento •(Costumava ser) Inviável em SW embarcado. ARToolKitPlus •Graz University of Technology •Compara códigos •ID-Encoded marker detection •Mais rápido •Bom para SW embarcado. 75
  76. 76. ARToolKit 76
  77. 77. ARToolKitPlus 77
  78. 78. Voltando ao mundo real •openFrameworks + ARToolKitPlus. •Add-on ofxARToolKitPlus. (https://github.com/fishkingsin/ofxARtoolkitPlus) •Descompactá-lo e salvar dentro de <of>/addons •Renomear, retirando o sufixo –master 78
  79. 79. ARToolKitPlus original: •https://launchpad.net/artoolkitplus •released on 2014-10-05 (  ) •ARToolKitPlus is a software library that can be used to calculate camera position and orientation relative to physical markers in real time. This enables the easy development of a wide range of Augmented Reality applications. •advantages over the classical ARToolKit: •easier C++ based API •support for 4096 binary based markers - no need to design new markers yourself •supports RGB565, Gray images •"Robust Planar Pose" algorithm that reduces jitter while tracking •uses modern text-file based camera calibration •Vignetting Compensation •automatic Thresholding •Hull based tracking in multi marker mode 09:19 fb.com/RVA.BR 79
  80. 80. •Utilizar o gerador automático e gerar com os seguintes add-nos: •ofxARToolKitPlus •ofxOpenCv (necessário para o ofxARToolKitPlus) •DICA: Não vai funcionar – o of0.8.4 usa o C++ 11, diferente do compilado na ofxARToolKitPlus •Como resolver: http://touch-base- br.blogspot.com.br/2014/09/openframeworks-083- ofxartoolkitplus.html 80
  81. 81. Ajustando o projeto - caminhos 1.Configuration Properties  Linker GeneralAdditional Library Directories e inclua o caminho para a biblioteca, no caso: ......addonsofxARtoolkitPluslibsARToolKitPluslibwin32 1.Configuration Properties  Linker Input  Additional Dependencies incluir a lib: ARToolKitPlus.lib 81
  82. 82. Fluxograma 09:19 fb.com/RVA.BR 82 SETUP Configura câmera e ARTKP UPDATE Update câmera e ARTKP DRAW Desenha 2D Desenha 3D
  83. 83. Lets code... // ofApp.cpp #pragma once #include "ofMain.h" #include "ofxOpenCv.h" //Cabeçalho do OpenCV #include "ofxARToolkitPlus.h" //Cabeçalho do ARToolKitPlus class ofApp : public ofBaseApp{ ... int width, height; // Tamanho da janela da câmera ofVideoGrabber vidGrabber; // Componente do oF que pega a câmera. ofxARToolkitPlus artk; // Instância do ARToolKitPlus ofxCvColorImage colorImage; //imagem capturada pela câmera ofxCvGrayscaleImage grayImage; //imagem em tons de cinza (mais rápida) }; 83
  84. 84. Configurando – testApp::setup() //-------------------------------------------------------------- void ofApp::setup(){ ofSetWindowShape(1280,480); // Ajusta o tamanho da aplicação width = 640; height = 480; // largura e altura da imagem da câmera vidGrabber.initGrabber(width, height); // reserva buffer da câmera colorImage.allocate(width, height); // reserva imagem colorida grayImage.allocate(width, height); // reserva imagem mono artk.setup(width, height); // inicia o ARToolKitPlus } 84
  85. 85. Rastreio - testApp::update() //-------------------------------------------------------------- void ofApp::update(){ vidGrabber.update(); // Pega frame da câmera bool bNewFrame = vidGrabber.isFrameNew();// é um frame novo ??? if(bNewFrame) { // se um frame novo //pega os pixels do buffer da câmera e armazena colorImage.setFromPixels(vidGrabber.getPixels(), width, height); grayImage = colorImage; //converte a imagem para mono artk.update(grayImage.getPixels()); } } 85
  86. 86. Exibindo - testApp::draw() – p1 void ofApp::draw(){ ofSetColor(ofColor::white); // inicia a cor dos objetos como branca colorImage.draw(0, 0); // exibe a imagem capturada colorida artk.draw(640, 0); // Esta função exibe a posição e etiqueta marcador // ARTK 2D stuff - // See if marker ID '0' was detected int myIndex = artk.getMarkerIndex(0); if(myIndex >= 0) { ofSetColor(ofColor::red); ofDrawBitmapString(ofToString(artk.getTranslation(myIndex)), artk.getDetectedMarkerCenter(myIndex)); } // ARTK 3D artk.applyProjectionMatrix(); // matriz de projeção da camera int numDetected = artk.getNumDetectedMarkers(); //detectar marcadores ofEnableAlphaBlending(); //habilitar a transparência 86
  87. 87. Exibindo - testApp::draw() – p2 for(int i=0; i<numDetected; i++) { // marcadores encontrados artk.applyModelMatrix(i); //matriz de perspectiva do marcador //Local onde colocar o conteúdo 3D do marcador // neste exemplo é uma pilha de retângulos. ofNoFill(); ofEnableSmoothing(); ofSetColor(255, 255, 0, 50); for(int i=0; i<10; i++) { ofRect(-25, -25, 50, 50); ofTranslate(0, 0, i*1); } } } 87
  88. 88. Alterando o threshold - testApp::keyPressed(int key) //-------------------------------------------------------------- void ofApp::keyPressed(int key){ switch(key){ // aumenta o valor do threshold case OF_KEY_UP: artk.setThreshold(++threshold); break; // diminui o valor do threshold case OF_KEY_DOWN: artk.setThreshold(--threshold); break; // chama a configuração da câmera case 's': case 'S': vidGrabber.videoSettings(); break; default: break; };} 88
  89. 89. Lembrar de copiar a ARToolKitPlus.dll para a pasta destino Lembrar de copiar as definições de câmera do ARToolKitPlus 09:19 fb.com/RVA.BR 89
  90. 90. Resultado esperado 90
  91. 91. USANDO OPENCV 09:19 fb.com/RVA.BR 91
  92. 92. Teoria: Rastreio de cores 1.Breve teoria de cores e rastreio de blobs em openCV, 2.Construção dos artefatos de manipulação, 3.Algoritmo de rastreio, 4.Algumas sugestões de usos 12/11/2014 92 fb.com/RVA.BR
  93. 93. Cores RGB-A (red, green, blue)-alfa HSV (hue (cor), saturation, value) 12/11/2014 93 fb.com/RVA.BR
  94. 94. Blobs •Método de busca de características. •Blobs compartilham propriedades constantes que podem ser “percebidas” na imagem. 12/11/2014 94 fb.com/RVA.BR
  95. 95. Construção dos artefatos : Rastreio Cores 12/11/2014 95 fb.com/RVA.BR
  96. 96. Bonus: Projection Mapping 12/11/2014 fb.com/RVA.BR 96 Audi case PM PM
  97. 97. Usos •Table-tops •Projeções em paredes 12/11/2014 97 fb.com/RVA.BR SketchSynth Sensetable L.A.S.E.R. Tag Climbing OASIS
  98. 98. SVR2014 - Resultados 12/11/2014 98 fb.com/RVA.BR
  99. 99. SVR2014 - Resultados 12/11/2014 99 fb.com/RVA.BR
  100. 100. Voltando ao mundo real •openFrameworks + openCV. •Addon ofxOpenCV – Incluso no openFrameworks •Addon ofxCv (https://github.com/kylemcdonald/ofxCv) •Descompactá-lo e salvar dentro de <of>/addons •Renomear, retirando o sufixo –master •DICA: nenhuma dica, vai funcionar!!!  100
  101. 101. Exemplos interessantes •ofxCvexample-difference-Colummns •ofxCvexample-countours-advanced 09:19 fb.com/RVA.BR 101
  102. 102. Fluxograma: Challange: rastrear mão 09:19 fb.com/RVA.BR 102 SETUP Configura câmera Configura “padrão” UPDATE Câmera Update Procura “padrão” DRAW
  103. 103. Rastrear mão (apontador 2D) •Restrições (para facilitar) •Fundo homogêneo •Longe das quinas •Uma mão só •Pseudo-código •Fazer diferença entra o fundo e o frame atual para encontrar a mão. •Com a diferença rastreia o blob. •Do blob calcula as quinas •Das quinas pega a mais distante do centroide e que não seja próximo das quinas ( braço). 09:19 fb.com/RVA.BR 103
  104. 104. Lets code babe #include "ofMain.h" #include "ofxOpenCv.h" //Cabeçalho do OpenCV #include "ofxCv.h" class ofApp : public ofBaseApp{ ... int width, height, threshold; ofVideoGrabber vidGrabber; // Componente do oF que pega a câmera. ofxCvColorImage colorImage; // imagem capturada pela câmera ofxCvGrayscaleImage grayBg, grayImage, grayDiff;// bg, cinza, diferença bool bLearnBakground; ofxCv::TrackingColorMode trackingColorMode; ofxCv::ContourFinder contourFinder; ofColor targetColor; ofPoint apontador; ofPoint encontraPontoMaisDistante(); }; 09:19 fb.com/RVA.BR 104
  105. 105. Setup void ofApp::setup(){ width = 320; height = 240; vidGrabber.initGrabber(width, height); //abre câmera colorImage.allocate(width,height); //aloca memória para as imagens grayBg.allocate(width,height); grayImage.allocate(width,height); grayDiff.allocate(width,height); contourFinder.setMinAreaRadius(10); //configura rastreador contourFinder.setMaxAreaRadius(150); contourFinder.setTargetColor(ofColor::white, TRACK_COLOR_RGB); threshold = 50; bLearnBakground = true; } 09:19 fb.com/RVA.BR 105
  106. 106. Update void ofApp::update(){ vidGrabber.update(); // Pega frame da câmera if(vidGrabber.isFrameNew()){ // é um frame novo ??? colorImage.setFromPixels(vidGrabber.getPixels(),width,height); grayImage = colorImage; if (bLearnBakground == true){ grayBg = grayImage;// salva o fundo da tela - TO ROUBANDO MESMO! bLearnBakground = false;} grayDiff.absDiff(grayBg, grayImage); // fazer fundo x atual grayDiff.threshold(threshold); contourFinder.setThreshold(threshold); // procurar blobs no atual contourFinder.findContours(grayDiff); apontador = encontraPontoMaisDistante(); // procurar “dedo” } } 09:19 fb.com/RVA.BR 106
  107. 107. Ponto mais distante – p1 ofPoint ofApp::encontraPontoMaisDistante(){ int n = contourFinder.size(); //qtidade de blobs capturados ofPoint maisDistante ; //nosso ponto mais distante for(int i = 0; i < n; i++) { ofVec2f centroid = toOf(contourFinder.getCentroid(i)); //Centroide; ofPolyline convexHull = toOf(contourFinder.getConvexHull(i)); //quinas; vector<ofPoint> vertices = convexHull.getVertices(); // vetorDeQuinas vector<ofPoint>::iterator itVec; // para percorrer as quinas. maisDistante = (*vertices.begin()); float tamMaisDistante = centroid.distanceSquared(maisDistante); float distanciaAtual = 0; 09:19 fb.com/RVA.BR 107
  108. 108. Ponto mais distante – p2 for(itVec = vertices.begin(); itVec != vertices.end(); itVec++){ //encontrar ponto mais distante do dedo --> eliminar as bordas if( ((*itVec).x > 40) && ((*itVec).x < width - 40) && ((*itVec).y > 40) && ((*itVec).y < height - 40)){ //elimina bordas distanciaAtual = centroid.distanceSquared((*itVec)); if(distanciaAtual > tamMaisDistante){ //maior “simple as possible” maisDistante = (*itVec); tamMaisDistante = distanciaAtual; } } } } return maisDistante; } 09:19 fb.com/RVA.BR 108
  109. 109. Draw void ofApp::draw(){ ofSetColor(255); grayImage.draw(0, 0); // desenha camera ofTranslate(320, 0); grayDiff.draw(0, 0); // desenha threshould ofTranslate(-320,240); contourFinder.draw(); //desenha contorno encontrado ofSetColor(ofColor::hotPink); ofDrawBitmapString("openCV Threshold: " + ofToString(threshold),50,50); ofTranslate(0,-240); ofFill(); ofSetColor(ofColor::green); ofCircle(apontador,5); //desenha bola verde no “dedo” } 09:19 fb.com/RVA.BR 109
  110. 110. Resultado desejado: 09:19 fb.com/RVA.BR 110
  111. 111. Só use mais hardware quando realmente precisar. 09:51 fb.com/RVA.BR 111
  112. 112. JUNTANDO TUDO. Controlar e monitorar Arduino em RA. 09:19 fb.com/RVA.BR 112
  113. 113. O que nós sabemos (em tese) até agora: •Como se localizar no openFrameworks •projectGenerator, ofApp.h, ofApp.cpp, métodos: setup,update,draw •Como transformar o Arduino numa interface de hardware, para sensores e atuadores. •Como, via openFrameworks: enviar comandos digitais, receber dados digitais e analógicos, enviar PWM, controlar um servo. •Utilizar marcadores do tipo ARToolKitPlus, e: descobrir a sua posição 3D e a sua posição 2D (na tela), verificar se ele foi encontrado. •Utilizar openCV para rastreio de cores, e a posteriori rastreio de mão/dedos – •usando uma webcam normal!!! •Suck it up Kinect!  09:19 fb.com/RVA.BR 113
  114. 114. Fluxograma simplificado 09:19 fb.com/RVA.BR 114 SETUP Configura Arduino, Câmera, ARToolkitPlus e Rastreio Aguarda Arduino Arduino alive – configura Arduino UPDATE Update Arduino Update Câmera + posições de Marcadores e apontador. Verifica interação marcador Verifica interação pointer DRAW Verifica interação Arduino
  115. 115. Funcionando! 09:19 fb.com/RVA.BR 115
  116. 116. WRAP-UP 09:19 fb.com/RVA.BR 116 O QUE APRENDEMOS HOJE
  117. 117. •Existe um framework easy (noob level) em C++ chamado openFrameworks. •openFrameworks pode ser expandido com componentes da comunidade, chamados addons. • Com ele é possível controlar o Arduino (em C++). •O Arduino pode se transformar numa interface de dados usando a lib Firmata. •Arduino é barato e fácil de usar. Um possível software para desenhar circuitos é o Fritzing •Realidade Aumentada é só uma interface de acesso aos elementos virtuais. 09:19 fb.com/RVA.BR 117
  118. 118. •ARToolKitPlus é um tipo de marcador para RA, que é mais rápido que o ARToolKit. •openCV é uma biblioteca de visão computacional. •Com openCV podemos rastrear cores, diferenças de padrão, etc. •Visão computacional nem sempre é um resultado por si. Ideal são soluções hibridas. •Adicionando elementos de interação físicos (sensores e atuadores) à Realidade Aumentada, que fazem a troca bidirecional de informação cria-se Realidade Cruzada. 09:19 fb.com/RVA.BR 118
  119. 119. 09:19 fb.com/RVA.BR 119
  120. 120. 120 Claudio Kirner1 and Christopher S. Cerqueira12 1Federal University of Itajubá – Universidade Federal de Itajubá (UNIFEI) 2National Institute for Space Research – Instituto Nacional de Pesquisas Espaciais (INPE) 1ckirner@gmail.com ,2christophercerqueira@gmail.com 1http://realidadevirtual.com.br/, 2http://cscerqueira.com.br Dúvidas: christophercerqueira@gmail.com Site: http://cscerqueira.com.br Facebook: http://fb.com/RVA.BR Para maiores dúvidas: INPE – SJC Prédio Satélite Sala 95

×