SlideShare une entreprise Scribd logo
1  sur  120
Télécharger pour lire hors ligne
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 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
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
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
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 computacional na Engenharia e Tecnologia Espacial. 
09:16 
fb.com/RVA.BR 
6
“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
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. 
9 
12/11/2014 
fb.com/RVA.BR
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
Interação 
11 
Texto, som, cores, visual, mecânico ou fisico. 
Interface 
Mensagens 
Usuário 
Sistema 
12/11/2014 
fb.com/RVA.BR
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 subjetiva 
13 
Meta- Mensagens 
Usuário 
Sistema 
12/11/2014 
fb.com/RVA.BR
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
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 
Evolução das interfaces 
9:16 
17
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 gerado por computador, usando seus sentidos através de equipamentos especiais. 
SOURCE: NASA (2013a) 
9:16 
20
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 (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
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 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
Milgram Continuum - interfaces 
SOURCE: Milgram et al. (1995) 
Aumento de elementos reais 
Aumento de elementos virtuais 
12/11/2014 
25 
fb.com/RVA.BR
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 
fb.com/RVA.BR
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++ 
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
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/RVA.BR
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
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
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 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
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) 
•Mestrado (2012): 
•Doutorado (2014): 
12/11/2014 
40 
fb.com/RVA.BR
•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
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.BR 
43
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
Exemplos 
09:17 
fb.com/RVA.BR 
45 
•Ex1.: 3D  pointPicker 
•Ex2.: graphics polylineBlobs 
•Ex3.: utilssorting 
•Ex4.: 3DcameraLensOffset 
•Ex5.: addonsassimp 
•(particulas)
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
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; 
} 
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; 
...
ARDUINO 
O que é? Onde vivem? 
Existe? Hoje no Glob.. 
Fritzing, Arduino 1.0, Firmata, exemplo openFrameworks 
09:17 
fb.com/RVA.BR 
52
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 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
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 Firmata Standard. 
•Transfira para a board. 
09:17 
fb.com/RVA.BR 
59 
http://arduino.cc/en/reference/firmata
“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() 
getDigitalPinMode() 
getPwm() 
getString() 
isArduinoReady() 
isInitialized() 
sendAnalogPinReporting() 
sendByte() 
sendDigital() 
sendDigitalPinMode() 
sendPwm() 
sendReset() 
sendString() 
setUseDelay() 
update() 
12/11/2014 
62 
fb.com/RVA.BR
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 
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
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);
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çõ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
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 
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 SW embarcado. 
ARToolKitPlus 
•Graz University of Technology 
•Compara códigos 
•ID-Encoded marker detection 
•Mais rápido 
•Bom para SW embarcado. 
75
ARToolKit 
76
ARToolKitPlus 
77
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
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
•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
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
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
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
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
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
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
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
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
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
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ção, 
3.Algoritmo de rastreio, 
4.Algumas sugestões de usos 
12/11/2014 
92 
fb.com/RVA.BR
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 imagem. 
12/11/2014 
94 
fb.com/RVA.BR
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 
OASIS
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://github.com/kylemcdonald/ofxCv) 
•Descompactá-lo e salvar dentro de 
<of>/addons 
•Renomear, retirando o sufixo –master 
•DICA: nenhuma dica, 
vai funcionar!!!  
100
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âmera Update 
Procura “padrão” 
DRAW
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
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
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
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
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
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
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
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é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
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
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 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
•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
09:19 
fb.com/RVA.BR 
119
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

Contenu connexe

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

Realidade aumentada.pptx
Realidade aumentada.pptxRealidade aumentada.pptx
Realidade aumentada.pptxArthur Felipe
 
1° BootCamp - Workshop Internet Das Coisas Para Sustentabilidade Ambiental
1° BootCamp - Workshop Internet Das Coisas Para Sustentabilidade Ambiental1° BootCamp - Workshop Internet Das Coisas Para Sustentabilidade Ambiental
1° BootCamp - Workshop Internet Das Coisas Para Sustentabilidade AmbientalGustavo Aquino
 
OpenDevice IoT - 2016 (LowLevel)
OpenDevice IoT - 2016 (LowLevel)OpenDevice IoT - 2016 (LowLevel)
OpenDevice IoT - 2016 (LowLevel)Ricardo Rufino
 
