O documento discute a utilização da realidade aumentada no controle de um drone. Apresenta openFrameworks, Arduino e Firmata para controlar o drone via interface em openFrameworks. Também aborda capturar informações de marcadores via openFrameworks e movimento autônomo de drone com realidade aumentada no loop de controle.
9. [Motivação][Teoria]
Limitações de interfaces WIMP (Windows, Icon, Menu, Pointer)
Operações explicitas – as interfaces reduzem a carga
cognitiva das operações, só que não necessariamente
reduzem a quantidade de operações.
Desconhecimento do mundo real – as interfaces são
projetadas para o ambiente usuário – computador.
Lacunas entre o mundo real – as interfaces não
conseguem relacionar a modificação de objetos do mundo
real. (Rekimoto e Nagao, 1995)
Solução?!
07:59cscerqueira.com.br
13. [Motivação][Teoria]
Realidade Cruzada = Realidade Aumentada +
Artefatos inteligentes
“Realidade aumentada e uma interface baseada na
combinação de informações geradas
computacionalmente (imagens estáticas ou
dinâmicas, sons espaciais e sensações hápticas)
com o ambiente real do usuário, através de
dispositivos tecnológicos e utilizando interação
natural no mundo real.”
(Kirner 2011)
clássico
laserTag
oasis
lego
pokemon07:59cscerqueira.com.br
14. Realidade Cruzada = Realidade Aumentada +
Artefatos inteligentes
“Realidade Cruzada é um ambiente de realidade misturada
ubíqua formado 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 de realidade
aumentada, onde a troca de informação é bidirecional entre
os mundos reais e virtuais.”
(Kirner 2011)
(Kirner et al,
2012)
(Curso de Inverno – INPE 2015)
07:59cscerqueira.com.br
21. [MOTIVAÇÃO] Desafio da área espacial:
Docking – Acoplamento autônomo de
espaçonaves.
ISS Dock 01
ISS Dock 02
Dock for dummies
07:59cscerqueira.com.br
22. [ROTEIRO]
▪ Objetivos do evento proposto: Apresentar a utilização do
openFrameworks, Realidade Aumentada como ferramenta de
engenharia, utilização de Arduino e controle de motor DC.
▪ Conteúdo do evento proposto:
1. openFrameworks
2. Arduino e Firmata
3. Controlando o drone (baseado em Arduino) via Interface em
openFrameworks
4. Realidade Aumentada
5. Capturando informações do marcador via openFrameworks.
6. Movimento autônomo de drone com RA no loop de controle.
07:59cscerqueira.com.br
26. [openFrameworks]
oF
▪ Criado para artistase 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)
▪ Usar quando:
▪ O projeto renderiza muitos gráficos 3D, e/ou;
▪ Utilizar muita visão computacional, e/ou;
▪ Controlar equipamentos, como, por exemplo:
▪ o ARDUINO.
07:59cscerqueira.com.br
30. [openFrameworks]
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.
07:59cscerqueira.com.br
33. ERA TROGLODITA (C++)
▪ Graduação (2010):
▪ ARToolKit
▪ PTAMM
▪ Bolsista DTI (2011):
▪ basAR
ERA DO FOGO (C++/oF)
▪ Mestrado (2012):
▪ Doutorado (2014):
07:59cscerqueira.com.br
34. • Introdução à utilização de openFrameworks para o
desenvolvimento de aplicações de RVA
Link
• Construção de aplicações de Realidade Cruzada Projetiva
utilizando openFrameworks e ARDUINO
Link
• Utilização de Realidade Aumentada, com
marcadores(ARToolKitPlus) e outros (utilizando openCV), para
controle e inspeção de hardware, utilizando a interface
ARDUINO.
Link
07:59cscerqueira.com.br
• Construção de interfaces on-demand baseadas em Realidade
Aumentada Projetiva para Controle de Hardware (Arduino)
Link
50. [ARDUINO]
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.
▪O host resolve as lógicas de controle
muito mais rápido.
▪Desvantagens?!
▪Tem que ficar atrelado ao host!
07:59cscerqueira.com.br
51. Obs.: Mudança da nomenclatura
dos pinos após Firmata 2.3
(Arduino 1.0)
Tomar cuidado na hora de
desenvolver!!!!!!!!!!
07:59cscerqueira.com.br
52. [ARDUINO]
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.
07:59cscerqueira.com.br
http://arduino.cc/en/reference/firmata
77. [Realidade Aumentada]
Voltando ao mundo real
▪ openFrameworks + ARToolKitPlus.
▪ Add-on ofxARToolKitPlus.
▪ Descompactá-lo e salvar dentro de
<of>/addons
▪ Renomear, retirando o sufixo -master
07:59cscerqueira.com.br
78. [Realidade Aumentada]
Add-ons
▪ Utilizar o gerador automático e gerar com os seguintes add-
ons:
▪ ofxARToolKitPlus *Necessário compilar antes para o
c++ que vai usar
▪ ofxOpenCv (necessário para o ofxARToolKitPlus)
▪ ofxAssimpModelLoader
http://touch-base-br.blogspot.com.br/2014/09/openframeworks-083-
ofxartoolkitplus.html
07:59cscerqueira.com.br
79. [Realidade Aumentada]
Ajustando o projeto - caminhos
1. Configuration Properties Linker GeneralAdditional
Library Directories e inclua o caminho para a biblioteca, no
caso:
......addonsofxARtoolkitPluslibsARToolKitPluslibwin32
07:59cscerqueira.com.br
80. [Realidade Aumentada]
Ajustando o projeto - lib
1. Configuration Properties Linker Input
Additional Dependencies
incluir a lib:
ARToolKitPlus.lib
07:59cscerqueira.com.br
81. [Realidade Aumentada]
Lets code...
// testApp.cpp
#pragma once
#include "ofMain.h"
#include "ofxOpenCv.h" //Cabeçalho do OpenCV
#include "ofxARToolkitPlus.h" //Cabeçalho do ARToolKitPlus
class testApp : 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
int threshold; // Threshold da relação preto/branco
ofxCvColorImage colorImage; //imagem capturada pela câmera
ofxCvGrayscaleImage grayImage; //imagem em tons de cinza (mais rápida)
ofxCvGrayscaleImage grayThres;//imagem com threshold antes de ir pro artk
};
07:59cscerqueira.com.br
82. [Realidade Aumentada]
Configurando – testApp::setup()
//--------------------------------------------------------------
void testApp::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
grayThres.allocate(width, height); // reserva imagem ajustada
artk.setup(width, height); // inicia o ARToolKitPlus
threshold = 85; // threshold para a imagem ajustada
artk.setThreshold(threshold); // informa ao ARToolKitPlus que o ajuste
é externo
}
07:59cscerqueira.com.br
83. [Realidade Aumentada]
Rastreio - testApp::update()
//--------------------------------------------------------------
void testApp::update(){
vidGrabber.grabFrame(); // 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
//Como queremos testar o threshold temos que gerar essa imagem
grayThres = grayImage;
grayThres.threshold(threshold);
//Passa para o ARToolKitPlus a imagem monocromática
artk.update(grayImage.getPixels());
}
}
07:59cscerqueira.com.br
84. [Realidade Aumentada]
Exibindo - testApp::draw() – p1
//--------------------------------------------------------------
void testApp::draw(){
ofSetColor(ofColor::white); // inicia a cor dos objetos como branca
colorImage.draw(0, 0); // exibe a imagem capturada colorida
grayThres.draw(640, 0); // exibe a imagem adaptada
artk.draw(640, 0); // Esta função exibe a posição e etiqueta o marcador
// ARTK 3D
artk.applyProjectionMatrix();// aplicar a matriz de projeção da camera
int numDetected = artk.getNumDetectedMarkers(); //detectar os marcadores
ofEnableAlphaBlending(); //habilitar a transparência
07:59cscerqueira.com.br
85. [Realidade Aumentada]
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);
}
}
}
07:59cscerqueira.com.br
86. [Realidade Aumentada]
Alterando o threshold -
testApp::keyPressed(int key)
//--------------------------------------------------------------
void testApp::keyPressed(int key){
if(key == OF_KEY_UP) {
artk.setThreshold(++threshold); // aumenta o valor do threshold
} else if(key == OF_KEY_DOWN) {
artk.setThreshold(--threshold); // diminui o valor do threshold
} else if(key == 's') {
vidGrabber.videoSettings(); // chama a configuração da câmera
}
}
07:59cscerqueira.com.br
103. [Controlando Drone]
Já chegamos??
07:59cscerqueira.com.br 07:59cscerqueira.com.br 07:59cscerqueira.com.br
x
y
Ponto
Destino
Tolerância
Já
chegamos?
Rotacionar
// testa se está na direção correta
if ( (frenteVirtual - posicaoAtual).isAligned((posicaoDesejada - posicaoAtual),20)){
alinhado = true;
} else
{
........ Continua....
106. ▪ As coisas são mais fáceis do que imaginam
▪ Existe um framework em C++ chamado openFrameworks
▪ E ele é fera pois se comunica facilmente com Arduino
▪ Usar o Arduino como uma interface com HW é TOP,
▪ tem uma classe pronta, com todos os métodos
▪ O openFrameworks tem pacotes da comunidade que facilitam a
vida!
▪ Um deles é para RA – ARToolKitPlus
▪ O rastreio de marcadores permite capturar translações e rotações.
▪ Visão computacional é muito útil, para fechar a malha de controle,
rastrear fim de curso, rastrear posições de acoplagem.
07:59cscerqueira.com.br
107. Link para download dos códigos dos exemplos
▪http://www.4shared.com/folder/Cb1E5bxa/
WRVA2015.html
07:59cscerqueira.com.br
110. O INPE (Instituto Nacional de
Pesquisas Espaciais)
07:59cscerqueira.com.br
111. RV EM SIMULADORES OPERACIONAIS DE
SATÉLITE
RV EM SIMULADORES OPERACIONAIS DE SATÉLITE
07:59cscerqueira.com.br
112. SIMULADOR DE UM SENSOR DE ESTRELAS
COM RA
SIMULADOR DE UM SENSOR DE ESTRELAS COM
MARCADORES
113. Geração Automática
de Código Embarcável
m-file
s-file
Comunicação com
MATLAB/Simulink
Modelo do
EPS
Modelos /
Simulador
Circuito
Bateria
*FEE (Front End Equipment) – Estimulador/Sensor
FEE
UTILIZAÇÃO DE ARDUINO EM TESTBENCHS PARA
POTENCIALIZAR O USO DE MDE
115. Outras Iniciativas:
DESENVOLVIMENTO E APLICAÇÃO DE
RECURSOS DE REALIDADE AUMENTADA
EM VISUALIZAÇÃO DE DADOS DE
MISSÕES ESPACIAIS
RECONSTRUÇÃO GRÁFICA TRIDIMENSIONAL DE
EDIFICAÇÕES URBANAS A PARTIR DE IMAGENS AÉREAS
THE ROLE OF COMPUTATIONAL STEERING IN
SPACE ENGINEERING ACTIVITIES ASSISTED BY
MODELLING AND SIMULATION
116. Academicamente
▪ 7 Pós-Graduações:
▪ Astrofísica
▪ Engenharia e Tecnologia Espaciais
▪ Mecânica Espacial e Controle
▪ Combustão e Propulsão
▪ Ciência e Tecnologia de Materiais e Sensores
▪ Engenharia e Gerenciamento de Sistemas Espaciais
▪ Geofísica Espacial
▪ Computação Aplicada
▪ Meteorologia
▪ Sensoriamento Remoto
▪ Ciência do Sistema Terrestre
http://www.inpe.br/ci/
07:59cscerqueira.com.br
117. São José dos Campos - SP
▪ Capital econômica do Vale do Paraíba
▪ EMBRAER, GM, Johnson, Phillips,
Petrobras, Monsanto, Avibras, Mectron
(Odebretch).
▪ ~650k players (ops. Habitantes)
▪ ITA, INPE, IEAv, EAE, IP&D, UNIVAP,
UNIFESP
▪ Capital aeroespacial do país.
07:59cscerqueira.com.br