Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Robô assistente autônomo da casa

Componentes e suprimentos

Arduino UNO
× 1
Arduino Braccio Robotic Arm
× 1
Odroid XU4
× 1
SparkFun EasyDriver - Driver de motor de passo
× 1
Motor de passo
× 1
Motorista L298
× 1
Motor DC (genérico)
× 4
GY-85 IMU
× 1
Mecanum Wheels
× 1
Hub USB 5V
× 1
Sensor Microsoft Kinect
× 1
OpenBuilds V-Slot Linear Rail
× 2
Placas OpenBuilds V-Slot Gantry
× 1
OpenBuilds Solid V Wheel Kit
× 4
Parafuso de avanço Acme de 0,8 m
× 1
Acoplador de eixo de 6 mm a 8 mm
× 1
Suporte de rolamento de 8 mm
× 1
Spring Wire de 1,2 m
× 1
Limit Switch
× 1
5V BEC
× 1
Variable DC-DC Conver
× 2
Bateria recarregável de 12 V 5000 mAh
× 1

Aplicativos e serviços online

Amazon Alexa Skills Kit
Amazon Web Services AWS Lambda
Sistema operacional do robô ROS
PubNub Publish / Assine API

Sobre este projeto





1. Introdução




Conheça O'nine! Um companheiro robótico doméstico pessoal que pode se mover, pegar objetos e cuidar da sua casa. Graças a Alexa, O'nine pode ouvi-lo e realizar tarefas programáveis, como alimentar seus peixes.

Este projeto espera estender os recursos do Alexa, fornecendo uma plataforma de robô escalável e aberta que pode realizar tarefas dinâmicas em um ambiente doméstico inteligente. As soluções atuais para casa inteligente exigem equipamentos personalizados, concebidos apenas para uma função específica. O'nine visa preencher essa lacuna, minimizando esses requisitos de hardware e usando a robótica como alternativa. A ideia é criar uma plataforma de comprovação de tecnologia para testar a viabilidade e a viabilidade do uso de robôs como mais um componente de um sistema de automação residencial. Esperamos poder responder a perguntas como " Faz sentido usar um robô para desligar unidades CA em vez de montar microcontroladores em todas as salas apenas para controlar todas as unidades CA? "pois o que costumava ser uma solução estática agora pode ser móvel com o auxílio de um robô.

Aqui está um vídeo de O'nine alimentando meus peixes.

TL; DW (Vídeo de lapso de tempo)

Vídeo completo.

Você quer dar uma olhada no seu bebê ou quem está na porta? O'nine tem uma câmera embutida, então você também pode pedir para tirar uma foto.

Este tutorial irá guiá-lo em como construir o robô e como criar uma habilidade Alexa que pode comandar o robô para realizar tarefas autônomas.





2. Arquitetura de alto nível


Em resumo, é assim que funciona a integração O'nine - Alexa:

1. O Amazon Echo Dot escuta o comando de voz.

2. A habilidade Alexa personalizada detecta a intenção.

3. A função AWS Lambda recebe a solicitação do Amazon Alexa Skill e publica no broker MQTT PubNub.

4. O'nine recebe dados assinando o corretor MQTT.

5. O'nine executa a tarefa necessária de forma autônoma.





3. Hardware


3.1 Base do Robô

Conecte os componentes conforme mostrado abaixo. Este circuito traduz todos os comandos de velocidade enviados do ROS Navigation Stack em movimentos do motor. O firmware inclui um controlador PID para manter a velocidade necessária usando o feedback dos encoders do motor.

Algumas fotos da base do robô montada.

O chassi do robô é um contêiner de lata de papel A4 reciclado. Você também pode usar a caixa de plástico velha para alojar seus componentes.

Você pode conferir meu projeto Linorobot para um tutorial abrangente sobre como construir robôs compatíveis com ROS DIY.

3.2 Vertical Aumento Circuito (Armar Pai)

Conecte os componentes conforme mostrado abaixo. Este circuito controla a elevação vertical do braço e traduz a altura necessária enviada por http://moveit.ros.org/ em movimentos de passo. Este é um sistema Open-Loop que calcula a altura atual do braço correlacionando o número de passos dados em distância em milímetros. O microcontrolador também retransmite os dados enviados do MoveIt para o braço robótico que está montado na plataforma vertical móvel.

Aqui estão as fotos do circuito montado para o elevador vertical.