ArduinoDay 2015 - OpenDevice
ArduinoDay 2015 -  OpenDeviceArduinoDay 2015 -  OpenDevice
ArduinoDay 2015 - OpenDeviceRicardo Rufino
 
PSWoT: Uma plataforma para descoberta, publicação e autoconfiguração de servi...
PSWoT: Uma plataforma para descoberta, publicação e autoconfiguração de servi...PSWoT: Uma plataforma para descoberta, publicação e autoconfiguração de servi...
PSWoT: Uma plataforma para descoberta, publicação e autoconfiguração de servi...Nailton Andrade
 
Apresentacao minicursofinal
Apresentacao minicursofinalApresentacao minicursofinal
Apresentacao minicursofinalAlmerindo Rehem
 
Palestra customizacao vrlivre_sergio_gracas
Palestra customizacao vrlivre_sergio_gracasPalestra customizacao vrlivre_sergio_gracas
Palestra customizacao vrlivre_sergio_gracasCampus Party Brasil
 
Palestra customizacao vrlivre_sergio_gracas
Palestra customizacao vrlivre_sergio_gracasPalestra customizacao vrlivre_sergio_gracas
Palestra customizacao vrlivre_sergio_gracasCampus Party Brasil
 
Apresentacao joão tic educa 2012
Apresentacao joão tic educa 2012Apresentacao joão tic educa 2012
Apresentacao joão tic educa 2012jvilhete
 
Apresentacao joão tic educa 2012
Apresentacao joão tic educa 2012Apresentacao joão tic educa 2012
Apresentacao joão tic educa 2012jvilhete
 
Desenvolvimento multiplataforma em ambientes de programação nativos e abstr...
Desenvolvimento multiplataforma em ambientes de programação nativos e abstr...Desenvolvimento multiplataforma em ambientes de programação nativos e abstr...
Desenvolvimento multiplataforma em ambientes de programação nativos e abstr...Ráfagan Abreu
 
JustJava 2013: Aplicações Desktop HTML5, CSS3, Javascript com Servlets 3
JustJava 2013: Aplicações Desktop HTML5, CSS3, Javascript com Servlets 3JustJava 2013: Aplicações Desktop HTML5, CSS3, Javascript com Servlets 3
JustJava 2013: Aplicações Desktop HTML5, CSS3, Javascript com Servlets 3Loiane Groner
 
Webinar: Desenvolvimento de Interface Gráfica para Embarcados
Webinar: Desenvolvimento de Interface Gráfica para EmbarcadosWebinar: Desenvolvimento de Interface Gráfica para Embarcados
Webinar: Desenvolvimento de Interface Gráfica para EmbarcadosEmbarcados
 
php4android: desenvolva aplicações android em PHP
php4android: desenvolva aplicações android em PHPphp4android: desenvolva aplicações android em PHP
php4android: desenvolva aplicações android em PHPRamon Ribeiro Rabello
 
Latinoware 2019 - DEsenvolvimento mobile em Nivel jedi
Latinoware 2019 - DEsenvolvimento mobile em Nivel jediLatinoware 2019 - DEsenvolvimento mobile em Nivel jedi
Latinoware 2019 - DEsenvolvimento mobile em Nivel jediAlessandro Binhara
 

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

Realidade aumentada.pptx
Realidade aumentada.pptxRealidade aumentada.pptx
Realidade aumentada.pptx
 
Livro2011
Livro2011Livro2011
Livro2011
 
1° BootCamp - Workshop Internet Das Coisas Para Sustentabilidade Ambiental
1° BootCamp - Workshop Internet Das Coisas Para Sustentabilidade Ambiental1° BootCamp - Workshop Internet Das Coisas Para Sustentabilidade Ambiental
1° BootCamp - Workshop Internet Das Coisas Para Sustentabilidade Ambiental
 
OpenDevice IoT - 2016 (LowLevel)
OpenDevice IoT - 2016 (LowLevel)OpenDevice IoT - 2016 (LowLevel)
OpenDevice IoT - 2016 (LowLevel)
 
