ARToolKit: Criando aplicativos de Realidade Aumentada

Neste documento apresento a ARToolKit, uma biblioteca criada para facilitar o desenvolvimento de aplicativos com o recurso de realidade aumentada. Ou seja, a sobreposição de objetos virtuais e tridimensionais gerados por computador junto ao ambiente real.

[ Hits: 77.136 ]

Por: Alessandro de Oliveira Faria (A.K.A. CABELO) em 08/09/2009 | Blog: http://assuntonerd.com.br


Calibração e utilização



Calibração da câmera

As propriedades padrão da biblioteca ARToolKit encontram-se no arquivo de parâmetros da câmera, camera_para.dat, localizado na pasta ARToolKit/bin/Data. Este arquivo é carregado na inicialização da aplicação. Os parâmetros padrão abrangem um amplo conjunto de modelos e fabricantes de câmeras. Porém, sugiro a calibração da câmera conforme as instruções a seguir.

Em primeiro lugar, devemos imprimir os arquivos de calibração calib_cpara.pdf e calib_dist.pdf localizados na pasta patterns. O arquivo calib_cpara.pdf é uma grade de linhas e deverá ser impresso em escala para que as linhas fiquem separadas de exatamente 40 mm.

Já o arquivo calib_dist.pdf contém um padrão de 6x4 pontos e deverá também ser impressos em escala para que os pontos fiquem separados de 40 mm. Ambos deverão ser impressos em papéis papelão ou colados em superfícies rígidas.

A calibração da câmera é calculada extraindo ponto central, distorções da lente e a distância focal da câmera. O programa calib_dist é usado para calcular o ponto central da imagem e as distorções das lentes. Já o programa calib_param calcula a distância focal da câmera. Todos os fontes estão disponíveis para estudos. Primeiramente devemos executar o programa calib_dist e depois o calib_cparam.

Execute o programa calib_dist, aponte a câmera para o arquivo calib_dist.pdf impresso de tal modo que todos os pontos estejam visíveis. Então clique com o botão esquerdo do mouse para congelar a imagem de vídeo.
Linux: ARToolKit: Criando aplicativos de Realidade Aumentada.
Agora, pressione o botão esquerdo do mouse sobre a imagem e desenhe um retângulo em volta de cada ponto da imagem (segurando o botão do mouse pressionado). Inicie com o ponto mais próximo ao canto superior esquerdo da imagem e prossiga até que todos os pontos tenham sido desenhados. Repita este procedimento de 5 a 10 vezes em vários ângulos.
Linux: ARToolKit: Criando aplicativos de Realidade Aumentada.
./calib_dist "v4l2src device=/dev/video1 use-fixed-fps=false ! ffmpegcolorspace ! capsfilter caps=video/x-raw-rgb,bpp=24,width=960,height=720 ! identity name=artoolkit ! fakesink"
Using supplied video config string [videotestsrc v4l2src device=/dev/video1 use-fixed-fps=false ! ffmpegcolorspace ! capsfilter caps=video/x-raw-rgb,bpp=24,width=960,height=720 ! identity name=artoolkit ! fakesink].
libARvideo: GStreamer 0.10.22
libARvideo: GStreamer pipeline is PAUSED!
libARvideo: GStreamer negotiated 960x720
libARvideo: GStreamer pipeline is PLAYING!
libARvideo: GStreamer pipeline is PAUSED!
Camera image size (x,y) = (960,720)
libARvideo: GStreamer pipeline is PLAYING!

-----------
Press mouse button to grab first image,
or press right mouse button or [esc] to quit.
Grabbed image 1.

-----------
Press mouse button and drag mouse to rubber-bound features (6 x 4),
or press right mouse button or [esc] to cancel rubber-bounding & retry grabbing.
Marked feature position   1 of  24
Marked feature position   2 of  24
Marked feature position   3 of  24
Marked feature position   4 of  24
Marked feature position   5 of  24
Marked feature position   6 of  24
Marked feature position   7 of  24
Marked feature position   8 of  24
Marked feature position   9 of  24
Marked feature position  10 of  24
Marked feature position  11 of  24
Marked feature position  12 of  24
Marked feature position  13 of  24
Marked feature position  14 of  24
Marked feature position  15 of  24
Marked feature position  16 of  24
Marked feature position  17 of  24
Marked feature position  18 of  24
Marked feature position  19 of  24
Marked feature position  20 of  24
Marked feature position  21 of  24
Marked feature position  22 of  24
Marked feature position  23 of  24
Marked feature position  24 of  24

