Primeiros passos do desenvolvimento para o Kinect

O add-on para o Kinect da Microsoft foi disponibilizado faz algum tempo, e os gamers de todo o mundo podem desfrutar de “controlar sem controle”. Mas da perspectiva do hacker, o Kinect oferece muito mais coisas interessantes do que pular sobre arcos e estourar bolhas. Em algumas horas depois do lançamento do Kinect, alguns desenvolvedores criaram um driver open-source para o Kinect e se ocuparam no fornecimento de suporte a ele. Nesse momento, se tornou bem simples o processo para alguém com conhecimento de programação construir sua própria aplicação para o Kinect. Esse guia lhe guiará pelos passos para configurar o Kinect em seu computador, e por para funcionar um programa de análise de imagens trivial.

Enquanto existem agora drivers para Kinect disponíveis para .NET (que suportam câmera RGB, câmera de profundidade, acelerômetro, motor de acionamento e LED) esses drivers não são open-source. Porém, existem alguns drivers open-source disponíveis através do projeto OpenKinect no GitHub. Durante o tempo que é escrito suporte para OS X e Linux, esses drivers são desenvolvidos em ritmo acelerado, assim você pode encontrar mudanças em relação ao que foi publicado aqui. Para executar a demonsração, usaremos uma instalação padrão do ubuntu 10.04 LTS sem nenhuma grande modificação. Você não precisa anda mais que um dispositivo Kinect para esse tutorial.

Instalando as dependências

A partir da instalação básico do Ubuntu, você precisará de alguns pacotes extras para por tudo para funcionar. Esses dois são bastantes comuns, e talvez você já os possua:

sudo apt-get install git-core cmake 

Git-core instala o repositório de código-fonte que nos permitirá pegar o código para uso no projeto. Cmake é um utilitário que o projeto usa para pré-compilar o software para nós.

Os pacotes abaixo são menos comuns e muitas pessoas precisarão instala-los:

sudo apt-get install libusb-1.0-0-dev freeglut3-dev 

Note: the libusb-1.0-0-dev package is more commonly known as “libusb-1.0-dev” but it is named differently in the Ubuntu repository, if you’re using another platform or different version you may need to try the other one.
Libusb é uma biblioteca que permite a manipulação de forma fácil de dispositivos USB – torna o desenvolvimento de drivers um pouco mais fácil e facilita a comunicação. Freeglut é um pacote usado nos casos onde é necessário renderizar os dados da câmera na tela para visualização.

Após a instalação desses pacotes, estamos prontos para continuar.

Obtento o código-fonte

Como foi dito anteriormente, a comunidade open-source está trabalhando fervorosamente para aperfeiçoar e expandir o suporte ao Kinect  nos drivers. Por isso criamos uma tag em nosso código que garanta que exista uma demonstração estável que sempre funcione.

O mestre para todo esse código é hospedado pelo OpenKinect no GitHub. Se você quiser a última atualização do código pode busca-la aqui. Existem vários forks que trabalham na adição de acelerômetro, motor, LED e áudio, assim se você desejar algum desses recursos, pode queres dar uma olhada neles.

Porém, você pode usar o código desse artigo para demonstrar o algoritmo mostrado aqui. Você precisa clonar o código pelo GitHub e substituir as marcações corretas. Aqui também criaremos um diretório para armazenar o código.

cd mkdir kinect cd kinect git clone git://github.com/chrisalexander/libfreenect.git . git checkout depthdemo 

Isso moverá você para o seu diretório home; criará um diretório Kinect; clonará o repositório. mudará para uma marcação estável. Sinta-se livre para dar uma olhada no código e ver o que estás endo feito.

Compilando o código

Em primeiro lugar, precisamos rodar o CMake para o projeto, e depois simplesmente rodamos o comando make.

cd c mkdir build cd build cmake .. make 

Assumindo que não sem mostrados nenhum erro na saída dos comando cmake e make, você deve agora ter um arquivo chamado glview no diretório kinect/c/build/examples. Nesse momento, você tem que executa-los como root, pois ele não teve as permissões corretamente ajustadas, apesar disso provavelmente ser alterado em versões futuras. Agora é o momento onde você pode conectar seu Kinect ao porta USB do seu computador. Espere alguns segundos e execute:

sudo ./examples/glview 

Isso deve exibir uma janela contendo dois paineis. O da esquerda é um ponto de vista colorizado do campo de visão do Kinect. O da direita é a visão equivalente em RGB (cores padrões).

Ocasionalmente existirão erros de inicialização em uma ou outra câmera, e o painel não será exibido corretamente – simplesmente tecle Ctrl-C para sair e tentar novamente.

Demonstração

Você está pronto agora para testar o projeto que você executou. Rode a demonstração em uma área limpa com muito espaço. Fique a aproximadamente 2 metros do sensor do Kinect e estendendo a mão a sua frente deve mostrar a você uma cruz no ponto mais perto do sensor. Isso é o que foi detectado como o ponto mais próximo do sensor. Se você mexer sua mão no ar, deve ver esse ponto ser movimento na tela. Adicionalmente, você verá a posição x, y e z sendo exibida na tela. Essa versão do código também dispara as coordenadas via UDP, de forma que você pode usa-las em outra aplicação se quiser.

Suas modificações

Para essa prova de conceito simples, modificamos o código de renderização fornecido pelo OpenKinect para adicionar um algoritmo. Você pode ver essa alteração no arquivo glview.c na diretório kinect/c/examples.
A função main nesse arquivo inicializa o Kinect através da chamada ao driver. Também registra as duas funções de callback, uma que processa a informação da câmera RGB  na tela, e a outra que processa a câmera de profundidade.

Esse algoritmo executa uma detecção de proximidade de ponto muito simples sobre os dados da câmera de profundidade. A maneira que o SDK trabalha nessa versão é chamar a função de profundidade nesse arquivo. O primeiro argumento é um ponteiro para um array de uma dimensão de tamanho 640×480  contendo o mapeamento dos dados. Pela iteração sobre esse array para detectar o item mais próximo (usando uma aproximação de aproximadamente 50 elementos dentro de 10 unidades da profundidade de cada um), é fornecido uma algoritmo muito simples de detecção de proximidade. Esse dado é então passados para renderização e exibido como uma mapa colorizado na tela.

Conclusões

Esse artigo deve lhe dar a oportunidade de roda uma aplicação exemplo sobre o Kinect, e mostra como modificar o código para executar suas próprias aplicações. Existem atualmente algumas visualizações e aplicações com robótica brilhantes sendo demonstradas com o Kinect, e o futuro parece mais brilhante para a comunidade open-source.

Código-fonte

baixe aqui -> SourceCode

Traduzido de