ArduinoDay 2015 - OpenDevice
ArduinoDay 2015 -  OpenDeviceArduinoDay 2015 -  OpenDevice
ArduinoDay 2015 - OpenDevice
 
OpenKinect, o Kinect para todos
OpenKinect, o Kinect para todosOpenKinect, o Kinect para todos
OpenKinect, o Kinect para todos
 
Palestra realidade aumentada
Palestra   realidade aumentadaPalestra   realidade aumentada
Palestra realidade aumentada
 
PSWoT: Uma plataforma para descoberta, publicação e autoconfiguração de servi...
PSWoT: Uma plataforma para descoberta, publicação e autoconfiguração de servi...PSWoT: Uma plataforma para descoberta, publicação e autoconfiguração de servi...
PSWoT: Uma plataforma para descoberta, publicação e autoconfiguração de servi...
 
Curso Básico Android - Aula 01
Curso Básico Android - Aula 01Curso Básico Android - Aula 01
Curso Básico Android - Aula 01
 
Apresentacao minicursofinal
Apresentacao minicursofinalApresentacao minicursofinal
Apresentacao minicursofinal
 
Palestra customizacao vrlivre_sergio_gracas
Palestra customizacao vrlivre_sergio_gracasPalestra customizacao vrlivre_sergio_gracas
Palestra customizacao vrlivre_sergio_gracas
 
Palestra customizacao vrlivre_sergio_gracas
Palestra customizacao vrlivre_sergio_gracasPalestra customizacao vrlivre_sergio_gracas
Palestra customizacao vrlivre_sergio_gracas
 
Apresentacao joão tic educa 2012
Apresentacao joão tic educa 2012Apresentacao joão tic educa 2012
Apresentacao joão tic educa 2012
 
Apresentacao joão tic educa 2012
Apresentacao joão tic educa 2012Apresentacao joão tic educa 2012
Apresentacao joão tic educa 2012
 
Desenvolvimento multiplataforma em ambientes de programação nativos e abstr...
Desenvolvimento multiplataforma em ambientes de programação nativos e abstr...Desenvolvimento multiplataforma em ambientes de programação nativos e abstr...
Desenvolvimento multiplataforma em ambientes de programação nativos e abstr...
 
JustJava 2013: Aplicações Desktop HTML5, CSS3, Javascript com Servlets 3
JustJava 2013: Aplicações Desktop HTML5, CSS3, Javascript com Servlets 3JustJava 2013: Aplicações Desktop HTML5, CSS3, Javascript com Servlets 3
JustJava 2013: Aplicações Desktop HTML5, CSS3, Javascript com Servlets 3
 
Webinar: Desenvolvimento de Interface Gráfica para Embarcados
Webinar: Desenvolvimento de Interface Gráfica para EmbarcadosWebinar: Desenvolvimento de Interface Gráfica para Embarcados
Webinar: Desenvolvimento de Interface Gráfica para Embarcados
 
Mergulhando no ecossistema .NET
Mergulhando no ecossistema .NETMergulhando no ecossistema .NET
Mergulhando no ecossistema .NET
 
php4android: desenvolva aplicações android em PHP
php4android: desenvolva aplicações android em PHPphp4android: desenvolva aplicações android em PHP
php4android: desenvolva aplicações android em PHP
 
Latinoware 2019 - DEsenvolvimento mobile em Nivel jedi
Latinoware 2019 - DEsenvolvimento mobile em Nivel jediLatinoware 2019 - DEsenvolvimento mobile em Nivel jedi
Latinoware 2019 - DEsenvolvimento mobile em Nivel jedi
 

Plus de Christopher Cerqueira

MICRO SATÉLITES BRASILEIROS, ELES EXISTEM?
MICRO SATÉLITES BRASILEIROS, ELES EXISTEM?MICRO SATÉLITES BRASILEIROS, ELES EXISTEM?
MICRO SATÉLITES BRASILEIROS, ELES EXISTEM?Christopher Cerqueira
 
Jornada Espacial 2018 - Cubesats: o que são e pra que servem
Jornada Espacial 2018 - Cubesats: o que são e pra que servemJornada Espacial 2018 - Cubesats: o que são e pra que servem
Jornada Espacial 2018 - Cubesats: o que são e pra que servemChristopher Cerqueira
 