O cabo em espiral aloja os fios Tx / Rx para comunicação serial entre o circuito de elevação vertical e o controlador do braço robótico, e alimentação de + 12 V DC para alimentar o braço robótico.

3,3 Robótica Armar Controlador ( Armar Criança )

Conecte os componentes conforme mostrado abaixo após montar o braço robótico e empilhar sua blindagem no Arduino Uno. Este circuito se comunica com o braço pai por meio de comunicação serial. Os dados recebidos são uma matriz de ângulos necessários para cada junta que é usada para acionar os servo motores.

Aqui estão as fotos do controlador de braço robótico montado e empilhado em um Arduino Uno.

E mais alguns para mostrar o resto das peças mecânicas de O'nine.

3.4 Integrar todos os circuitos

Finalmente, conecte todos os circuitos que você ligou anteriormente, conforme mostrado abaixo. O diagrama também mostra como alimentar cada circuito:





4. Software


Observe que este projeto deve ser executado em duas máquinas Linux (Ubuntu 14.04 ou 16.04). Uma máquina de desenvolvimento para executar o MoveIt e visualização de dados (Rviz) e outra máquina (placa de desenvolvimento ARM) para executar o pacote de navegação do robô e drivers de hardware / sensor.

Clique aqui para placas de desenvolvimento com suporte para ROS que você pode usar para o robô (de preferência 2 GB de RAM).

4.1 Instalação ROS

Instale o ROS em ambas as máquinas:
  git clone https://github.com/linorobot/rosmecd rosme./install  

O instalador detecta automaticamente o sistema operacional e a arquitetura da máquina, para que você não precise se preocupar com a versão do ROS a ser instalada.

4.2 ROS Pacotes Instalação

4.2.1 Instale o seguinte na máquina de desenvolvimento:
  cd ~ / catkin_ws / srcgit clone https://github.com/linorobot/lino_pidgit clone https://github.com/linorobot/lino_msgsgit clone https://github.com/linorobot/lino_visualizecd .. &&catkin_make  

4.2.2 Instale o Linorobot no computador do robô (base do robô):
  git clone https://github.com/linorobot/lino_installcd lino_install./install mecanum kinect  

Isso instala o firmware da base do robô, software de navegação e drivers de hardware / sensor.

4.2.3 Instale o pacote O’nine em ambas as máquinas:
  cdgit clone https://github.com/grassjelly/onine_installcd onine_install./install  

Isso instala o firmware do braço robótico, o solucionador de cinemática e as tarefas autônomas do Onine.

4.2.4 Instale alexa_tasker:
  cd ~ / onine_ws / srcgit clone https://github.com/grassjelly/onine_alexacdcatkin_make  

Isso faz o download do cliente MQTT que vincula O'nine e alexa. O pacote também contém o aplicativo NodeJS que será compactado como um arquivo zip e carregado no AWS Lambda.





5. Configuração do software


5.1 Configuração Para cima Alexa Skill

5.1.1 Cadastre-se e faça login

Crie uma conta de desenvolvedor Alexa aqui e clique em 'Iniciar a Habilidade ' :

Digite seu endereço de e-mail e senha:

5.1.2 Comece uma habilidade Alexa

Clique em 'Obter Iniciado ' Sob o kit Alexa Skills.

Clique em 'Adicionar a Novo Habilidade ' em o topo certo de o janela:

5.1.3 Informações de habilidade

Marque 'Personalizado Interação Model ' em Tipo de habilidade.

Digite o nome de sua habilidade (opcionalmente, o nome do seu robô) em 'Nome'.

Digite o nome de invocação de sua habilidade (nome para ativar sua habilidade) em 'Invocação Nome '.

Clique em 'Avançar'.

5.1.4 Modelo de interação

Copie e cole os códigos de https://github.com/grassjelly/onine_alexa/blob/master/lamda/assets/schema.json para 'Esquema de intenção' .

Copie e cole os códigos de https://github.com/grassjelly/onine_alexa/blob/master/lamda/assets/utterances.txt em 'Amostra Enunciados '.

Clique em ' Avançar'.

5.1.5 Configuração de habilidade

Copie seu App Skill ID do canto superior esquerdo e pule para a etapa 5.2 para criar uma função Lambda. Anote o nome do recurso Amazon quando terminar de criar a função.

Marque 'AWS Lambda ARN ' e digite seu ARN na guia padrão.

Clique em 'Avançar'.

5.1.6 Testando a habilidade

