Mudanças entre as edições de "Projeto de Monitoramento de Dutos de"
(67 revisões intermediárias por 3 usuários não estão sendo mostradas) | |||
Linha 30: | Linha 30: | ||
**'''Sexta''' : 7:30 ~ 12:00 | **'''Sexta''' : 7:30 ~ 12:00 | ||
− | =Lucas | + | =Relatórios - Lucas= |
+ | |||
+ | {{Collapse top |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 | ||
+ | |||
+ | |||
+ | *'''Algumas inspirações pesquisadas''': | ||
+ | **https://www.youtube.com/watch?v=34mUK-wOCVA&feature=youtu.be | ||
+ | “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” | ||
+ | **https://www.youtube.com/watch?v=Jbi39WwKsqA | ||
+ | “Modelo VOR-42-C.” | ||
+ | **https://www.youtube.com/watch?v=REjPmOqS2Cg | ||
+ | “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.” | ||
+ | |||
+ | |||
+ | *'''Câmera Endoscópia''': | ||
+ | **'''Link para a compra''': http://pt.aliexpress.com/item/USB-endoscope-camera-module/774427718.html?spm=2114.32010308.4.226.7V88La&recommendVersion=1 | ||
+ | **'''Definição''': (640 X 480) | ||
+ | **'''Interface''': USB | ||
+ | **'''Corrente''': 125 mA | ||
+ | **'''Medidas''': Não | ||
+ | **'''Peso''': Não mencionado. | ||
+ | **'''Preço''': US$35 | ||
+ | |||
+ | |||
+ | |||
+ | *'''Câmera HD ELP-USBFHD01M-L21''': | ||
+ | **'''Link para a compra''': http://pt.aliexpress.com/item/HD-1080P-2-megapixel-OV2710-USB-cmos-Camera-module-for-all-kinds-of-equipments-ELP-USBFHD01M/32237608962.html?recommendVersion=1 | ||
+ | **'''Definição''': Full HD (1920 X 1080) 30 FPS -- HD (1280 X 720) 60 FPs | ||
+ | **'''Medidas''': 32x32mm | ||
+ | **'''Tensão''': 5V | ||
+ | **'''Corrente''': 150 mA | ||
+ | **'''Interface''': USB | ||
+ | **'''Marca''': ELP | ||
+ | **'''Sensor''': CMOS | ||
+ | |||
+ | *'''Servo Sg90 9g Micro Servo Rc''': | ||
+ | **'''Link para a compra''': http://produto.mercadolivre.com.br/MLB-640544294-sg90-9g-micro-servo-rc-avio-heli-barco-automodelos-_JM | ||
+ | **'''Medidas''': 23x12,2x29mm | ||
+ | **'''Tensão''': 4,8V | ||
+ | **'''Corrente''': 200 +- 80 mA (sem carga) | ||
+ | **'''Torque''': 1.5kg/cm | ||
+ | **'''Peso''': 9 g | ||
+ | |||
+ | *Suporte: | ||
+ | **'''Link para a compra''': http://produto.mercadolivre.com.br/MLB-650471695-fpv-pan-tilt-p-camera-projeto-arduino-servos-n-inclusos-_JM | ||
+ | **'''Medidas''': 36x28mm | ||
+ | **'''Servo''': 9g | ||
+ | **'''Peso'''': 8g | ||
+ | |||
+ | *'''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$ | ||
+ | |||
+ | *'''Tanque''' | ||
+ | **'''Link para compra''': http://pt.aliexpress.com/item/Smart-Car-Chassis-Kits-with-Robot-assemble-kits/32277281320.html?recommendVersion=1 | ||
+ | **'''Medidas''': 19,8*22*9 cm | ||
+ | **'''Capacidade''': não mencionada | ||
+ | **'''Corrente''': 300 mA | ||
+ | **'''Tensão''': 9 V | ||
+ | **'''Peso''': 0.6 Kg | ||
+ | **'''Preço''': 88 US$ | ||
+ | |||
+ | *Sistema de controle: | ||
+ | **Raspberry pi -> https://www.raspberrypi.org/ | ||
+ | {{collapse bottom}} | ||
+ | |||
+ | {{Collapse top |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 | ||
+ | |||
+ | *'''Tanque 2''': | ||
+ | **'''Link para compra''': http://pt.aliexpress.com/item/Tracked-vehicle-chassis-tankbot/32227456547.html | ||
+ | **'''Dimensions''': length 19cm width 24cm high 10cm | ||
+ | **'''Power''': 12-24V DC power supply | ||
+ | **'''Motor''': 12V 50rpm 24V 100RPM (low speed high torque 10kg) | ||
+ | |||
+ | O tempo de uma semana foi gasto quase que inteiramente na aprendizagem conceitual de motores DC, ponte H e a arquitetura do raspberry pi. | ||
+ | |||
+ | *Os materiais de estudo estão contidos em: http://migre.me/pZULi | ||
+ | *E nos links: | ||
+ | **http://www.newtoncbraga.com.br/index.php/110-mecatronica/robotica/1213-ponte-h-com-pwm | ||
+ | **http://www.newtoncbraga.com.br/index.php/como-funciona/3414-art476a | ||
+ | **http://www.coep.ufrj.br/~jpaulo/MOTOR-DC-Euler.pdf | ||
+ | **https://www.raspberrypi.org/community/ | ||
+ | |||
+ | {{collapse bottom}} | ||
+ | |||
+ | =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. | ||
+ | * http://labdegaragem.com/profiles/blogs/tutorial-de-como-utilizar-motor-dc-com-l293d-ponte-h-e-arduino | ||
+ | |||
+ | |||
+ | 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= | ||
+ | |||
+ | {{Collapse top |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. | ||
+ | |||
+ | {{collapse bottom}} | ||
+ | |||
+ | =Descrição do sistema= | ||
+ | |||
+ | {{Collapse top |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. | ||
+ | {{Collapse bottom}} | ||
+ | |||
+ | |||
+ | |||
+ | {{Collapse top |Casos de uso}} | ||
+ | |||
+ | ==Diagrama de casos de uso== | ||
+ | *'''Atores:''' Usuário. | ||
+ | [[Arquivo: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. | ||
+ | {{Collapse bottom}} | ||
+ | |||
+ | |||
+ | {{Collapse top |Descrição de fucionamento}} | ||
+ | |||
+ | ==Diagrama UML de sequência== | ||
+ | [[Arquivo:Mensagens_sistema_Robo.png|1000px|thumb|center|]] | ||
+ | |||
+ | {{Collapse top| 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. | ||
+ | {{Collapse bottom}} | ||
+ | |||
+ | |||
+ | ==Estrutura do pacote enviado do controlador para o robô== | ||
+ | |||
+ | [[Arquivo:Pacote_robo.png|1000px|thumb|center|]] | ||
+ | |||
+ | *'''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== | ||
+ | [[Arquivo:Diagrama_UML_Classes_Sistema_robo.png|1000px|thumb|center|]] | ||
+ | |||
+ | {{Collapse bottom}} | ||
+ | |||
+ | =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|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= | ||
+ | [[Arquivo:Robo diagarama grafico.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: | ||
+ | |||
+ | *'''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=== | ||
+ | [[Arquivo:Tela_Principal.png|500px|thumb|center|]] | ||
+ | |||
+ | 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. | ||
+ | [[Arquivo:Tela_conf.png|500px|thumb|center|]] | ||
+ | |||
+ | *'''Botão gravar: ''' O botão gravar permitira gravar a stream de video em um arquivo em disco. | ||
+ | |||
+ | ==Robô== | ||
+ | |||
+ | {| border="1" | ||
+ | | [[Arquivo:Chassi_robo_duto.jpg|300px|thumb|center|]] || [[Arquivo:Chassi_robo_duto_tras.jpg|300px|thumb|center|]] | ||
+ | |} | ||
+ | |||
+ | 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=== | ||
+ | [[Arquivo:Beaglebone-black-pinout.jpg|500px|thumb|center|]] | ||
+ | |||
+ | 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. | ||
+ | <syntaxhighlight lang=bash> | ||
+ | optargs=capemgr.disable_partno=BB-BONELT-HDMI,BB-BONELT-HDMIN | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | * 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. | ||
+ | |||
+ | {| border="1" | ||
+ | | [[Arquivo:L28N_G.jpg|300px|thumb|center|]] || [[Arquivo:L298N_inputs.jpg|300px|thumb|center|]] | ||
+ | |} | ||
+ | |||
+ | 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. | ||
+ | |||
+ | [[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=== | ||
+ | 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. | ||
+ | |||
+ | * http://www.acmesystems.it/video_streaming | ||
+ | * https://code.google.com/p/mjpg-streamer/ | ||
+ | |||
+ | ===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|Configurations.zip]]. | ||
+ | |||
+ | <font size=6><span style="color:#FF0000"> Atenção: </span> </font> | ||
+ | |||
+ | 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: | ||
+ | |||
+ | <syntaxhighlight lang=bash> | ||
+ | optargs=capemgr.disable_partno=BB-BONELT-HDMI,BB-BONELT-HDMIN | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Para fazer a instalação dos softwares a partir dos arquivos acesse BeagleBone e digite os comandos: | ||
+ | |||
+ | <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> | ||
+ | |||
+ | 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=== | ||
+ | [[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 |
---|
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.