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
 
(Uma revisão intermediária pelo mesmo usuário não está sendo mostrada)
(Sem diferença)

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