Mudanças entre as edições de "Projeto de Monitoramento de Dutos de"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
 
(18 revisões intermediárias por 2 usuários não estão sendo mostradas)
Linha 335: Linha 335:
 
=Software=
 
=Software=
 
*'''Controlador: ''' Responsável por capturar e transmitir os comandos do usuário.
 
*'''Controlador: ''' Responsável por capturar e transmitir os comandos do usuário.
https://github.com/bruno-antonio-pinho/Controlador
+
https://github.com/ifsc-saojose/robo_dutos
  
*'''Controle dos Servos e motores em C++:''' https://github.com/bruno-antonio-pinho/PWM_Controler
+
*'''Códigos do robô:''' [[Arquivo:Configurations.zip|Configurations.zip]]
 
 
*'''Controle dos Servos e motores em python:''' https://github.com/bruno-antonio-pinho/Robot_Controler
 
  
 
*'''Transmissão de video:''' Para a transmissão de video esta sendo utilizado o MJPG-Streamer devido a sua eficiência.
 
*'''Transmissão de video:''' Para a transmissão de video esta sendo utilizado o MJPG-Streamer devido a sua eficiência.
Linha 352: Linha 350:
  
 
=Sistema=
 
=Sistema=
[[Arquivo:Robot_Diagram_-_Block_Diagram.png|500px|thumb|center|]]
+
[[Arquivo:Robo diagarama grafico.png|800px|thumb|center|]]
[[Arquivo:Robot_Pin_Connections.png|800px|thumb|center|]]
+
[[Arquivo:Robo_diagrama.png|800px|thumb|center|]]
 
+
[[Arquivo:Robo conexoes pt1.png|800px|thumb|center|]]
 +
[[Arquivo:Robo_conexoes_pt2.png|800px|thumb|center|]]
 
O Sistema é formado por duas partes:
 
O Sistema é formado por duas partes:
  
 
*'''Controlador: '''O controlador é composto por um computador rodando um software o qual interpreta e envia comandos recebidos por um controle USB.
 
*'''Controlador: '''O controlador é composto por um computador rodando um software o qual interpreta e envia comandos recebidos por um controle USB.
  
*'''Robô: '''O robô é composto por 2 conversores DC/DC responsáveis por reduzir a tensão de entrada. uma Ponte H responsável por fazer o chaveamento de tensões dos motores DC, M1 e M2, a ponte H recebe está conetada a três portas PWM do BegleBone, os polos negativos de ambos os motores são alimentados pelo mesmo sinal PWM. O C.I. 74S244 é responsável pela ativação dos dois servos, S1 e S2, o C.I. está conectado a duas portas digitais e duas portas PWM do BeagleBone. O amplificador é responsável por aumentar o nível dos sinais PWM que chegam aos servos. O BeagleBone além das funções já descritas ainda deve mandar uma stream de video, capturada através de uma câmera conectada via USB em um suporte pan/tilt movimentado pelos servos.
+
*'''Robô: '''O robô é composto por 2 conversores DC/DC responsáveis por reduzir a tensão de entrada. uma Ponte H responsável por fazer o chaveamento de tensões dos motores DC, M1 e M2, a ponte H recebe está conetada a três portas PWM do BegleBone, os polos negativos de ambos os motores são alimentados pelo mesmo sinal PWM. O C.I. 74S244 é responsável pela ativação dos dois servos, S1 e S2, o C.I. está conectado a duas portas digitais e duas portas PWM do BeagleBone. O C.I. HEF4050BP é responsável por aumentar o nível dos sinais PWM que chegam aos servos e proteção do beaglebone. O BeagleBone além das funções já descritas ainda deve mandar uma stream de video, capturada através de uma câmera conectada via USB em um suporte pan/tilt movimentado pelos servos.
  
O robô e controlador são ligado através de um sistema PoE.
+
O robô e controlador são interligados através de um sistema PoE.
  
 
==Controlador==
 
==Controlador==
Linha 415: Linha 414:
  
 
===L298N===
 