Digite o comando de voz em 'Enter Expressão ' e clique em ' Pergunte '

Você pode verificar se sua habilidade funciona se houver uma resposta em 'Serviço Resposta '.

5.2 Configuração Função Up Lambda

5.2.1 Cadastre-se e faça login

Crie uma conta AWS Lamda aqui e clique em 'Assinar Em para Console ' em o topo certo de o janela :

Digite seu endereço de e-mail e senha.

5.2.2 Criar Função Lambda

Clique em ' Criar Função ' no canto superior direito da janela para começar a fazer a função Lambda.

Escolha 'NodeJS 4.3' em Runtime *.

Escolha 'Escolher um existente função ' em Função *.

Escolha 'lambda_basic_execution' em Função existente *.

Clique em ' Criar Função' .

5.2.3 Link up Alexa

Adicione um acionador e escolha 'Alexa Habilidades Kit '

Digite sua habilidade Alexa 'skill id' em Skill ID.

em seguida, clique em 'Adicionar'.

5.2.4 Faça upload do aplicativo

Antes de criar a função, copie e cole as chaves Pub-Sub do PubNub no código da função.
  cd ~ / onine_ws / src / onine_alexa / lambda / appnano  

Agora gere o arquivo zip que será enviado ao AWS Lambda:
  cd ~ / onine_ws / src / onine_alexa / lambda / appnpm install./zipme  

Isso irá compactar a função lambda e node_modules necessários em um arquivo .zip

Em Código de Função, escolha 'Upload a .ZIP Arquivo ' sob o tipo de entrada de código.

Clique em 'Upload' e escolha Onine.zip criado anteriormente para fazer upload.

Clique em 'Salvar' em o topo certo de o janela.



Agora sua função Lambda está concluída.

5.3 Criação de conta PubNub

5.3.1 Cadastre-se e faça login

Crie uma conta PubNub aqui.

Digite seu e-mail e senha:

5.3.2 Criar um novo aplicativo PubNub

Clique em 'Criar Novo APP ' em o topo certo de o janela :

Digite o nome do seu aplicativo em ' App Nome ' :

5.3.3 Grave seu pubilsh e as chaves de assinatura.

5.3.4 Digite suas chaves de publicação e assinatura nessas linhas.

5.4 Criação Pusover Notificações

O'nine usa Pushover para enviar fotos para o telefone do usuário. Cadastre-se aqui e baixe o aplicativo para receber fotos do O'nine quando pedir para verificar algo dentro de casa.

5.4.1 Entrar no Pushover

e digite seu e-mail e senha:

Anote sua chave de usuário depois de fazer o login com sucesso.

5.4.2 Criar um aplicativo

Clique em ' Aplicativos e plug-ins' no topo da janela. Clique em 'Criar a Novo Aplicativo / Token de API ' .

Digite o nome do aplicativo em 'Nome' .

Escolha 'Aplicativo' em 'Tipo'.

Digite qualquer descrição do aplicativo.

Clique em 'Criar Aplicativo '.

Uma vez feito isso, registre seu token de API.

5.4.3 Copie e cole seu token de aplicativo e chave de usuário no 'snaptask' de O'nine.

5,5 Instalando o firmwares

5.5.1 Regras do uDev

As portas seriais dos microcontroladores são definidas usando seus nomes estáticos nos arquivos roslaunch. Para que as portas seriais sejam lembradas e vinculadas a seus nomes estáticos, uma regra uDev deve ser criada. Execute a ferramenta uDev no computador do robô.
  rosrun lino_udev lino_udev.py  

Conecte a placa Teensy da base do robô e digite "linobase". Faça o mesmo para o circuito de elevação vertical e nomeie-o como "oninearm". Salve suas regras do uDev pressionando CTRL + C.

Copie as regras do udev salvas para /etc/udev/rules.d:
  sudo cp 58-lino.rules /etc/udev/rules.d/58-lino.rules  

Reinicie o udev:
  sudo service udev reloadsudo service udev restart  

Confirme se as regras do uDev funcionaram:
  ls / dev / linobasels / dev / oninearm  

Se as portas não forem detectadas, reinicie o computador do robô e verifique novamente.

5.5.2 Upload do firmware da base do robô

Antes de fazer o upload do firmware da base do robô, você deve definir as especificações dos seus componentes, como o diâmetro da roda, PPR do codificador, etc. Clique aqui para configurar o seu robô.

Conecte a placa Teensy da base do robô ao computador do robô e execute:
  roscd linorobot / firmware / teensyplatformio run --target upload  

5.5.3 Upload de firmware do elevador vertical

Conecte a placa Teensy do elevador vertical ao computador do robô e execute:
  cdplatformio run --target upload  

5.5.4 Carregar firmware do controlador do robô

Conecte o Arduino Uno ao computador do robô e execute:
  cdplatformio run --target upload  

Lembre-se de desconectar o Arduino Uno após fazer o upload dos códigos, pois os dados recebidos são retransmitidos através da placa Teensy do Vertical Lift usando comunicação serial.

5,6 Editando Linorobots códigos

Você tem que editar algumas linhas nos arquivos de inicialização do Linorobot (base do robô) para adicionar os drivers necessários para executar o Onine.

5.6.1 Anexe o seguinte após esta linha em bringup.launch.
         

Isso adiciona o pacote de software necessário para falar com o microcontrolador do elevador vertical e definir as transformações do Onine (localização das peças mecânicas do Onine no espaço 3D).

5.6.2 Altere esta linha para:
    

Isso é para criar um quadro virtual que será usado para traduzir os dados da nuvem de pontos lidos do Kinect em dados de varredura a laser 2D.

5.6.3 Comente esta linha porque as transformações para este link já estão definidas no arquivo URDF do Onine.

5.6.4 Substitua as seguintes linhas para:
        

Isso executa o pacote de software para traduzir os dados do pointcloud lidos do Kinect em dados de varredura a laser 2D.

5.6.5 Substitua o quadro de referência de base do Linorobot de base_link para base_footprint:

Mudar de ' base_link 'para' base_footprint ' na seguinte:

linorobot / launch / amcl.launch

linorobot / launch / slam.launch

linorobot / param / navigation / global_costmap_params.yaml

linorobot / param / navigation / local_costmap_params.yaml

linorobot / src / lino_base_node.cpp - linha 90

linorobot / src / lino_base_node.cpp - lino 111

5.6.6 Recompile o nó odometria:
  cd ~ / linorobot_wscatkin_make  

5.7 Configuração para cima O'nine's objeto detector

Para tornar mais fácil para O'nine detectar objetos, ele usa marcas AR para distinguir objetos de interesse ao executar tarefas de escolha e colocação. Conceito semelhante a estes robôs:







Imprima a imagem abaixo e cole no objeto que você deseja que O'nine pegue. A dimensão da imagem deve ser 2cm x 2cm. Esses números são arbitrários, mas lembre-se de alterar a dimensão no arquivo de inicialização do tracker do Onine.

O software de percepção usado é http://wiki.ros.org/ar_track_alvar. Isso pode ser facilmente substituído se você preferir usar seu próprio software de detecção de objeto ou usar alguns outros pacotes compatíveis com ROS, como:

http://wiki.ros.org/find_object_2d

http://wiki.ros.org/tabletop_object_detector





6. Executando a demonstração


Certifique-se de configurar sua rede antes de iniciar a demonstração. Confira esta rede ROS para um tutorial mais abrangente.

6.1 Criação o mapa

O'nine usa um mapa pré-criado para se localizar e planejar seu caminho ao navegar pela casa. Execute o seguinte para criar um mapa:

No computador do robô, abra 2 novas janelas de terminal. Execute bringup.launch:
  roslaunch linorobot bringup.launch  

Execute slam.launch:
  roslaunch linorobot slam.launch  

No computador de desenvolvimento, abra 2 novas janelas de terminal:Execute teleop_twist_keyboard:
  rosrun teleop_twist_keyboard teleop_twist_keyboard.py  

Execute o rviz:
  roscd lino_visualize / rvizrviz -d slam.rviz  

Usando teleop_twist_keyboard, dirija o robô ao redor da área que você deseja mapear.

Assim que terminar o mapeamento, salve o mapa executando map_server no computador do robô:
  rosrun map_server map_saver -f ~ / linorobot_ws / src / linorobot / maps / map  

Verifique se map.pgm e map.yaml foram salvos:
  roscd linorobot / mapsls -a map.pgm map.yaml  

Altere o mapa chamado em navigate.launch para carregar seu próprio mapa. Altere 'house.yaml' para 'map.yaml' .

6.2 Obtendo coordenadas de metas desejadas

Quando você pede a O'nine para realizar uma tarefa que requer navegação autônoma dentro da casa, ele precisa saber as coordenadas do ponto onde deve fazer o trabalho.