[Thesis] Tangible Collaboration applied in Space Systems Concurrent Engineeri...
[Thesis] Tangible Collaboration applied in Space Systems Concurrent Engineeri...[Thesis] Tangible Collaboration applied in Space Systems Concurrent Engineeri...
[Thesis] Tangible Collaboration applied in Space Systems Concurrent Engineeri...Christopher Cerqueira
 
Using Finite State Machines From Concept to Realization
Using Finite State Machines From Concept to RealizationUsing Finite State Machines From Concept to Realization
Using Finite State Machines From Concept to RealizationChristopher Cerqueira
 
A Model Based Concurrent Engineering Framework using ISO-19450 Standard
A Model Based Concurrent Engineering Framework using ISO-19450 StandardA Model Based Concurrent Engineering Framework using ISO-19450 Standard
A Model Based Concurrent Engineering Framework using ISO-19450 StandardChristopher Cerqueira
 
Modelos e metodologias de projeto de sistemas
 Modelos e metodologias de projeto de sistemas Modelos e metodologias de projeto de sistemas
Modelos e metodologias de projeto de sistemasChristopher Cerqueira
 

Plus de Christopher Cerqueira (20)

MICRO SATÉLITES BRASILEIROS, ELES EXISTEM?
MICRO SATÉLITES BRASILEIROS, ELES EXISTEM?MICRO SATÉLITES BRASILEIROS, ELES EXISTEM?
MICRO SATÉLITES BRASILEIROS, ELES EXISTEM?
 
Jornada Espacial 2018 - Cubesats: o que são e pra que servem
Jornada Espacial 2018 - Cubesats: o que são e pra que servemJornada Espacial 2018 - Cubesats: o que são e pra que servem
Jornada Espacial 2018 - Cubesats: o que são e pra que servem
 
CI2018_Simuladores
CI2018_Simuladores CI2018_Simuladores
CI2018_Simuladores
 
CI2018_MBSE4.0
CI2018_MBSE4.0CI2018_MBSE4.0
CI2018_MBSE4.0
 
[Thesis] Tangible Collaboration applied in Space Systems Concurrent Engineeri...
[Thesis] Tangible Collaboration applied in Space Systems Concurrent Engineeri...[Thesis] Tangible Collaboration applied in Space Systems Concurrent Engineeri...
[Thesis] Tangible Collaboration applied in Space Systems Concurrent Engineeri...
 
XV Jornada do Espaço
XV Jornada do EspaçoXV Jornada do Espaço
XV Jornada do Espaço
 
Using Finite State Machines From Concept to Realization
Using Finite State Machines From Concept to RealizationUsing Finite State Machines From Concept to Realization
Using Finite State Machines From Concept to Realization
 
So 01 - processos
So   01 - processosSo   01 - processos
So 01 - processos
 
Redes 05 - aplicação
Redes   05 - aplicaçãoRedes   05 - aplicação
Redes 05 - aplicação
 
Redes 04 - transporte
Redes   04 - transporteRedes   04 - transporte
Redes 04 - transporte
 
Redes 03 - rede
Redes   03 - redeRedes   03 - rede
Redes 03 - rede
 
Redes 02 - enlace
Redes   02 - enlaceRedes   02 - enlace
Redes 02 - enlace
 
Redes 01 - topologia
Redes   01 - topologiaRedes   01 - topologia
Redes 01 - topologia
 
Intro heuristica
Intro heuristicaIntro heuristica
Intro heuristica
 
[Ci2017] Simuladores de Satélites
[Ci2017] Simuladores de Satélites[Ci2017] Simuladores de Satélites
[Ci2017] Simuladores de Satélites
 
MBSE e Espaço 4.0
MBSE e Espaço 4.0MBSE e Espaço 4.0
MBSE e Espaço 4.0
 
A Model Based Concurrent Engineering Framework using ISO-19450 Standard
A Model Based Concurrent Engineering Framework using ISO-19450 StandardA Model Based Concurrent Engineering Framework using ISO-19450 Standard
A Model Based Concurrent Engineering Framework using ISO-19450 Standard
 