===L298N===
O L298N [e um C.I. que atua como uma ponte-H. Foi comprado um driver pronto que utiliza o L298N para controlar os motores DC e amplificar o sinal dos servos.
+
O L298N [e um C.I. que atua como uma ponte-H. Foi comprado um driver pronto que utiliza o L298N para controlar os motores DC.
  
 
{| border="1"
 
{| border="1"
Linha 424: Linha 423:
  
 
[[Arquivo:L298N.jpg|500px|thumb|center|]]
 
[[Arquivo:L298N.jpg|500px|thumb|center|]]
 +
 +
===PCB===
 +
Foi feita uma placa para controlar os servos e os motores DC.
 +
A placa é constituída por um C.I. 74LS244N o qual faz o controle do sinal dos servos, dois amplificadores LF351 que amplificam o sinais dos servos e bornes para fazer a distribuição das tensões de 5 e 12V diminuindo a quantidade de fios no robô.
 +
O projeto da placa foi feito no proteus e os arquivos podem ser obtidos no link [[Arquivo:Robo.zip|Robo.zip]].
 +
[[Arquivo:Robo_pcb.png|500px|thumb|center|]]
 +
 +
Os amplificadores LF351 foram substituídos por um C.I. HEF4050BP.
  
 
===Pan/tilt===
 
===Pan/tilt===
Linha 441: Linha 448:
 
Para maiores informações sobre o nice: http://bencane.com/2013/09/09/setting-process-cpu-priority-with-nice-and-renice/
 
Para maiores informações sobre o nice: http://bencane.com/2013/09/09/setting-process-cpu-priority-with-nice-and-renice/
  
===Software de Controle do robô===
+
===Softwares===
  
{{Collapse top |Python}}
+
Os softwares para funcionamento do robô podem ser obtidos através do arquivo [[Arquivo:Configurations.zip|Configurations.zip]].
<syntaxhighlight lang=python>
 
import socket
 
import simplejson
 
import Adafruit_BBIO.PWM as PWM
 
import Adafruit_BBIO.GPIO as GPIO
 
  
# Inicia as portas PWM que controlam os motores.
+
<font size=6><span style="color:#FF0000"> Atenção: </span> </font>
PWM.start("P8_13", 0, 100)
 
PWM.start("P9_14", 0, 100)
 
PWM.start("P9_42", 0, 100)
 
  
# Inicia as portas PWM que controlam o suporte pan/tilt da camera.
+
Antes de instalar os sotwares deve-se ativar o pwm da porta P9_28 adicionado a linha abaixo a o arquivo uEnv.txt localizado no diretório /boot/uboot:
PWM.start("P9_22", 2, 50)
 
PWM.start("P9_28", 2, 50)
 
  
# Inicia os saidas que contralam as passagem dos pulsos PWM do pan/tilt da camera.
+
<syntaxhighlight lang=bash>
GPIO.setup("P9_23",GPIO.OUT)
+
optargs=capemgr.disable_partno=BB-BONELT-HDMI,BB-BONELT-HDMIN
GPIO.setup("P9_30",GPIO.OUT)
+
</syntaxhighlight>
  
# Coloca as portas P9_30 e P9_23 em nivel alto para bloquear a passagem do sinal PWM.
+
Para fazer a instalação dos softwares a partir dos arquivos acesse BeagleBone e digite os comandos:
GPIO.output("P9_23", GPIO.HIGH)
 
GPIO.output("P9_30", GPIO.HIGH)
 
  
 +
<syntaxhighlight lang=bash>
 +
sudo apt-get update
 +
sudo apt-get install unzip
 +
sudo apt-get install python-pip
 +
sudo pip install simplejson
 +
wget http://wiki.sj.ifsc.edu.br/images/8/8d/Configurations.zip
 +
unzip Configurations.zip
 +
cd configurations
 +
chmod +x install.sh
 +
./install.sh
 +
</syntaxhighlight>
  
# Abre coneccao na porta 5506.
+
Feito isso todos os softwares necessários para o funcionamento do sistema serão instalado e o BeagleBone será reiniciado a partir desse momento o não há mais a necessidade de acessar o BeagleBone e o robô pode ser controlado remotamente pela interface grafica.
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
 
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
 
sock.bind(('172.18.131.50', 5506 ))
 
 
 
# Angulo inicial das cameras.
 
cam_angle = [0.0, 0.0]
 
 
 
def robot_direction(direction, speed):
 
 
 
# Move o robo para a direita
 
if(direction == 2):
 
PWM.set_duty_cycle("P8_13", 0)
 
PWM.set_duty_cycle("P9_14", speed)
 
PWM.set_duty_cycle("P9_42", 0)
 
 
 
# Move o robo para a esquerda.
 
elif(direction == 3):
 
                PWM.set_duty_cycle("P8_13", speed)
 
                PWM.set_duty_cycle("P9_14", 0)
 
                PWM.set_duty_cycle("P9_42", 0)
 
 
 
# Move o robo para frente.
 
elif(direction == 0):
 
                PWM.set_duty_cycle("P8_13", speed)
 
                PWM.set_duty_cycle("P9_14", speed)
 
                PWM.set_duty_cycle("P9_42", 0)
 
 
 
# Move o robo para tras.
 
elif(direction == 1):
 
                PWM.set_duty_cycle("P8_13", 0)
 
                PWM.set_duty_cycle("P9_14", 0)
 
                PWM.set_duty_cycle("P9_42", speed)
 
 
 
# Para os movimentos do robo;
 
else:
 
                PWM.set_duty_cycle("P8_13", 0)
 
                PWM.set_duty_cycle("P9_14", 0)
 
                PWM.set_duty_cycle("P9_42", 0)
 
pass
 
 
 
def cam_direction(direction):
 
 
# Movimenta a camera para a direita.
 
if(direction == 3 ):
 
if(cam_angle[0] >= 2):
 
cam_angle[0] = cam_angle[0] - 1
 
                        duty_cycle = (cam_angle[0] / 18) + 2
 
GPIO.output("P9_23", GPIO.LOW)
 
                        PWM.set_duty_cycle("P9_22", duty_cycle)
 
 
 
# Movimenta a camera para a esquerda.
 
        elif(direction == 2):
 
if(cam_angle[0] <= 179):
 
                        cam_angle[0] = cam_angle[0] + 1
 
                        duty_cycle = (cam_angle[0] / 18) + 2
 
GPIO.output("P9_23", GPIO.LOW)
 
                        PWM.set_duty_cycle("P9_22", duty_cycle)
 
 
 
# Movimenta a camera para cima.
 
        elif(direction == 0):
 
if(cam_angle[1] <= 179):
 
cam_angle[1] = cam_angle[1] + 1
 
duty_cycle = (cam_angle[1] / 18) + 2
 
GPIO.output("P9_30", GPIO.LOW)
 
PWM.set_duty_cycle("P9_28", duty_cycle)
 
 
 
# Movimenta a camera para baixo.
 
elif(direction == 1):
 
        if(cam_angle[1] >= 2):
 
cam_angle[1] = cam_angle[1] - 1
 
                duty_cycle = (cam_angle[1] / 18) + 2
 
GPIO.output("P9_30", GPIO.LOW)
 
                        PWM.set_duty_cycle("P9_28", duty_cycle)
 
 
 
# Para o movimento da camera.
 
else:
 
GPIO.output("P9_23", GPIO.HIGH)
 
GPIO.output("P9_30", GPIO.HIGH)
 
 
 
  
while True:
 
 
data, addr = sock.recvfrom(1024) # Espera o pacote com os comados.
 
        info = simplejson.loads(data) # Transforma a informacao do pacote em um vetor de inteir.
 
print(info) # printa na tela o pacote recebido para Debug.
 
robot_direction(info[0], info[2])
 
cam_direction(info[1])
 
</syntaxhighlight>
 
  
{{collapse bottom}}
+
===Protótipo===
 +
[[Arquivo:Robo Prototipo.jpg|800px|thumb|center|]]

Edição atual tal como às 09h54min de 19 de setembro de 2016

Reunião 7/5/2015

  • Explanação Inicial do Marcelo
  • Definição do Robô, da forma de comunicação e alimentação;
    • distância;
    • estimar potência total: ??
    • forma de resgate
    • usar sistema de lagarta: [1]
    • estudar câmera com iluminação conjugada e controle independente da movimentação do robô;
    • sistema de controle: arduíno, banana pi;
    • dimensões: 20cmx30cm (LxC)
    • fazer estimativa de custo,dimensões,peso, consumo de energia,potência, estimativa de câmera conjugada com iluminação;
  • Horário definido para reuniões: segunda 15h30 (a partir do dia 18/5);

Horário dos Bolsistas

  • Bruno
    • Segunda: 15:30 ~ 19:30
    • Terça : 13:30 ~ 17:30
    • Quarta: 13:30 ~ 17:30
    • Quinta: 13:30 ~ 17:30
    • Sexta : 13:30 ~ 17:30
  • Lucas
    • Segunda: 7:30 ~ 12:00
    • Terça : 7:30 ~ 12:00
    • Quarta: 10:00 ~ 12:00
    • Quinta: 7:30 ~ 12:00
    • Sexta : 7:30 ~ 12:00

Relatórios - Lucas

Relatório do dia 07/05/2015 até 18/05/2015
  • Objetivos:

As duas primeiras semanas tiveram como objetivo a definição das configurações do robô como um todo. Entre os tópicos definidos na reunião entre os bolsistas e os coordenadores do projeto, estavam: a forma de resgate do robô, sistema de locomoção, câmera, iluminação, sistema de controle, custos e dimensões


“O melhor e mais completo equipamento de vídeo inspeção robotizada a serviço da SABESP. Capaz de inspecionar tubulações de 150 mm a mais de 3.000 mm de diâmetro”

“Modelo VOR-42-C.”

“O vídeo apresenta como foi realizado o planejamento e montagem do projeto de conclusão de curso da turma de Engenharia Mecatrônica da UNIP Ribeirão Preto no ano de 2012.”



  • Carro 4x4:
    • Medidas: 21*16*8 cm
    • Capacidade: 5 Kg
    • Corrente: 400 mA
    • Tensão: 6 V
    • Peso: 0.6 Kg
    • Preço: 45 US$
  • Tanque:
    • Medidas: 20,2* 22 *11,6 cm
    • Capacidade: não mencionada
    • Corrente: não mencionada
    • Tensão: 6 V - 9 V / 9V, 200rpm
    • Peso: 2 Kg
    • Preço: 107 US$
Relatório do dia 19/05/2015 até 26/05/2015
  • T'Rex aluminum tank chassis
    • Link para compra: http://www.jameco.com/webapp/wcs/stores/servlet/Product_10001_10001_2209932_-1
    • Descrição : T'Rex aluminum tank chassis can handle rough terrain. 45mm wide zinc tracks. 12V (typ.) 11A stall current
    • Width : 265mm
    • length: 355mm
    • Body height: 60mm
    • Ground Clearance: 70mm
    • Total height: 130mm
    • Weight: 3.7Kg
    • Especificações do motor:
      • Typical Voltage: 12v
      • No load current: 1.3A
      • typical current: 4A
      • Stall current: 11A

O tempo de uma semana foi gasto quase que inteiramente na aprendizagem conceitual de motores DC, ponte H e a arquitetura do raspberry pi.

Controle de Motores

Um dos circuitos mais importantes na elaboração de sistemas automatizados é a ponte H. Trata-se de um circuito utilizado para controlar um motor DC a partir de sinais gerados por um microcontrolador. Os links abaixo ensinam como projetar uma ponte H.


O CI L293D faz a função de uma ponte H e embora ele consiga controlar dois motores com ele o mesmo suporta no máximo uma corrente de 600 mA constante e uma corrente de pico de 1,2 A.


O uso do raspberry pi para controle de motores DC é bastante comum e portanto é fácil encontrar alguns programas prontos para isso, sendo os mesmos geralmente escritos em python.

Relação de itens necessários para o projeto

Lista de itens
  • Motores:
    • 2x Servo motor: O servo motor será responsável pela movimentação da câmera.
    • 2x CI L293: Este CI é utilizado para controlar os motores realizando a função de uma ponte H.
           servos:  http://produto.mercadolivre.com.br/MLB-662053141-micro-servo-turnigy-9g-_JM
           CI L293: http://produto.mercadolivre.com.br/MLB-651266129-1-x-l293d-l293b-l293-ponte-h-dupla-p-arduino-pic-id8-_JM
  • Chassi: será o responsável pela mobilidade além servir como suporte para o restante do equipamento. Um dos tipos de chassi mais robusto são os tipo tank, os quai utilizam esteiras para movimentação.
  • Suporte Pan/Tilt: suporte da câmera, onde serão instalados os servo motores para realizar a movimentação da mesma.
           suporte: http://produto.mercadolivre.com.br/MLB-650471695-fpv-pan-tilt-p-camera-projeto-arduino-servos-n-inclusos-_JM
  • Câmera: Será utilizada para visualizar o caminho do robo.
           câmera USB full HD: http://www.aliexpress.com/item/HD-1080P-2-megapixel-OV2710-USB-cmos-Camera-module-for-all-kinds-of-equipments-ELP-USBFHD01M/32237608962.html
  • Sistema PoE: Irá utilizar a energia enviada pelos cabos de rede para alimentar o robô.
           injeto + divisor: http://produto.mercadolivre.com.br/MLB-655487154-poe-separador-injetor-_JM
  • Conversores de tensão DC/DC: Irão converter a tensão e aumentar a corrente, serão utilizados para alimentar o raspberry pi e os motores DC.
    • Coversor 48V para 12V: Irá alimentar os motores DC.
    • Coversor 48V para 5V: Irá alimentar o restante do sistema.
           (48/12)V: http://produto.mercadolivre.com.br/MLB-650712551-conversor-dcdc-step-down-08-reduz-de-24-a-50v-para-12v-3-a-_JM
           (48/5)V: http://produto.mercadolivre.com.br/MLB-663539048-conversor-dcdc-step-down-de-15v-ate-50v-saida-5v-3-a-sd14-_JM#
  • Rapberry PI: Os raspberry pi irá fazer o controle dos motores e a transmissão das imagens.
           raspberry pi: http://produto.mercadolivre.com.br/MLB-639775372-novo-raspberry-pi-2-model-b-quadcore-1gb-ram-pronta-entrega-_JM
  • Iluminação: Devido a não a haver nenhuma fonte de luz dentro dos dutos é necessário que robô tenha um sistema iluminação própria, algumas possibilidade para esse fim são os leds auto-motivo e o led cree.

Descrição do sistema

Levantamento de requisitos
  • Requisitos Funcionais:
    • O usuário pode controlar a posição da câmera.
    • O usuário pode controlar a direção da robô.
    • O usuário pode controlar a velocidade da robô.
    • O usuário pode requisitar que o sistema grave as imagens em um arquivo de video.
    • O sistema deve transmitir as imagens da câmera em tempo real.


  • Requisitos não funcionais:
    • O sistema será alimentado via PoE.
    • O sistema fará comunicação com o usuário através de um cabo RJ-45.
    • O robô usara o sistema lagarta para locomoção.
    • O controle dos motores, posição câmera e a transmissão das imagens sera feito através do raspberry pi.


Casos de uso

Diagrama de casos de uso

  • Atores: Usuário.

Robot system Use Case.png

Casos de uso

CSU01

Mover a câmera

  • Sumário: O usuário movimenta o suporte da câmera.
  • Ator Primário: Usuário
  • Atores Secundários: Nenhum.
  • Precondições: Sistema ter sido inicializado.
  • Fluxo Principal:
    • 1. O usuario envia o comando para o sistema.
    • 2. O sistema decodifica a informação e aciona os servos alterando a posição da câmera.
  • Pós-condições: A posição da câmera foi alterada.

CSU02

Mover o robô

  • Sumário: O usuário movimenta o robô.
  • Ator Primário: Usuário
  • Atores Secundários: Nenhum.
  • Precondições: Sistema ter sido inicializado.
  • Fluxo Principal:
    • 1. O usuario envia o comando para o sistema.
    • 2. O sistema decodifica a informação e aciona os motores DC alterando a posição robô.
  • Pós-condições: A posição do robô foi alterada.

CSU03

Alterar a velocidade dos motores.

  • Sumário: Aumenta ou diminui a velocidade do robô.
  • Ator Primário: Usuário
  • Atores Secundários: Nenhum.
  • Precondições: Sistema ter sido inicializado.
  • Fluxo Principal:
    • 1. O usuario envia o comando para o sistema.
    • 2. O sistema decodifica a informação e altera o tempo do pulso enviado para os motores fazendo que velocidade do robô seja alterada.
  • Pós-condições: A velocidade dos motores foi alterada.


CSU04

Gravar vídeo

  • Sumário: Grava um arquivo de vídeo a partir das imagens recebidas da transmissão.
  • Ator Primário: Usuário
  • Atores Secundários: Nenhum.
  • Precondições: Sistema ter sido inicializado.
  • Fluxo Principal:
    • 1. O usuário envia o comando para o sistema.
    • 2. O sistema recebe as imagens da transmissão e salva a informação em um arquivo de vídeo.
  • Pós-condições: um arquivo de vídeo com as imagens feitas do percurso do robô é criado.


Descrição de fucionamento

Diagrama UML de sequência

Mensagens sistema Robo.png
Descrição das mensagens
  • Fluxo continuo de dados: Transmissão das imagens capturadas pela câmera.
  • Mensagem Mx: Conjunto de mensagens transmitidos pelo usuário para movimentação do robô.
    • Mensagem M01: Movimenta o robô para frente.
    • Mensagem M02: Movimenta o robô para trás.
    • Mensagem M03: Movimenta o robô para direita.
    • Mensagem M04: Movimenta o robô para esquerda.
  • Mensagem Cx: Conjunto de mensagens transmitidos pelo usuário para movimentação da câmera.
    • Mensagem C01: Movimenta a câmera para cima.
    • Mensagem C02: Movimenta a câmera para baixo.
    • Mensagem C03: Movimenta a câmera para direita.
    • Mensagem C04: Movimenta a câmera para esquerda.
  • Mensagem A: Mensagem indicando ao controlador que o usuário deseja alterar a velocidade.
  • Mensagem G: Mensagem indicando ao controlador que o usuário deseja gravar a transmissão em um arquivo de video.
  • Código Mx: Conjunto de códigos transmitidos pelo controlador, baseados na requisição do usuário, para que o robô se movimente na direção pedida pelo usuário.
  • Código Cx: Conjunto de códigos transmitidos pelo controlador, baseados na requisição do usuário, para que a câmera se movimente na direção pedida pelo usuário.


Estrutura do pacote enviado do controlador para o robô

Pacote robo.png
  • M: É um inteiro que pode assumir valores de 0 a 4.
  • C: É um inteiro que pode assumir valores de 0 a 4.
  • A: É um inteiro que pode assumir valores de 1 a 100.

Diagrama UML de classes

Diagrama UML Classes Sistema robo.png

Software

  • Controlador: Responsável por capturar e transmitir os comandos do usuário.

https://github.com/ifsc-saojose/robo_dutos

  • Transmissão de video: Para a transmissão de video esta sendo utilizado o MJPG-Streamer devido a sua eficiência.

Processamento de imagens com o BeagleBone

O link abaixo explica como a câmera utilizada pode afetar o desempenho da transmissão de video e o consumo de recursos do sistema. https://www.raspberrypi.org/forums/viewtopic.php?p=751735

O link a seguir é uma introdução ao processamento de imagens com o OpenCV no BeagleBone. http://derekmolloy.ie/beaglebone/beaglebone-video-capture-and-image-processing-on-embedded-linux-using-opencv/

Sistema

Robo diagarama grafico.png
Robo diagrama.png
Robo conexoes pt1.png
Robo conexoes pt2.png

O Sistema é formado por duas partes:

  • Controlador: O controlador é composto por um computador rodando um software o qual interpreta e envia comandos recebidos por um controle USB.
  • Robô: O robô é composto por 2 conversores DC/DC responsáveis por reduzir a tensão de entrada. uma Ponte H responsável por fazer o chaveamento de tensões dos motores DC, M1 e M2, a ponte H recebe está conetada a três portas PWM do BegleBone, os polos negativos de ambos os motores são alimentados pelo mesmo sinal PWM. O C.I. 74S244 é responsável pela ativação dos dois servos, S1 e S2, o C.I. está conectado a duas portas digitais e duas portas PWM do BeagleBone. O C.I. HEF4050BP é responsável por aumentar o nível dos sinais PWM que chegam aos servos e proteção do beaglebone. O BeagleBone além das funções já descritas ainda deve mandar uma stream de video, capturada através de uma câmera conectada via USB em um suporte pan/tilt movimentado pelos servos.

O robô e controlador são interligados através de um sistema PoE.

Controlador

O software do controlador tem como função e enviar os comandos do usuário para o robô. Tanto os comandos de movimentação do robô quanto os do sistema de pan/tilt são enviados como um valor entre 0 e 3 em quanto o valor da velocidade varia entre 1 e 100, esses três valores são alocados em uma lista, transformados em string através da biblioteca simpleJSON e enviados ao robô via UDP. O código do controlador se encontra em um repositório do github(httd

Controle

Para o controlar os movimentos do robô e do sistema de pan/tilt foi utilizado um controle modelo dualshock 2 usb. A integração do controle com o resto do software do controlador se deu através da biblioteca PyGame. O botões reconhecidos pelo controlador e suas funções são:

  • Analógico esquerdo: Movimentação do robô.
  • Analógico direito: Movimentação do sistema pan/tilt.
  • L1: Diminui a velocidade dos motores.
  • R1: Aumenta a velocidade dos motores.
  • Start: Gravação em disco da stream de video(função ainda não implementada).

Interface Gráfica

Tela Principal.png

A interface gráfica, imagem acima, foi feita em Qt e é bastante simples consistindo de:

  • Display: O display mostra o valor numérico da "velocidade", a velocidade é o valor em porcentagem do duty cycle do sinal pwm dos motores ou quanto porcento do periodo o sinal fica em estado alto.
  • Botão de configuração: A interface gráfica permite que o robô além de ser controlado pelo controle ainda seja controlado pelo teclado, o botão de configuração permite que as teclas de comando sejam alteradas. As configurações são alteradas através de uma nova janela mostrada na imagem abaixo.
Tela conf.png
  • Botão gravar: O botão gravar permitira gravar a stream de video em um arquivo em disco.

Robô

Chassi robo duto.jpg
Chassi robo duto tras.jpg

O Robô criado neste projeto é composto por um chassi(imagem acima), 2 motores DC, uma placa beaglebone Rev. C, sistema de pan/tilt, uma camera logitech C920, e um circuito de alimentação.


BeagleBone

Beaglebone-black-pinout.jpg

A imagem acima mostra os pinos do beaglebone e a sua utilização, para o controle do robô foram utilizados 5 portas PWM e 2 portas digitais.

  • 3 portas PwM (P8_13, P9_14 e P9_42) para controle dos motores DC, foram usadas portas PWM ao invés de portas digitais a fim de ser possível controlar a velocidade do robô, sendo dois sinais PWM ligados ao positivo dos motores e um sinal PWM ligado ao negativo de ambos os motores.
  • 2 portas PWM (P9_22 e P9_28) usadas para controlar o sistema pan/tilt usado no controle da movimentação da câmera. A porta P9_28 não aparece como uma saída PWM na imagem acima pois a principio é reservada para saída de áudio HDMI, para liberar a mesma deve ser desabiltado o HDMI no beaglebone adicionada a linha abaixo ao arquivo uEnv.txt o qual pode ser acessado conectando a entrada mini-USB do beaglebone e acessando a partção boot.
optargs=capemgr.disable_partno=BB-BONELT-HDMI,BB-BONELT-HDMIN
  • Durante testes realizados utilizando a biblioteca Adfruit_BBIO para o controle das portas PWM ocorreram erros onde ao parar e reiniciar as portas pwm constantemente acarretavam em encerramento forçado do programa ao mesmo tempo que ao permanecerem ligadas o continuamente acarreta em sobre aquecimento dos servos. Afim de resolver o problema são utilizadas 2 portas digitais (P9_23 e P9_30) que são ligados juntamente com as saídas PWM (P9_22 e P9_28) ao CI 74S244 o qual possui uma logica invertida assim quando os portas digitais estiverem em nível baixo o sinal PWM é liberado para os servos e quando estiverem em nivel alto o sinal é bloqueado.

Alimentação

A alimentação será feita através de um sistema PoE(Power over Ethernet) até a entrada do circuito onde será distribuída para 2 conversores DC/DC do tipo step-down sendo que um reduzira a tensão para 12V e o outro para 5V.

  • Conversor DC/DC para 12V: É responsável por alimentar os motores DC, a saída será conectada a uma ponte-H que é ativada através das portas PWM.
  • Conversor DC/DC para 5V: É responsável por alimentar o o beaglebone e os servos. Os servos são ativados através de pulsos com amplitude de 5V porém a amplitude dos pulsos Pwm do beaglebone são de 3.3V, para resolver isso os pulsos passaram por circuito composto pelo CI 74S244 mencionado anteriormente e um amplificador para aumentar a amplitude os quais serão alimentados pelo conversor de 5V.

L298N

O L298N [e um C.I. que atua como uma ponte-H. Foi comprado um driver pronto que utiliza o L298N para controlar os motores DC.

L28N G.jpg
L298N inputs.jpg

O driver possui 2 entradas de tensão, sendo uma de 6V a 35V e a outra até 5V. 4 entradas que permitem a passagem da tensão de entrada na saida correspondente e 4 saidas. As saida estã associada em dois grupos abilitado por dois jumpers, o jumper ENA abilita as saidas 1 e 2 emquanto o jumper ENB abilita as saidas 3 e 4. A imagem abaixo mostra a posição de todos os elementos, sendo os jumper Ativa MB e MA o mesmo que ENA e ENB respectivamente, MotorA saidas 1 e 2 e MotorB saidas 3 e 4. e o jumper Ativa 5v quando ativado torna a entrada de 5v em uma saída de 5v.

L298N.jpg

PCB

Foi feita uma placa para controlar os servos e os motores DC. A placa é constituída por um C.I. 74LS244N o qual faz o controle do sinal dos servos, dois amplificadores LF351 que amplificam o sinais dos servos e bornes para fazer a distribuição das tensões de 5 e 12V diminuindo a quantidade de fios no robô. O projeto da placa foi feito no proteus e os arquivos podem ser obtidos no link Arquivo:Robo.zip.

Robo pcb.png

Os amplificadores LF351 foram substituídos por um C.I. HEF4050BP.

Pan/tilt

O sistema de movimentação da câmera utilizado no projeto consiste de duas juntas metálicas conetadas a dois servos, SG90, que dão ao usuário um campo maior de visão.

MJPG-Streamer

O mjpg-Streamer é um software que captura a informação da imagem através do programa V4L2 e transmite via HTTP. Embora ele possa ser usado com qualquer câmera USB câmeras que possuem saída apenas no formato YUYV requerem um processamento adicional para converter a informação para MJPG o que faz com que aumente o consumo de recursos no sistema.

Obs: O funcionamento descrito acima é apenas a forma como o programa foi utilizado no projeto, também sendo a forma mais comum de utilização do mesmo. O MJPG_Streamer também permite a transmissão da informação nos protocolos UDP e RDP.

Nice

Nice é um programa que serve para alterar o niceness de um processo no linux, o niceness é um valor que varia de -20 a 19 esse valor tem uma relação inversamente proporcional com a prioridade que o linux da a um processo, ou seja quanto menor o valor maior a prioridade de um processo (por padrão o valor de niceness de um processo é 0), o nice é usado dentro do sistema para dar um prioridade maior ao MJPG-Streamer de modo que não haja delay na transmissão das imagens.

Para maiores informações sobre o nice: http://bencane.com/2013/09/09/setting-process-cpu-priority-with-nice-and-renice/

Softwares

Os softwares para funcionamento do robô podem ser obtidos através do arquivo Arquivo:Configurations.zip.

Atenção:

Antes de instalar os sotwares deve-se ativar o pwm da porta P9_28 adicionado a linha abaixo a o arquivo uEnv.txt localizado no diretório /boot/uboot:

optargs=capemgr.disable_partno=BB-BONELT-HDMI,BB-BONELT-HDMIN

Para fazer a instalação dos softwares a partir dos arquivos acesse BeagleBone e digite os comandos:

sudo apt-get update
sudo apt-get install unzip
sudo apt-get install python-pip
sudo pip install simplejson
wget http://wiki.sj.ifsc.edu.br/images/8/8d/Configurations.zip
unzip Configurations.zip
cd configurations
chmod +x install.sh
./install.sh

Feito isso todos os softwares necessários para o funcionamento do sistema serão instalado e o BeagleBone será reiniciado a partir desse momento o não há mais a necessidade de acessar o BeagleBone e o robô pode ser controlado remotamente pela interface grafica.


Protótipo

Robo Prototipo.jpg