Índice:

Robô Nao que imita movimentos usando Kinect: 7 etapas
Robô Nao que imita movimentos usando Kinect: 7 etapas

Vídeo: Robô Nao que imita movimentos usando Kinect: 7 etapas

Vídeo: Robô Nao que imita movimentos usando Kinect: 7 etapas
Vídeo: Como fazer capturas de movimentos com Kinect e Unreal Engine 2024, Novembro
Anonim
Robô Nao imitando movimentos usando Kinect
Robô Nao imitando movimentos usando Kinect

Neste instrutível, explicarei como deixamos um robô Nao imitar nossos movimentos usando um sensor Kinect. O objetivo real do projeto é uma finalidade educacional: um professor tem a capacidade de gravar certos conjuntos de movimentos (por exemplo, uma dança) e pode usar essas gravações para permitir que as crianças em sala de aula imitem o robô. Ao passar por todo esse passo a passo instrutível, você deve ser capaz de recriar totalmente este projeto.

Este é um projeto relacionado à escola (NMCT @ Howest, Kortrijk).

Etapa 1: Conhecimento básico

Para recriar este projeto, você deve possuir alguns conhecimentos básicos:

- Conhecimento básico de python

- Conhecimento básico de C # (WPF)

- Conhecimento básico de trigonometria

- Conhecimento sobre como configurar MQTT em um framboesa pi

Etapa 2: Adquirindo os materiais necessários

Materiais necessários para este projeto:

- Raspberry Pi

- Sensor Kinect v1.8 (Xbox 360)

- Robô Nao ou robô virutal (Choregraph)

Etapa 3: como funciona

Image
Image
Como funciona
Como funciona

Um sensor kinect é conectado a um computador que executa o aplicativo WPF. O aplicativo WPF envia dados para o aplicativo Python (robô) usando MQTT. Os arquivos locais são salvos se o usuário assim o desejar.

Explicação detalhada:

Antes de iniciarmos a gravação, o usuário deve inserir o endereço IP do broker MQTT. Além disso, também precisamos do tópico sobre o qual queremos publicar os dados. Depois de clicar em iniciar, o aplicativo verificará se foi possível estabelecer uma conexão com o corretor e nos dará um feedback. Verificar se um tópico existe não é possível, então você é totalmente responsável por ele. Quando ambas as entradas estiverem OK, o aplicativo começará a enviar dados (coordenadas x, y e z de cada junta) do esqueleto que está sendo rastreado para o tópico no broker MQTT.

Como o robô está conectado ao mesmo broker MQTT e inscrito no mesmo tópico (isso também deve ser inserido no aplicativo Python), o aplicativo Python agora receberá os dados do aplicativo WPF. Usando trigonometria e algoritmos auto-escritos, convertemos as coordenadas em ângulos e radianos, que usamos para girar os motores dentro do robô em tempo real.

Quando o usuário termina a gravação, ele pressiona o botão parar. Agora o usuário recebe um pop-up perguntando se deseja salvar a gravação. Quando o usuário clica em cancelar, tudo é reiniciado (os dados são perdidos) e uma nova gravação pode ser iniciada. Se o usuário deseja salvar a gravação, deve inserir um título e clicar em 'salvar'. Ao clicar em 'salvar', todos os dados adquiridos são gravados em um arquivo local usando a entrada do título como nome do arquivo. O arquivo também é adicionado à visualização em lista no lado direito da tela. Dessa forma, após clicar duas vezes na nova entrada no listview, o arquivo é lido e enviado ao broker MQTT. Conseqüentemente, o robô executará a gravação.

Etapa 4: Configurando o MQTT Broker

Configurando o MQTT Broker
Configurando o MQTT Broker

Para a comunicação entre o kinect (projeto WPF) e o robô (projeto Python) usamos o MQTT. O MQTT consiste em um corretor (um computador Linux no qual o software mqtt (por exemplo, Mosquitto)) está sendo executado e um tópico no qual os clientes podem se inscrever (eles recebem uma mensagem do tópico) e publicar (eles postam uma mensagem sobre o tópico).

Para configurar o broker MQTT, basta fazer o download desta imagem jessie inteira. Esta é uma instalação limpa para o Raspberry Pi com um corretor MQTT nele. O assunto é "/ Sandro".

Etapa 5: Instalando o Kinect SDK V1.8

Para que o kinect funcione no seu computador, você deve instalar o SDK do Microsoft Kinect.

Você pode baixá-lo aqui:

www.microsoft.com/en-us/download/details.a…

Etapa 6: instalando o Python V2.7

O robô funciona com o framework NaoQi, este framework está disponível apenas para python 2.7 (NÃO 3.x), então verifique qual versão do python você instalou.

Você pode baixar o python 2.7 aqui:

www.python.org/downloads/release/python-27…

Etapa 7: codificação

Codificação
Codificação
Codificação
Codificação
Codificação
Codificação

Github:

Notas:

- Codificação com o kinect: primeiro você procura o kinect conectado. Depois de salvar isso dentro de uma propriedade, habilitamos o fluxo de cor e esqueleto no kinect. Colorstream é o vídeo ao vivo, enquanto skeletonstream significa que o esqueleto da pessoa na frente da câmera será exibido. O fluxo de cores não é realmente necessário para fazer este projeto funcionar, nós apenas o habilitamos porque o mapeamento de bitmap do fluxo de esqueleto para o fluxo de cores parece ótimo!

- Na realidade, é o esqueleto que faz o trabalho. Ativar o esqueleto significa que o esqueleto da pessoa está sendo rastreado. Deste esqueleto você recebe todos os tipos de informações, por exemplo. orientações ósseas, informações sobre as articulações, … A chave do nosso projeto eram as informações sobre as articulações. Usando as coordenadas x-y e z de cada uma das juntas do esqueleto rastreado, sabíamos que poderíamos fazer o robô se mover. Portanto, a cada 0,8 segundos (usando um cronômetro), publicamos as coordenadas x, y e z de cada uma das juntas para o corretor mqtt.

- Como o projeto python tem uma subscrição no corretor mqtt, agora podemos acessar os dados dentro deste projeto. Dentro de cada junta do robô há dois motores. Esses motores não podem ser dirigidos apenas usando as coordenadas x, y e z diretamente. Então, usando trigonometria e algum bom senso, convertemos as coordenadas x, y e z das articulações em ângulos subestáveis para robôs.

Então, basicamente a cada 0,8 segundos, o projeto WPF publica as coordenadas x, y e z de cada uma das juntas. Consequentemente, dentro do projeto python esses coordiantes são convertidos em ângulos, que são então enviados para os motores correspondentes do robô.

Recomendado: