Quando comecei a dar aulas de lógica e algoritmos na faculdade, foi proposto utilizar uma ferramenta para auxiliar o aprendizado daqueles que ainda estão dando seus primeiros passos nesse mundo da programação, o Scratch.

O Scratch, ferramenta desenvolvida pelo Lifelong Kindergarten Group, grupo que faz parte do Media Lab do Massachusetts Institute of Technology, MIT, oferece um ambiente inteiramente gráfico e bem amigável, o que sempre leva os alunos a querer desenvolver jogos. Normalmente são jogos simples, mas são jogos! :)

Introdução

Durante o Scratch Conference 2012, fui apresentado a uma ferramenta bastante interessante, capaz de fazer a integração entre o sensor Kinect e o Scratch, chamada de Kinect 2 Scratch. É uma ótima ferramenta, e só resolvi desenvolver o Kinect Translator por dois motivos:
- Aparentemente o Kinect2Scratch não tem algumas opções que procurei
- Senti que o Kinect2Scratch poderia ser mais "leve" :)

O Kinect Translator conecta-se ao Scratch através de uma conexão TCP/IP pela porta 42001, e só foi possível graças ao protocolo de rede aberto implementado pelo Scratch.

Passo a Passo

1 - Antes de conectar o sensor ao computador, verifique se você tem o Kinect for Windows Runtime v1.5 instalado, ou o Kinect for Windows Runtime v1.8 (para versões mais novas do Windows). (Se preferir, pode instalar o Kinect for Windows SDK para desenvolver suas próprias aplicações com o Kinect!)

2 - Caso seu sensor possua um conector USB (Kinect for Windows), pode pular para o próximo passo, caso contrário, você precisará de um adaptador que permita a conexão entre o Kinect e o computador. O adaptador é conhecido como "Adaptador para Sensor Kinect", "Fonte de Alimentação para Kinect", "Xbox 360 Kinect Power Supply", "Xbox 360 Kinect AC Adapter"...

Kinect Device3 - Boa parte dos problemas que podem surgir nas próximas etapas estão relacionados às duas etapas anteriores. Conectar o Kinect ao computador requer cuidado e atenção... Pode funcionar de primeira como pode precisar que você reinicie o computador da primeira vez que plugar o sensor depois de ter instalado os drivers... Tudo depende! Uma boa dica para garantir que o sensor está devidamente conectado e funcionando, é olhar o "Gerenciador de Dispositivos" do Windows (Device Manager) e procurar pelos itens como mostra a figura ao lado.
Outra dica é que nem sempre a luz verde do Kinect precisa estar sempre verde para indicar que tudo está indo bem. Em algumas combinações de sistema/sensor, o Kinect está funcionando bem mesmo com a luz verde piscando. Se ele não tiver uma luz acesa, ou tiver uma luz acesa de outra cor, como amarelo ou vermelho, há algo errado. Tem mais! Se você estiver utilizando o adaptador externo, o Kinect pode não funcionar mesmo estando com a luz verde piscando/acesa. Certifique-se de que o adaptador está com sua luz também acesa!
Se tudo mais der errado, tente o site de suporte da Microsoft

4 - Com o Kinect já conectado e funcionando, é hora de abrir o Scratch e ligar sua comunicação com o mundo externo. Para isso, abra o Scratch e vá para a guia "Sensores" (Sensing) e clique com o botão direito sobre o bloco "valor do sensor" (sensor value) para exibir o menu de opções e então selecionar a opção "habilitar conexões do sensor remoto" (enable remote sensor connections), como mostra a figura abaixo:
Scratch Sensing
* Caso você tenha um firewall ou algum programa similar instalado no sistema, deve liberar o acesso do Scratch à rede.