Para finalizar a captura pressione o botão direito do mouse. O programa começará a calcular os valores de distorção da câmera.

-----------
Press mouse button to grab next image,
or press right mouse button or [esc] to calculate distortion parameter.
[480,0, 360,0,   9,4] 1294,330078
[430,0, 310,0,   9,3] 1284,283364
                         [430,0, 315,0,   9,4] 1283,999911
                         [430,0, 320,0,   9,5] 1283,841552
               [430,0, 325,0,   9,6] 1283,816407
   [430,0, 325,0,   9,6] 1283,816407
[425,0, 323,0,   9,5] 1283,484534
[425,0, 323,0,   9,5] 1283,484534
Olen = 425,000000, Ilen = 432,696135
Olen = 535,000000, Ilen = 550,881766
Olen = 323,000000, Ilen = 326,300477
Olen = 397,000000, Ilen = 403,228407
--------------
Center X: 425,000000
       Y: 323,000000
Dist Factor: 9,500000
Size Adjust: 1,010218
--------------

-----------
Checking fit on image   1 of   5.
Press mouse button to check fit of next image.

Para verificar se estes parâmetros e/ou cálculos estão corretos, pressione o botão esquerdo do mouse para mostrar as imagens capturadas com as linhas vermelhas desenhadas passando pelos pontos de calibração. Estas linhas deverão se cruzar no centro de cada um destes pontos. Cada vez que o botão esquerdo do mouse é pressionado, a próxima imagem capturada é mostrada.
Linux: ARToolKit: Criando aplicativos de Realidade Aumentada.
Linux: ARToolKit: Criando aplicativos de Realidade Aumentada.

O calib_cparam, como mencionado anteriormente, é usado para encontrar a distância focal da câmera, além de outros parâmetros. Para continuarmos, execute o programa e informe as coordenadas do centro e o fator de distorção disponibilizado pelo aplicativo calib_dist.

Coloque o arquivo calib_cpara.pdf diante à câmera de tal modo que a imagem fique o mais perpendicular possível ao eixo óptico da câmera, e também todas as linhas devem ser visualizadas.
Linux: ARToolKit: Criando aplicativos de Realidade Aumentada.
Agora pressione o botão esquerdo do mouse para capturar a imagem. Logo a seguir aparecerá uma linha branca horizontal na imagem. Movimente a linha branca até cobrir a linha preta no topo e pressione ENTER. A linha movimenta-se para cima ou para baixo usando-se as teclas de seta para cima e para baixo. A linha pode ainda ser rotacionada no sentido horário e anti-horário usando as teclas de setas para a direita e para a esquerda. Repetir este processo com todas as linhas verticais e horizontais por 5 vezes. Ao terminar, informe o nome do arquivo e pronto.
Linux: ARToolKit: Criando aplicativos de Realidade Aumentada.
./calib_cparam
Input center coordinates: X = 425
                        : Y = 323
Input distortion ratio: F = 9.500000
Input size adjustment factor: S = 1.010218
Number of horizontal lines (7):
Number of vertical lines (9):
Number of iteration (5):
Distance among lines (40.000000):
Distance to move (100.000000):
Using supplied video config string [v4l2src device=/dev/video1 use-fixed-fps=false ! ffmpegcolorspace ! capsfilter caps=video/x-raw-rgb,bpp=24,width=960,height=720 ! identity name=artoolkit ! fakesink].
libARvideo: GStreamer 0.10.22
libARvideo: GStreamer pipeline is PAUSED!
libARvideo: GStreamer negotiated 960x720
libARvideo: GStreamer pipeline is PLAYING!
libARvideo: GStreamer pipeline is PAUSED!
Camera image size (x,y) = (960,720)

Grabbed image.
libARvideo: GStreamer pipeline is PLAYING!
Grabbed image.
libARvideo: GStreamer pipeline is PLAYING!
Grabbed image.
libARvideo: GStreamer pipeline is PLAYING!
Grabbed image.
libARvideo: GStreamer pipeline is PLAYING!
Grabbed image.
point_num = 315

