Projeto de Monitoramento de Dutos de
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 |
---|
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.”
|
Relatório do dia 19/05/2015 até 26/05/2015 |
---|
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.
- http://arduinobymyself.blogspot.com.br/2012/08/ponte-h-controle-de-motores-dc.html
- http://www.maxwellbohr.com.br/downloads/robotica/mec1000_kdr5000/tutorial_eletronica_-_montagem_de_uma_ponte_h.pdf
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.
- http://computers.tutsplus.com/tutorials/controlling-dc-motors-using-python-with-a-raspberry-pi--cms-20051
- https://learn.adafruit.com/downloads/pdf/adafruit-raspberry-pi-lesson-9-controlling-a-dc-motor.pdf
Relação de itens necessários para o projeto
Lista de itens |
---|
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
suporte: http://produto.mercadolivre.com.br/MLB-650471695-fpv-pan-tilt-p-camera-projeto-arduino-servos-n-inclusos-_JM
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
injeto + divisor: http://produto.mercadolivre.com.br/MLB-655487154-poe-separador-injetor-_JM
(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#
raspberry pi: http://produto.mercadolivre.com.br/MLB-639775372-novo-raspberry-pi-2-model-b-quadcore-1gb-ram-pronta-entrega-_JM
|
Descrição do sistema
Levantamento de requisitos |
---|
|
Casos de uso |
---|
Diagrama de casos de uso
Casos de usoCSU01Mover a câmera
CSU02Mover o robô
CSU03Alterar a velocidade dos motores.
CSU04Gravar vídeo
|
Descrição de fucionamento | ||
---|---|---|
Diagrama UML de sequência
Estrutura do pacote enviado do controlador para o robô
Diagrama UML de classes |
Software
- Controlador: Responsável por capturar e transmitir os comandos do usuário.
https://github.com/ifsc-saojose/robo_dutos
- Códigos do robô: Arquivo:Configurations.zip
- 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
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
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.
- Botão gravar: O botão gravar permitira gravar a stream de video em um arquivo em disco.
Robô
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
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.
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.
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.
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.