Introdução à Engenharia Espacial
Introdução à Engenharia EspacialIntrodução à Engenharia Espacial
Introdução à Engenharia Espacial
 
CubeSats e Software Embarcado
CubeSats e Software EmbarcadoCubeSats e Software Embarcado
CubeSats e Software Embarcado
 
Modelos e metodologias de projeto de sistemas
 Modelos e metodologias de projeto de sistemas Modelos e metodologias de projeto de sistemas
Modelos e metodologias de projeto de sistemas
 

Dernier

PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...azulassessoria9
 
About Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de HotéisAbout Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de Hotéisines09cachapa
 
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdfPROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdfHELENO FAVACHO
 
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdfLeloIurk1
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...azulassessoria9
 
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de..."É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...Rosalina Simão Nunes
 
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdfGEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdfRavenaSales1
 
Atividade - Letra da música Esperando na Janela.
Atividade -  Letra da música Esperando na Janela.Atividade -  Letra da música Esperando na Janela.
Atividade - Letra da música Esperando na Janela.Mary Alvarenga
 
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcanteCOMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcanteVanessaCavalcante37
 
Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"Ilda Bicacro
 
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdfPROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdfHELENO FAVACHO
 
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptxTeoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptxTailsonSantos1
 
Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!Ilda Bicacro
 
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdfLeloIurk1
 
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdfApresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdfcomercial400681
 
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...azulassessoria9
 
Historia da Arte europeia e não só. .pdf
Historia da Arte europeia e não só. .pdfHistoria da Arte europeia e não só. .pdf
Historia da Arte europeia e não só. .pdfEmanuel Pio
 
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaPROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaHELENO FAVACHO
 
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdfPRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdfprofesfrancleite
 
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdfPROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdfHELENO FAVACHO
 

Dernier (20)

PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
 
About Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de HotéisAbout Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de Hotéis
 
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdfPROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
 
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
 
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de..."É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
 
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdfGEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
 
Atividade - Letra da música Esperando na Janela.
Atividade -  Letra da música Esperando na Janela.Atividade -  Letra da música Esperando na Janela.
Atividade - Letra da música Esperando na Janela.
 
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcanteCOMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
 
Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"
 
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdfPROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
 
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptxTeoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
 
Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!
 
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
 
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdfApresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
 
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...
 
Historia da Arte europeia e não só. .pdf
Historia da Arte europeia e não só. .pdfHistoria da Arte europeia e não só. .pdf
Historia da Arte europeia e não só. .pdf
 
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaPROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
 
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdfPRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
 
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdfPROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
 