--------------------------------------

SIZE = 960, 720
Distortion factor = 425,000000 323,000000 9,500000 1,010218
389,57470 -967,88703 -97,42965 0,00000
0,00000 594,43782 -644,58036 0,00000
0,00000 0,00000 1,00000 0,00000

--------------------------------------
Input filename: webcam3_para.dat

Para utilizar este arquivo de calibração, basta copiá-lo na pasta Data com o nome camera_para.dat.

Agora, para testar o funcionamento da realidade aumentada, execute o programa simpleTest e veja o resultado ao apresentar o arquivo pattHiro.pdf impresso para a câmera.

./simpleTest
Using config string from environment [v4l2src device=/dev/video1 use-fixed-fps=false ! ffmpegcolorspace ! capsfilter caps=video/x-raw-rgb,bpp=24,width=960,height=720 ! identity name=artoolkit ! fakesink].
libARvideo: GStreamer 0.10.22
libARvideo: GStreamer pipeline is PAUSED!
libARvideo: GStreamer negotiated 960x720
libARvideo: GStreamer pipeline is PLAYING!
libARvideo: GStreamer pipeline is PAUSED!
Image size (x,y) = (960,720)
*** Camera Parameter ***
--------------------------------------
SIZE = 960, 720
Distortion factor = 477,750000 395,250000 11,644444 1,012757
1051,42721 0,00000 474,75000 0,00000
0,00000 1089,14127 362,25000 0,00000
0,00000 0,00000 1,00000 0,00000
--------------------------------------
libARvideo: GStreamer pipeline is PLAYING!
Linux: ARToolKit: Criando aplicativos de Realidade Aumentada.

Princípio de desenvolvimento

Linux: ARToolKit: Criando aplicativos de Realidade Aumentada.
1. Inicialização: Inicializa o dispositivo de captura, carrega em memória o modelo impresso e carrega o parâmetros de calibração da câmera.
2. Captura um quadro.
3. Detecta as marcas do padrão na imagem.
4. Calcula a transformação relativa.
5. Desenha o objeto virtual sob o padrão detectado.
6. Finaliza o dispositivo de captura.

A aplicação ExView exibe a visão externa da câmera, como se a câmera estivesse sendo rastreada. Para executar este aplicativo, digite o comando ./exview na pasta bin.
Linux: ARToolKit: Criando aplicativos de Realidade Aumentada.
Vejam como é simples a funcionalidade do loop principal:

Captura o quadro.

arVideoCapNext();

Checa a visibilidade

k = -1;
for( j = 0; j < marker_num; j++ ) {
    if( patt_id == marker_info[j].id ) {
        if( k == -1 ) k = j;
        else if( marker_info[k].cf < marker_info[j].cf ) k = j;
    } }
if( k == -1 ) {
    contF = 0;
    argSwapBuffers();
    return;
}

Calcula a transformação relativa.

if( mode == 0 || contF == 0 ) {
    arGetTransMat(&marker_info[k], patt_center, patt_width, patt_trans);
}
else {
    arGetTransMatCont(&marker_info[k], patt_trans, patt_center, patt_width, patt_trans);
}
contF = 1;

Desenha o objeto:

draw( patt_trans );

Conclusão

ARToolKit é muito utilizado pelo fato de ser distribuído no modelo open source e para fins não comerciais, incentivando a liberdade para os usuários executarem, estudarem e modificarem os códigos-fontes da biblioteca conforme a sua necessidade.

Como sempre menciono: Colaborar atrai amigos, competir atrai inimigos...
Página anterior    

Páginas do artigo
   1. Introdução: O que é Realidade Aumentada e ARToolKit
   2. Download e instalação
   3. Calibração e utilização
Outros artigos deste autor

Como instalar um display LCD em seu servidor Linux

Zebra Barcode Reader: Lendo código de barras com a sua Webcam no Linux

Xtraceroute: O traceroute tridimensional

jKiwi: Simulando pintura de cabelo e novo visual com Software Livre

HairCAPTURE – Utilizando captura de vídeo em C++ (sem segredos)

Leitura recomendada

Blender para todos! - Parte II

O espelho do sol e da lua