5 - Execute o Kinect Translator. Assim que é executado, o Kinect Translator tentará se conectar automaticamente ao Scratch e ao Kinect. O programa não possui uma janela, ele fica executando em segundo plano, sendo controlado através de um menu de opções que é exibido quando seu ícone é clicado. Caso ocorra um erro, uma mensagem é exibida no meio da tela.
Kinect Translator Tray
Sempre que o ícone estiver verde, significa que o programa está transmitindo dados para o Scratch.
Kinect Translator Tray
* Caso você tenha um firewall ou algum programa similar instalado no sistema, deve liberar o acesso do Kinect Translator à rede.

6 - Para utilizar os dados enviados pelo Kinect Translator, basta utilizar os blocos "valor do sensor" (sensor value) com a parte do corpo desejada. Por questões de desempenho e clareza, o Kinect Translator não envia todas as partes do corpo para o Scratch, sendo que você deve configurar quais são as partes do corpo desejadas (veja o próximo passo).
Por exemplo, o código abaixo faz com que um personagem siga a mão direita do jogador, sumindo toda vez que o jogador sair da frente do sensor, e aparecendo de volta quando o jogador volta para a frente do sensor.
Scratch Sensors
* Caso os nomes das partes do corpo não apareçam na listagem do Scratch, pode ser que seja preciso mover-se um pouco na frente do sensor.
** O número no final do nome do sensor indica a qual jogador pertence aquele valor (o Kinect Translator permite enviar os dados de até quatro pessoas simultaneamente)
*** O sensor "Presente1" indica se o jogador 1 está (1) ou não (0) na frente do sensor ("Presente2" para o jogador 2 e assim por diante...)
**** A mensagem "Presente1" é anunciada toda vez que o valor do sensor "Presente1" é alterado (idem para "Presente2" e assim por diante...)

7 - Para configurar quais partes do corpo devem ser enviadas, deve-se selecionar a opção "Editar arquivo de configuração...". O arquivo de configuração tem aproximadamente essa aparência:

...
PlayerCount=1
...
MinX=-240
MaxX=240
MinY=-160
MaxY=160
MinZ=0
MaxZ=400

Language=pt_BR

...
CenterHip=
Spine=
CenterShoulder=XY
Head=
LeftShoulder=XY
LeftElbow=
LeftWrist=
LeftHand=XY
RightShoulder=XY
RightElbow=
RightWrist=
RightHand=XY
...

PlayerCount indica quantos jogadores estarão presentes (1, 2, 3 ou 4).

MinX, MaxX, MinY, MaxY, MinZ e MaxZ indicam os limites dos valores que são transmitidos pelo programa. Os valores X e Y mostrados foram calibrados para que fiquem dentro dos limites da tela do Scratch. O valor Z mostrado foi calibrado para representar a distância em centímetros entre o jogador e o sensor.

A opção Language permite que você selecione em qual idioma o KinectTranslator funcionará. Por padrão a configuração vem o valor pt_BR, mas você pode alterar para qualquer outro idioma, desde que o idioma tenha seu arquivo de tradução devidamente criado (por padrão o Kinect Translator suporta apenas en e pt_BR).

Por fim, as opções com nomes de partes do corpo especificam quais coordenadas daquela parte devem ser enviadas para o Scratch. Pode ser uma combinação qualquer de X, Y e Z, como XY, XYZ, Y, X, e assim por diante. Caso esteja vazio, nenhuma coordenada será enviada para aquela parte do corpo.

Download (SDK v1.8)

Ao fazer o download do Kinect Translator você concorda com os termos de uso do programa.

Windows 32 bits
Apenas o executável (v 1.0.1) (zip, 70982 bytes)
Windows 64 bits
Apenas o executável (v 1.0.1) (zip, 29180 bytes)

Download (SDK v1.5, para computadores mais antigos)

Ao fazer o download do Kinect Translator você concorda com os termos de uso do programa.

Windows 32 bits
Apenas o executável (v 1.0.1) (zip, 61062 bytes)
Windows 64 bits
Apenas o executável (v 1.0.1) (zip, 66853 bytes)
O Kinect Translator está no GitHub! github.com/carlosrafaelgn/KinectTranslator