Você pode ecoar essas coordenadas inscrevendo-se em move_base_simple / goal e apontando o local de destino em Rviz.

SSH para o computador robô e execute o seguinte:

Execute bringup.launch:
  roslaunch linorobot bringup.launch  

Em outro terminal, execute a pilha de navegação:
  roslaunch linorobot navigate.launch  

Execute Rviz em seu computador de desenvolvimento:
  roscd lino_visualize / rvizrviz -d navigate.rviz  

Abra outro terminal em seu computador de desenvolvimento e execute:
  rostopic echo move_base_simple / goal  

Isso irá ecoar as coordenadas e direção da pose alvo que você clicará em Rviz.

No Rviz, clique no ponto que está a aproximadamente 1 metro de distância de onde você deseja que o robô execute a tarefa e arraste para onde o robô deve estar voltado quando atingir seu objetivo. (1 caixa em Rviz é igual a 1 metro quadrado).

Copie as coordenadas na janela onde você exibe ' move_base_simple / goal '

Edit onine/onine_apps/scripts/fishtask.py and replace Point(x,y,z) with position/x position/y, and position/z from the echoed values. Replace Quaternion(x,y,z,w) with orientation/x, orientation/y, orientation/z, and orientation/w from the echoed values.

6.3 Running O'nine

6.3.1 Open a new terminal on the development computer and run the ROSCORE:
roscore 

Open three new terminals on the development computer and SSH to the robot computer.

6.3.2 Run robot base's and robotic arm's driver:
roslaunch linorobot bringup.launch 

6.3.3 Run the navigation software on the second terminal:
roslaunch linorobot navigate.launch 

6.3.4 Run the object detection software on the third terminal:
roslaunch onine_apps ar_tracker.launch 

On the development computer open two new terminals.

6.3.5 Run MoveIt software:
roslaunch onine_moveit_config demo.launch  

This will run all the software required to move the robotic arm and open Rviz for data visualization.

6.3.6 Run the PubNub client which launches the autonomous task upon voice command through Amazon Echo Dot:
rosrun onine_alexa alexa_tasker.py 

6.3.7 Before talking to executing voice commands, you have to help O'nine localize relative to the map.

On Rviz, click '2D Post Estimate' and click on the map the approximate location of the robot and drag towards O'nine's current heading.

Once O'nine is localized, you're now ready to command Alexa to ask Onine to perform tasks.

Have fun with your new personal home assistant robot!





7. Future Works


7.1 O'nine simulation model

Building the hardware can be time consuming and tedious. I'm planning to create a Gazebo simulation model so that users can play around with O'nine without the need of a hardware. This way, O'nine's Alexa Custom skill can be tried purely with software.

7.2 Better computing power

The first ARM board I used to run O'nine was an Nvidia Jetson TK1 which comes in nifty for computer vision applications. Due to power reasons I replaced it with an Odroid XU4 as it only requires 5V and has a smaller form factor. I'm currently eyeing on a Rock64 board which has 4GB of RAM and hopefully get more juice to run more applications concurrently. The current setup requires to offload some of the applications to my laptop and has to be hardwired to the dev board (ethernet cable) as there's a huge stream of data running across both machines.

Código

O'nine Software
Contains all robotics related code - Autonomous Navigation, Kinematics Solver, and high level scripts to accomplish pick and place tasks.https://github.com/grassjelly/onine
Alexa - Robot integration
Contains all the codes that integrate Alexa Skill with the robotics system - Lambda App (NodeJS), Robot Tasker (A PubNub client that waits for Alexa commands and runs high level scripts to perform robot tasks).https://github.com/grassjelly/onine_alexa
Robot Base
This is another project of mine - Linorobot. It is a suite of Open Source ROS compatible robots that aims to provide students, developers, and researchers a low-cost platform in creating new exciting applications on top of ROS.https://github.com/linorobot/linorobot

Esquemas


Processo de manufatura

  1. Robô Raspberry Pi controlado por Bluetooth
  2. Robô autônomo quadrúpede JQR
  3. Robô Pi Simples
  4. Faça uma máquina de escrever trabalhos de casa DIY em casa
  5. Obstáculos para evitar o robô com servo motor
  6. Robô seguidor de linha
  7. Robô controlado por fala
  8. Plataforma de treinamento Arduino
  9. Braço do robô Arduino DIY - Controlado por gestos manuais
  10. Robô para navegação interna supercool