Programação visual (módulo 2)

Água e submersos?

True3D*Shell: Um shell 3D e futurista para o seu GNU/Linux

  
Comentários
[1] Comentário enviado por wizard.slack em 08/09/2009 - 15:59h

Show de bola!
estava esperando esse artigo ser publicado. já vai para os favoritos!!
Parabéns Cabelo.

[2] Comentário enviado por markintux em 08/09/2009 - 16:19h

Mais um excelente artigo!

Uma dúvida: Existe algum site que mostra quais as webcams compativeis com v4l1 e v4l2? Esses softwares que você mostra, por exemplo o eviacam é compativel com qual driver? 1 ou 2? Se alguem souber agradeço!

Abraços e Parabéns Cabelo!

[3] Comentário enviado por removido em 08/09/2009 - 17:53h

Ótimo artigo.

[4] Comentário enviado por slipky em 09/09/2009 - 12:18h

Estava atrás disso, mas ainda não consegui fazer funcionar aqui, pode me ajudar? minha cam funciona apenas com o V4L2, e não esta compilando após aplicar o patch...

eis o que está acontecedo: http://pastebin.com/m28fb0655

[5] Comentário enviado por cleysinhonv em 09/09/2009 - 13:22h

Olá Cabelo,

Há bastante tempo tenho buscado ler os seus artigos, são ótimos bem escritos e autênticos, estava precisando de uma documentação dessa por que estou pretendendo fazer um trabalho de conclusão de curso envolvendo Realidade Aumentada e Sistemas de Informação Geográfica. Bom espero que eu tenha um bom êxito, usando essa documentação.

Parabéns!

[6] Comentário enviado por root_dog em 12/09/2009 - 16:17h

massa... ja configurei no ruindows agora vou tentar no linux...

[7] Comentário enviado por slipky em 13/09/2009 - 16:55h

comentei a linha no código onde estava dando erro ao compilar, e foi, porem ainda não esta rodando: http://pastebin.com/m2dfc45c7

[8] Comentário enviado por anonymous em 23/12/2009 - 15:26h

Artigo show de bola!!!!!!!!!!!!!!!

[9] Comentário enviado por cesar em 06/02/2010 - 23:13h

Show de bola...

Vou testar!

[]'s

[10] Comentário enviado por laercio.avelino em 12/04/2010 - 22:49h

Olá, eu adorei o tutorial, mas achei que as pessoas tiveram poucos problemas. Assim que ainda que outros tenham contribuído na sequencia, ainda não fui contemplado. Assim eu pergunto, qndo esses procedimentos não dão certo? :p

Vejamos:

1. Quando eu descompactei o Artoolkit, entrei no diretório e tentei executar o ./configure. Não foi possível, mas consegui o mesmo procedimento com ./Configure.

2. Color conversion should use x86 assembly (choose 'n' for 64bit systems)?
Enter : n

[eu não uso sistema 64bits, selecionei "Y".] »»Terei vacilado nesta parte?««

3. $ export ARTOOLKIT_CONFIG="-dev=/dev/video0 -palette=YUV420P -width=640 -height=480"
criei essa variável ambiental e como não me deu retorno algum, supus ter dado tudo ok! Até o próximo ponto:

4. $ cd bin/
$ ./videoTest
usuário@usuário:~/Downloads/artoolkit/ARToolKit/bin$ ./videoTest
bash: ./videoTest: Arquivo ou diretório não encontrado


»»» Foi aí que percebi que 1. não deu certo pq não segui os procedimentos; ou 2. ainda assim não seria possível pq não uso sistema 64bits. «««

De todas maneiras sou grato por sua ajuda, estamos em contato.

[11] Comentário enviado por igortx em 07/07/2010 - 09:49h

