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

Introdução

Apesar de todas as funcionalidades oferecidas pela versão atual, 1.4, ainda ele ainda não possui uma devida integração com joysticks. Por isso criei um pequeno emulador para converter comandos de joystick em teclas de teclado convencional, além de converter os controles analógicos em pseudo-sinais provenientes da PicoBoard (também encontrada aqui).

A PicoBoard dá aos programadores uma oportunidade de interagir com um dispositivo externo, fugindo dos convencionais mouse e teclado, que possui meios de interação especiais, como sensores de som, luz e quaisquer outros que possam ser conectados eletronicamente à placa.

Enfim, o emulador, chamado de PicoBoard Emulator, só se tornou possível graças à licença que o MIT colocou sobre o projeto da placa e graças a especificação da placa, também fornecida pelo MIT.

PicoBoard
PicoBoard
PicoBoard Emulator
PicoBoard Emulator

Download

Ao fazer o download do PicoBoard Emulator você concorda com os termos de uso do programa.

Windows 32 bits
Arquivo de instalação (exe, 220481 bytes)
Apenas o executável (zip, 138973 bytes)
Windows 64 bits
Arquivo de instalação (exe, 215967 bytes)
Apenas o executável (zip, 127271 bytes)

Para utilizar apenas a funcionalidade de conversão de joystick para teclado, basta fazer o download acima. Contudo, para utilizar a funcionalidade completa de emulação dos sensores da placa real, é necessário instalar algum software extra para realizar a comunicação entre o PicoBoard Emulator e o Scratch, como o com0com.

O com0com é um software que possibilita a comunicação entre processos através de comunicação serial virtual. É gratuito e pode ser baixado no próprio site do projeto (A versão utilizada durante os testes foi a 2.2.2.0).

O idioma padrão do programa é o Português. Caso você deseje utilizá-lo em outro idioma, você deve fazer o download de um arquivo Unicode de tradução que deve ser colocado na mesma pasta do arquivo executável.

Este download é necessário somente para aqueles realizando o download do arquivo executável, uma vez que o arquivo de instalação já contém uma opção para instalar o arquivo de tradução.

É possível, ainda, fazer o download dos scripts NSIS para criar seus próprios arquivos de instalação.

Esses são alguns jogos criados por mim, no Scratch, que costumo utilizar em demonstrações. Deixo eles aqui para que o pessoal baixe, modifique e melhore, sem dó! :)

Ping Pong 2D

Ping Pong 2DO Ping Pong 2D funciona no modo para um jogador (Solitário) e para dois jogadores (Com um amigo), bastando utilizar as setas para selecionar a opção desejada, confirmando com a tecla espaço.

O objetivo é não deixar que a bolinha quicante encoste nos cantos da tela. Para isso, os jogadores devem rebatê-la controlando pás verticais e horizontais. Perde aquele que chegar ficar com 0 vidas primeiro.
Quando estiver jogando sozinho, o objetivo é aguentar o máximo de tempo possível, sem deixar que as vidas cheguem à 0!

No modo para um jogador, é necessário utilizar a PicoBoard ou utilizar o PicoBoard Emulator e um joystick que tenha uma entrada analógica, pois o jogador irá controlar sozinho tanto as pás horizontais como verticais. As pás horizontais estão atreladas ao sensor "Resistência-A" do Scratch, e as verticais, ao sensor "Resistência-B".

No modo para dois jogadores:
- Jogador 1: controla as pás verticais com as teclas 2 (Sobe) e 8 (Desce)
- Jogador 2: controla as pás horizontais com as setas direita/esquerda do teclado

Fazer download (zip, 2296127 bytes)

Arremesso de Porcos

Arremesso de PorcosNesse jogo, o primeiro jogador controla um passarinho azul (twitter...) que deve fugir de um arremessador de porcos, controlado pelo segundo jogador.

Para controlar o pássaro:
- setas direita/esquerda para mover
- 1 para voar

Para controlar o arremessador, basta fazer um barulho alto que um porco é arremessado (o movimento é automático, controlado por um filtro passa-baixas simples).

A versão original utilizava o sensor de som da PicoBoard, porém foi adaptada para utilizar o microfone do computador (Dê uma olhada no começo do jogo sobre informações de onde parte das imagens do jogo foram baixadas!).

Fazer download (zip, 1348316 bytes)