[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. 09:16 1 fb.com/RVA.BR pt.slideshare.net/christophercerqueira christophercerqueira@gmail.com fb.com/RVA.BR
  • 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. 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. 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. O que teremos ao final do dia: 09:16 fb.com/RVA.BR 5
  • 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. “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. Valor de uma boa experiência 8 12/11/2014 fb.com/RVA.BR
  • 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. 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. Interação 11 Texto, som, cores, visual, mecânico ou fisico. Interface Mensagens Usuário Sistema 12/11/2014 fb.com/RVA.BR
  • 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. 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. Espera.... Visceral? 15 12/11/2014 fb.com/RVA.BR
  • 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
  • 19. Começo •1963 •Ivan Sutherland •51 ANOS Sutherland 9:16 19
  • 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. Billinghurst Vision 12/11/2014 21 fb.com/RVA.BR
  • 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. Christopher Vision Informação virtual Interação Natural dispositivos tecnológicos 12/11/2014 23 fb.com/RVA.BR
  • 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. 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. Kirner’s Diagram – elementos Source: (KIRNER et al., 2012) 12/11/2014 26 fb.com/RVA.BR M$ GRU Lego Cave 2L
  • 27. Realidade Cruzada Objetos reais Sensores e Atuadores Realidade Aumentada OCR NOCR NOCR Introdução 12/11/2014 27 fb.com/RVA.BR
  • 28. HIT - ROADMAP CR AI HI AR IoT HR KMatsuda 9:16 28
  • 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. Processing Adobe Flash Unity Cinder openFrameworks 31 12/11/2014 fb.com/RVA.BR
  • 32. openframeworks.cc 32 •Vídeo oF1..Media7_openFrameworks1.mp4 •Vídeo oF2..Media7_openFrameworks2.mp4 12/11/2014 fb.com/RVA.BR
  • 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. 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. Página Principal – openframeworks.cc 35 12/11/2014 fb.com/RVA.BR
  • 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. Addons da comunidade 09:16 fb.com/RVA.BR 37
  • 38. 38
  • 39. OSX, Linux, Windows, iOS, Android, Linux ARM 09:17 fb.com/RVA.BR 39
  • 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. •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. OPENFRAMEWORKS ROUND ONE 09:17 fb.com/RVA.BR 42
  • 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. 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. 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. 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. Onde encontrar? 09:17 fb.com/RVA.BR 47
  • 48. Level Easy: Gerador Automático 48
  • 49. Escolhendo expansões 49 Do core oF Da comunidade
  • 50. Estrutura do projeto 09:17 fb.com/RVA.BR 50
  • 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. ARDUINO O que é? Onde vivem? Existe? Hoje no Glob.. Fritzing, Arduino 1.0, Firmata, exemplo openFrameworks 09:17 fb.com/RVA.BR 52
  • 53. O que tem no ARDUINO? 12/11/2014 53 fb.com/RVA.BR
  • 54. Outras versões 12/11/2014 54 fb.com/RVA.BR
  • 55. Shields 12/11/2014 55 fb.com/RVA.BR
  • 56. FIRMATA Literatura indica FIRMATA: http://firmata.org/wiki/Download 12/11/2014 56 fb.com/RVA.BR
  • 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. Obs.: Mudança da nomenclatura dos pinos após Firmata 2.3 (Arduino 1.0) 09:17 fb.com/RVA.BR 58
  • 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. “esquemático” 12/11/2014 60 fb.com/RVA.BR •#crashcourse fritzing •http://fritzing.org/home/
  • 61. Arduino e openFrameworks 09:17 fb.com/RVA.BR 61
  • 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. Código no openFrameworks •Exploração do exemplo: communicationfirmataExample 09:17 fb.com/RVA.BR 63
  • 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. 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. 09:17 fb.com/RVA.BR 66 MatrixCube Robot Insect Weather Patchube
  • 67. Momento histórico: 2014-11-12 •Primeira aterrisagem num cometa •ESA. Missão Rosetta 16:06 fb.com/RVA.BR 67
  • 68. REALIDADE AUMENTADA Marcadores: ofxARToolKitPlus “sem marcadores”: ofxOpenCv, ofxCv 09:17 fb.com/RVA.BR 68
  • 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. 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
  • 72. 72 AREngine Tango Tango 9:17
  • 73. NUI Tangíveis Móveis Especializados Institutos iFORM Sand MYO META Kinect 9:17 73
  • 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
  • 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. 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. •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. 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. 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. 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. 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. 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. 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. 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. 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. 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
  • 91. USANDO OPENCV 09:19 fb.com/RVA.BR 91
  • 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. Cores RGB-A (red, green, blue)-alfa HSV (hue (cor), saturation, value) 12/11/2014 93 fb.com/RVA.BR
  • 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. Construção dos artefatos : Rastreio Cores 12/11/2014 95 fb.com/RVA.BR
  • 96. Bonus: Projection Mapping 12/11/2014 fb.com/RVA.BR 96 Audi case PM PM
  • 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. SVR2014 - Resultados 12/11/2014 98 fb.com/RVA.BR
  • 99. SVR2014 - Resultados 12/11/2014 99 fb.com/RVA.BR
  • 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. Exemplos interessantes •ofxCvexample-difference-Colummns •ofxCvexample-countours-advanced 09:19 fb.com/RVA.BR 101
  • 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. 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. 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. 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. 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. 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. 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. 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. Resultado desejado: 09:19 fb.com/RVA.BR 110
  • 111. Só use mais hardware quando realmente precisar. 09:51 fb.com/RVA.BR 111
  • 112. JUNTANDO TUDO. Controlar e monitorar Arduino em RA. 09:19 fb.com/RVA.BR 112
  • 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. 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
  • 116. WRAP-UP 09:19 fb.com/RVA.BR 116 O QUE APRENDEMOS HOJE
  • 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. •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
  • 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