me encontrei no mesmo problema do rapaz acima... a variavel nao gera nada e nao consegui encontrar o videotest em bin... na verdade nao achei nada la :(

[12] Comentário enviado por rondinele_prado em 27/10/2010 - 23:23h

Olá, tem um bom tempo que estou tentando compilar a ARToolKit no linux, mas ainda não consegui, o videoTest não está na pasta bin, e quando uso uma outra versão ele diz:
No protocol specified
No protocol specified
freeglut (./simpleTest2): failed to open display ':0.0'

Gostaria de saber o motivo do erro.

[13] Comentário enviado por ShadowFox em 29/03/2011 - 22:26h

Pessoal... Será que não faltou um make && make install?

hehehe...

[14] Comentário enviado por charleskgb em 13/05/2011 - 11:55h

É necessario executar o make pra vc ter o videoTest na pasta bin. Se o make der erro durante a execucao, so vai instalando os pacotes do GStreamer que faltam e mais algumas coisinhas que o erro do make especifica.... usa o synaptic que ja empurra um bocado de pacotes necessarios.
Compila o make sem erros que o videoTest fica disponivel.

[15] Comentário enviado por wup4la1 em 01/03/2012 - 21:52h

Olá estou tentando configurar aqui fiz todos os passos ate a hora de executar o MAKE mas esta gerando um erro, alguém conhece esse tal erro:

make[2]: Entrando no diretório `/home/nome/ARToolKit/util/videoTest'
cc -o ../../bin/videoTest videoTest.o -L/usr/X11R6/lib -L../../lib -lARgsub -lARvideo -lAR -lglut -lGLU -lGL -lXi -lXmu -lX11 -lm -ljpeg
../../lib/libARvideo.a(video.o): In function `ar2VideoGetImage':
video.c:(.text+0x1b26): undefined reference to `ccvt_yuyv_rgb24'
collect2: ld returned 1 exit status
make[2]: ** [../../bin/videoTest] Erro 1
make[2]: Saindo do diretório `/home/nome/ARToolKit/util/videoTest'
make[1]: ** [all] Erro 2
make[1]: Saindo do diretório `/home/nome/ARToolKit/util'
make: ** [all] Erro 2



Obrigado

[16] Comentário enviado por Magrela_ em 19/06/2012 - 15:09h

Ollá Cabelo, estou tentando calibrar minha câmera para o artoolkit. segui os passos da instalação que vc postou com a ajuda de um amigo. Porém para os passos desse tópico quando eu clico na imagem da câmera com o direito ou com o esquerdo não acontece nada. o que será ue está acontecendo.

Detalhes: instalei o artoolkit em uma pasta nomeada Artoolkit 2.72.1 e ela aparece no menu LOCAIS, porém para abrir a pasta usei o comando:
# cd Artoolkit\ 2.72.1/

mas esse comando retorna isso como resposta: bash: cd: Artoolkit: Arquivo ou diretório não encontrado

eu só consigo abri a pasta e o vídeo teste com a pasta que eu descompatei em Documentos sempre seguindo os caminho:
$ cd Documentos
$cd Artolkit\ 2.72.1/
$cd bin
$./videoTest

Dessa forma abre mas nao consigo congelar a imagem da câmera como ensinado no seu tópico.


Fico grata se me responder com máximo de urgência!

OBS: querendo desenhevolver minha monografia com reliadade aumentada usando artoolkit!

[17] Comentário enviado por Magrela_ em 19/06/2012 - 16:28h

onde eu encontro e como executo pela LC o programa calib_dist? Deve ser essse o meu problema com a câmera conforme mencionei no post anterior logo acima.

[18] Comentário enviado por Magrela_ em 03/07/2012 - 00:24h

Gente eu pensei que podia ter executado algum passo erroneamente, então resolvi remover a pasta descompactada na minha pasta pessoal e reiniciar o processo , daí deu tudo certim, o nome da pasta ao abrir o diretório deve ser observando os caracteres maiúsculos e munúculos no nome do diretório salvo auomáticamente quando a gente baixa o artoolkit pelo $ wget . daí foi só começar o proximo passo de calibração.

é só seguir direitinho os passos do tutorial 1 que dá tudo certo. Acho que eu tava executando alguma coisa erroneamente na hora de congelar a imagem, mas depois que reinstalei deu tudo certim!

Agora é só alegria e estudar como desenvolver os prograaminhas. no proprio artoolkit tem um diretório que traz uns exemplos nao sei informar agora a localização dos mesmos.

dê uma olhada no artigo do segunto tópico dessa pesquisa:

http://www.google.com.br/#hl=pt-BR&output=search&sclient=psy-ab&q=como+desenvolver+aplica%C3%A7%C3%B...

Abraços!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts