Vous êtes sur la page 1sur 46

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN DEPARTAMENTO ACADMICO DE INFORMTICA CURSO DE ENGENHARIA DE COMPUTAO

MAPEADOR TRIDIMENSIONAL DE AMBIENTES BASEADO EM ULTRASSOM

DIEGO GABRIEL LEE DIOGO GUILHERME GARCIA DE FREITAS LEONARDO WATANABE KUME LUS FERNANDO GUERREIRO

CURITIBA 2013

DIEGO GABRIEL LEE DIOGO GUILHERME GARCIA DE FREITAS LEONARDO WATANABE KUME LUS FERNANDO GUERREIRO

MAPEADOR TRIDIMENSIONAL DE AMBIENTES BASEADO EM ULTRASSOM

Projeto de oficina de integrao 2 de Engenharia de Computao do

Departamento Acadmico de Informtica, da Universidade Tecnolgica Federal do Paran, Campus Curitiba.

Orientador: Prof. Andr Schneider

CURITIBA 2013

TERMO DE APROVAO
Diego Gabriel Lee Diogo Guilherme Garcia de Freitas Leonardo Watanabe Kume Lus Fernando Guerreiro

PROJETO DE OFICINA DE INTEGRAO 2

Monografia do projeto de Oficinas de Integrao 2, com apresentao prevista para 25 de setembro de 2013 na Universidade Tecnolgica Federal do Paran, como requisito para aprovao na matria. Aprovada por:

Orientador:

___________________________ Prof. Andr de Oliveira Schneider

Banca:

___________________________ Prof. Mrio Srio Teixeira de Freitas

___________________________ Prof. Joo Alberto Fabro

___________________________ Henrique Simio Ferreira

RESUMO
Este projeto descreve o planejamento, a construo, o funcionamento e possveis aplicaes de um dispositivo para mapeamento tridimensional de ambientes baseado em ultrassom. Basicamente o trabalho envolve o desenvolvimento de um dispositivo para movimentar um sensor de ultrassom que mede distncias em um percurso pr-definido, a cada nova posio do sensor, gravar a distncia medida em relao a um ponto especfico do ambiente e representar graficamente no computador cada ponto analisado. Ao final do mapeamento o resultado ser um conjunto de pontos dispostos em uma representao computacional em escala do ambiente real.

Palavras chave: mapeamento, ultrassom, servomotor, OpenGL

LISTA DE FIGURAS Figura 1: Prottipo do dispositivo. Fonte: autoria prpria ............................................ 5 Figura 2: Diagrama de blocos do dispositivo. Fonte: autoria prpria ........................... 6 Figura 3: Placa de desenvolvimento Arduino UNO R3. Fonte: (ARDUINO, 2013) ...... 7 Figura 4: Diagrama de tempo do funcionamento do sensor de ultrassom. Fonte: (CircuitsToday, 2013) .................................................................................................. 8 Figura 5: Sensor de ultrassom HC-SR04. Fonte: (CircuitsToday, 2013) ..................... 9 Figura 6: Exemplo de sinal de controle de um servomotor. Fonte: (Lirtex, 2013) ..... 10 Figura 7: Sistema esfrico de coordenas. Fonte: ()................................................... 12 Figura 8: modelo em CAD do dispositivo. Fonte: autoria prpria. ............................. 13 Figura 9: Fluxograma da rotina de mapeamento. Fonte: autoria prpria. ................. 15 Figura 10: Modelo em CAD do dispositivo exemplificando uma leitura. Fonte: autoria prpria. ...................................................................................................................... 16 Figura 11: Fluxograma do software mapeador. Fonte: autoria prpria. ..................... 17 Figura 12: Janela de controle e display do software. Fonte: autoria prpria. ............ 19 Figura 13: Objeto a ser mapeado e o resultado visto de dois ngulos diferentes. Fonte: autoria prpria. ............................................................................................... 23 Figura 14: Fotos do local de tamanho mdio a ser mapeado. Fonte: autoria prpria. .................................................................................................................................. 24 Figura 15: Resultado do mapeamento de tamanho mdio na primeira posio. Fonte: autoria prpria. .......................................................................................................... 24 Figura 16: Resultado do mapeamento de tamanho mdio na segunda posio. Fonte: autoria prpria. ............................................................................................... 25 Figura 17: Resultado do mapeamento de tamanho mdio na terceira posio. Fonte: autoria prpria. .......................................................................................................... 25 Figura 19: Planta do ambiente de tamanho grande. Fonte: autoria prpria. ............. 27 Figura 20: Fotos do ambiente de tamanho grande a ser mapeado pelo dispositivo. Fonte: autoria prpria. ............................................................................................... 27 Figura 21: Resultado do mapeamento de um ambiente de tamanho grande. Fonte: autoria prpria. .......................................................................................................... 28 Figura 22: Representao da situao ideal para a leitura do sensor. Fonte: autoria prpria. ...................................................................................................................... 29 Figura 23: Representao de uma situao ruim para a leitura do sensor. Fonte: autoria prpria. .......................................................................................................... 30

SUMRIO 1 2 3 3.1 3.2 4 4.1 4.2 4.3 4.4 5 5.1 5.2 5.3 6 6.1 6.2 6.3 6.4 7 8 9 A. B. C. D. INTRODUO ........................................................................................ 3 DESCRIO DO PROJETO ................................................................... 5 REFERENCIAL TERICO ...................................................................... 7 Hardware .............................................................................................. 7 Software ............................................................................................. 11 METODOLOGIA DE EXECUO ........................................................ 13 Montagem fsica do dispositivo .......................................................... 13 Elaborao de rotinas de mapeamento .............................................. 14 Envio de dados ................................................................................... 15 Implementao do software de mapeamento tridimensional.............. 16 PROBLEMAS ENCONTRADOS ........................................................... 21 Posicionamento dos motores ............................................................. 21 OpenGL .............................................................................................. 21 Sensor de Ultrassom .......................................................................... 22 TESTES................................................................................................. 23 Ambiente de tamanho pequeno ......................................................... 23 Ambiente de tamanho mdio .............................................................. 24 Ambiente de tamanho grande ............................................................ 26 Interpretao dos testes ..................................................................... 29 CONCLUSO ....................................................................................... 32 TRABALHOS FUTUROS PARA O PROJETO ..................................... 34 REFERNCIAS BIBLIOGRFICAS ..................................................... 35 CRONOGRAMA .................................................................................... 36 ORAMENTO ....................................................................................... 37 CDIGO ARDUNO .............................................................................. 38 RELATRIO DE REUNIES ................................................................ 40

1 INTRODUO
A robtica e a computao, que antes eram desenvolvidas em sua maioria nas pesquisas de ponta ou para fins industriais, agora esto se tornando atividades mais populares, ou seja, mais pessoas esto tendo acesso e se interessando por essas reas. Estas passaram de atividades formais e acadmicas para algo mais experimental e at recreativo. Um dos motivos dessa mudana de paradigma pode ser a queda dos preos dos computadores e componentes eletrnicos e tambm a maior disponibilidade de peas e plataformas de desenvolvimento universais. Com isso os problemas clssicos da robtica e computao comeam a ser confrontados por mais pessoas e, portanto h maior possibilidade para que surjam solues criativas. Por exemplo: o problema de mapear um ambiente de forma eficiente ao levantar a topologia detalhada do local ou marcar pontos especficos que sirvam de referncia para algum sistema de navegao. Para contornar o problema preciso coletar dados a respeito do ambiente e process-los de tal forma que gerem uma representao do mundo real no computador, e com isso o sistema consiga executar tarefas baseado em seu reconhecimento do ambiente. Esse um dos problemas clssicos da robtica e tem muitas aplicaes prticas, por isso j existe uma abordagem padro, pelo menos em um primeiro momento, para resolv-lo. O passo inicial para resolver esse problema coletar os dados do ambiente, no caso de um mapeamento tridimensional uma abordagem seria escolher um ponto do ambiente, fixar um sensor e medir as distncias dos objetos em relao a esse ponto fixo. Dispondo de um sistema que possa se movimentar possvel coletar dados necessrios para mapear o ambiente em trs dimenses. Os dados brutos resultantes dessa forma de mapeamento so chamados de point cloud (Wikipedia, 2013), a traduo literal do termo em ingls nuvem de pontos, ou seja, basicamente um conjunto de pontos dispostos espacialmente em um sistema de coordenadas onde cada ponto coletado referente a uma superfcie do ambiente real. As limitaes desse mtodo dependem basicamente da qualidade do sensor (preciso nas medidas de distncia e velocidade de leitura) e da liberdade de movimentao do sistema (possibilidade de mapear todos os pontos do ambiente, velocidade de movimentao dos sensores e nmero de sensores). Mas essa

abordagem relativamente simples de implementar e em muitos sistemas o passo bsico para o mapeamento eficiente de ambientes, aps coletar os dados possvel processar o point cloud polgonos. O projeto desenvolvido nessa disciplina visa exatamente produzir uma nuvem de pontos a partir de um sistema simples e de baixo custo, dessa forma o sistema pode ser construdo por mais pessoas e serve como uma introduo ao tema de mapeamento tridimensional de ambientes. para gerar outras representaes como superfcies ou

2 DESCRIO DO PROJETO
Inicialmente o projeto prev o mapeamento de pequenos ambientes, por exemplo, os cmodos de uma residncia, portanto o dispositivo ficar fixo no centro do local para realizar as medies. Para movimentar o sensor de ultrassom sero usados dois servomotores acoplados. Dessa forma o dispositivo tem dois graus de liberdade, ou seja, pode realizar rotaes em torno de dois eixos no espao. O acoplamento entre os motores pode ser melhor compreendido ao observar a Figura 1.

Figura 1: Prottipo do dispositivo. Fonte: autoria prpria

Como se v na Figura 1, o item numerado como 1 o motor que movimenta o dispositivo no plano horizontal, o item 2 no plano vertical, o 3 o sonar, o 4 o arduino e o 5 uma placa de circuito impresso feita apenas para facilitar a conexo dos fios. O controle coordenado dos motores e a aquisio dos dados sero feitos pela placa de desenvolvimento Arduino UNO R3, que utiliza o microcontrolador ATMEGA328 (ARDUINO, 2013). O mapeamento ser feito ao longo de um percurso, no qual a cada nova posio assumida pelo sensor de ultrassom feita uma leitura de distncia. Ento, para cada uma de todas as possveis posies do percurso so gravadas trs informaes: a distncia medida em relao aos obstculos e a posio angular de

cada motor em relao ao seu respectivo eixo de rotao. Associando a cada ponto no espao essas trs informaes pode-se mapear o ambiente atravs de coordenadas esfricas. At esse ponto o sistema capaz apenas de movimentar o sensor no espao e gerar os dados referentes a um ponto, ento preciso enviar esses pontos medidos, atravs da interface serial presente na placa Arduino, para o software de mapeamento tridimensional processar cada um individualmente e gerar um conjunto de pontos em coordenadas cartesianas, que ser desenhado no ambiente 3D computacional em escala com a realidade. O software de mapeamento tridimensional ir funcionar em trs etapas: processamento dos pontos adquiridos pelo hardware (transformao de

coordenadas esfricas para cartesianas), atualizao do conjunto de pontos (adicionar o ltimo ponto recebido a um conjunto de pontos j processados) e representao na tela do conjunto de pontos (plotagem dos pontos e do ambiente tridimensional na tela atravs de instrues para a placa de vdeo do computador). Cada item destacado anteriormente est representado no diagrama de blocos na ilustrado na Figura 2.

Figura 2: Diagrama de blocos do dispositivo. Fonte: autoria prpria

3 REFERENCIAL TERICO
Podemos separar o projeto em hardware e software, o primeiro envolvendo os dispositivos fsicos e o segundo dizendo respeito a transformao dos dados obtidos em um mapa 3D. Cada uma das partes envolve diferentes assuntos que so abordados em vrias matrias do curso de Engenharia de Computao.

3.1 Hardware 3.1.1 Controle de sensores e atuadores


Para coordenar a movimentao dos motores com a aquisio de dados do sensor e o envio das informaes para o computador usado o Arduino (ARDUINO, 2013).

Figura 3: Placa de desenvolvimento Arduino UNO R3. Fonte: (ARDUINO, 2013)

Basicamente a placa da Figura 3, facilita a utilizao do microcontrolador ao dispor de forma organizada os pinos entrada e sada digital e analgicos, alm de fornecer uma interface de comunicao serial com o computador, permitindo a troca de dados de forma relativamente fcil. Alm disso, a pgina do Arduino fornece uma interface de programao em linguagem C, dispondo de diversas bibliotecas que encapsulam operaes comuns do micro controlador em funes de fcil utilizao.

Para este projeto utilizaremos os pinos de sada digital para enviar sinais aos motores e ao sensor de ultrassom, processo melhor descrito nas sees 3.1.2 e 3.1.3.

3.1.2 Sensor de distncia baseado em ultrassom (HC-SR04)


Uma parte do projeto diz respeito ao sensor de ultrassom, que envia ondas sonoras de alta frequncia para o ambiente e recebe a reflexo desse sinal. Com o tempo de resposta e sabendo a velocidade de propagao do som, possvel calcular a distncia em relao a um determinado objeto com a seguinte equao:

O sensor HCSR04 (CircuitsToday, 2013) funciona da seguinte maneira, conforme ilustrado na Figura 4, ao receber um sinal de pelo menos 10s em 5V, nvel lgico 1 no pino Trigger, o mdulo emite oito pulsos de ultrassom a uma frequncia de 40kHz, em seguida o sensor capta a reflexo do som que aps ser processada pelo circuito controlador do mdulo gera um sinal de resposta no pino Echo, a durao do sinal de resposta em 5V diretamente proporcional a distncia medida.

Figura 4: Diagrama de tempo do funcionamento do sensor de ultrassom. Fonte: (CircuitsToday, 2013)

Alguns aspectos podem influenciar na reflexo do som emitido na direo de um objeto, tais como o tipo de superfcie, dimenses, distncia e ngulo em relao ao sensor. O entendimento detalhado desse procedimento de reflexo no faz parte do escopo do projeto, pois como o mapeamento do ambiente baseado em milhares de pontos a omisso de alguns pontos por causa de leituras imprecisas no afeta a qualidade geral do mapeamento. Alm disso, pretende-se trabalhar com ambientes em que j se conhea as caractersticas dos objetos a serem analisados.

Figura 5: Sensor de ultrassom HC-SR04. Fonte: (CircuitsToday, 2013)

3.1.3 Servomotores
Um servomotor consiste basicamente de: um motor de corrente contnua, uma caixa de engrenagens de reduo, um potencimetro e sensor de posio. Basicamente o servomotor agrega esses componentes para manter uma determinada posio, quando est alimentado (usualmente de 4,8V at 6,0V) e recebe determinados pulsos no pino de sinal. Esses pulsos so sinais de onda retangular modulada em PWM, onde a largura do pulso controla a posio angular do servomotor. Na maioria dos servomotores a largura do pulso deve variar de 1 milissegundo at 2 milissegundos, fazendo com que o ngulo varie 180 graus, conforme a Figura 6.

10

Figura 6: Exemplo de sinal de controle de um servomotor. Fonte: (Lirtex, 2013)

O mais importante de cada pulso o tempo em nvel lgico alto e o perodo pode variar sem alterar o posicionamento do servomotor, desde que a frequncia dos pulsos seja suficientemente alta para que o motor no se desligue. A frequncia usada tipicamente em torno de 50Hz. (Valkenburg, 1961).Dependendo da marca do servomotor, esse tempo em nvel lgico alto pode variar entre 0,5 milissegundos a 3,5 milissegundos. Para controlar os motores usando o Arduino existe uma biblioteca especfica, a Servo.h. Ela oferece uma classe Servo com funes prontas (ARDUINO, 2013). As duas funes utilizadas no projeto so: attach - associa um pino do Arduino ao objeto da classe servo. Mudando-se os parmetros de entrada dessa funo, pode-se alterar os tempos mnimo e mximo do nvel lgico 1 do sinal enviado ao servomotor, que pode ser til pois cada servomotor pode ter especificaes diferentes. Os tempos padro so: mnimo 544 microssegundos para 0 grau e mximo 2400 microssegundos para 180 graus. write - o parmetro de entrada determina o ngulo que deseja-se mover o servomotor, variando de 0 a 180 graus. O uso desses comandos pode ser observado no cdigo de controle da placa Arduino em anexo.

11

3.2 Software 3.2.1 Programao orientada a objetos


As principais funes do programa sero: comunicao serial com hardware, processar os dados recebidos e organiz-los em uma estrutura de dados apropriada, e enviar instrues para a placa de vdeo desenhar o mapa, alm disso, h uma interface grfica para o usurio escolher alguns parmetros de funcionamento do dispositivo. Para facilitar a programao utilizaremos a linguagem Java, que j possui bibliotecas para cada uma dessas funcionalidades. Estas bibliotecas estaro citadas e descritas ao longo do texto, pois cada uma diz respeito a uma parte especfica no software.

3.2.2 Computao grfica


Para a parte do software de desenho, h a necessidade da utilizao de uma biblioteca que possibilite acessar diretamente a placa de vdeo do computador. Para esta tarefa foi escolhida a biblioteca LWJGL (LWJGL, 2013). Com essa biblioteca possvel utilizar as funes da placa de vdeo para desenhar formas primitivas como, por exemplo: pontos, linhas e tringulos. A placa de vdeo utiliza instrues em OpenGL (OpenGl, 2013), que uma interface de programao de aplicativos multiplataforma implementvel em vrias linguagens, ou seja, um conjunto de instrues universal que permite a um software trocar informaes com a placa de vdeo e ter acesso a renderizao acelerada por hardware. Portanto a biblioteca LWJGL um wrapper, invlucro em ingls, ou seja, serve para acessar as funes e comandos OpenGL a partir de um programa escrito em Java.

3.2.3 Transformao de coordenadas


Esta tarefa consiste na transformao dos dados recebidos do hardware para possibilitar que o programa desenhe o ponto no lugar correto dentro do ambiente 3D. Ela necessria, pois os dados que vm do microcontrolador para o computador so a distncia medida pelo sensor e a posio angular de cada servomotor no momento da medio do sensor. Analisando estes dados, percebe-se

12

que os pontos obtidos podem ser representados em coordenadas esfricas, pois apresentam um raio da origem at o ponto (M), um ngulo na vertical ( ) e outro ngulo na horizontal ( ), conforme a Figura 7. Contudo, para que estes dados sejam aplicveis no programa, necessria a transformao das coordenadas esfricas para coordenadas cartesianas (SANTOS,2013). A razo disto que funo que se usa para desenhar os pontos na biblioteca LWJGL usa os parmetros de acordo com os eixos x, y e z. A transformao efetiva das coordenadas ocorre na aplicao das seguintes equaes:

Figura 7: Sistema esfrico de coordenas. Fonte: (SANTOS,2013

13

4 METODOLOGIA DE EXECUO
A seguir descrito o processo de implementao do projeto em etapas, um cronograma completo com o tempo previsto para cada tarefa pode ser observado no ANEXO 1. As tarefas descritas nessa seo compreendem etapas do projeto j concludas ou em andamento. Etapas como anlise de resultados; ajustes finais; correo de erros e concluses sero descritas futuramente

4.1 Montagem fsica do dispositivo


Primeiramente, definimos o acoplamento dos motores de modo que o sensor pudesse apontar para todas as direes possveis. Ento, foi definido um modelo de prottipo que cumprisse tal tarefa. Aps isto, um modelo em CAD foi feito para visualizar os componentes fsicos necessrios para a construo do dispositivo. Chegou-se a concluso que era necessrio duas placas em formato de L para acoplar os motores da forma desejada. Uma vez obtidas as peas, a construo do prottipo revelou ser necessria a fixao do dispositivo em uma base pesada o suficiente para fazer com que este no se movimente durante a movimentao dos motores, o resultado final da montagem aparece na Figura 8.

Figura 8: modelo em CAD do dispositivo. Fonte: autoria prpria.

14

4.2 Elaborao de rotinas de mapeamento


O dispositivo ter dois servomotores para mover o sensor em todas as direes desejadas. Para que este processo dure o menor tempo possvel, ser necessrio definir uma trajetria eficiente que complete o percurso programado. Para isso os servos devem se movimentar um de cada vez, fazendo com que a cada variao angular do servo da horizontal, o outro servo da vertical percorra 180 graus. Portanto, a trajetria em questo dever resultar em um formato de uma semiesfera, que seria o suficiente para cobrir um ambiente fechado. A Figura 9 ilustra o fluxograma de execuo da rotina de mapeamento utilizada no projeto. Conforme descrito na seo 3.1.3 preciso mandar pulsos pr-definidos de acordo com a especificao dos motores. No caso do servomotor utilizado, as medies realizadas revelaram que necessrio um pulso com durao de 0.65 milissegundos para ir at a posio 0 e um pulso de 3.1 milissegundos para a posio 180. Cabe destacar que para cada modelo de servomotor esses valores podem variar e, portanto preciso fazer esse mapeamento das posies angulares para cada motor utilizado.

15

Figura 9: Fluxograma da rotina de mapeamento. Fonte: autoria prpria.

4.3 Envio de dados


O projeto prev que o Arduino deve receber os dados do sensor e envi-los ao software no computador juntamente com os dados dos ngulos dos sensores. Para tanto, o Arduino dispe do recurso de comunicao serial para mandar informaes ao computador na forma de um vetor de bytes. Desta forma, ser utilizada a biblioteca RXTX (RXTX, 2013), que possibilita a comunicao serial entre o Arduino e o programa em Java. Para enviar os dados do sensor e a posio dos motores, o Arduino envia uma string contendo os nmeros concatenados e separados por um caractere especial, pois envi-los em um byte de cada vez no

16

era o suficiente para representar um nmero inteiro positivo maior que 255. Depois o software decodifica a string para extrair os valores e atribu-los a variveis. Um exemplo de leitura dos dados pode ser observado na Figura 10 na qual ele enviaria uma leitura como os seguintes dados: 24cm, 45cm e 180 graus.

Figura 10: Modelo em CAD do dispositivo exemplificando uma leitura. Fonte: autoria prpria.

4.4 Implementao do software de mapeamento tridimensional


Para facilitar a organizao do projeto dividimos o programa em algumas classes, cada uma realizando uma tarefa especfica. O fluxograma simplificado do software pode ser observado na Figura 11.

17

Figura 11: Fluxograma do software mapeador. Fonte: autoria prpria.

18

4.4.1 Classe DisplayMapeador


Esta a principal classe do programa, responsvel por criar o Display, ou seja, a janela que exibe o ambiente tridimensional onde so desenhados os pontos, os eixos de referncia e os demais elementos grficos do programa. Como a primeira classe a ser chamada na execuo do programa durante a plotagem, ela define todas as variveis utilizadas para desenhar os pontos, por exemplo: declara um vetor com a quantidade mxima de pontos a serem desenhados e define os parmetros de operao do OpenGL. Alm disso, a classe responsvel por atualizar os pontos e envi-los para a placa de vdeo atravs de um Buffer a cada vez que um novo ponto recebido pela classe SerialCommunicator. A etapa de transformao de coordenadas esfricas para cartesianas tambm executada nessa classe, dentro da funo que atualiza os pontos.

4.4.2 Classe Movimentation


Esta classe utilizada para alterar a posio relativa da cmera dentro do Display, ou seja, mudar a janela de viso do ambiente 3D. Para realizar essa alterao de posio a classe tem uma funo que recebe as entradas do teclado e mouse e as interpreta em comandos como girar ou transladar a o ponto de vista da cmera em relao a um eixo no espao. Essa possibilidade de movimentao, muito parecida com um videogame, facilita na hora de visualizar o resultado do mapeamento, pois permite movimentar a cmera livremente pelo ambiente enquanto a leitura dos pontos realizada.

4.4.3 Classe SerialCommunicator


Esta classe responsvel por realizar a comunicao entre hardware e software atravs da interface serial, disponvel em Java atravs da biblioteca RXTX. A classe tem uma funo que fica esperando um evento serial, ou seja, alguma ao na comunicao entre serial, quando esse evento ocorre a funo l uma string, que so os dados de posio contidos no hardware, ento essa classe apenas decodifica essa string em trs variveis, distncia medida e a posio angular de cada motor, e as envia para a classe DisplayMapeador.

19

4.4.4 Classe JanelaDeControle


Esta a classe que permite ao usurio operar o sistema de mapeamento, ao definir parmetros para o desenho dos pontos e controlar o incio e fim do mapeamento. A Figura 12 ilustra a janela de controle do programa, com os respectivos itens numerados:

Figura 12: Janela de controle e display do software. Fonte: autoria prpria.

20

1- Controle de escala: permite ao usurio mudar a escala da plotagem, varia de 1:1 at 1:10. 2- Posicionamento do sensor: ao inserir a posio do sensor em cada eixo (x=vermelho, y=verde, z= azul) e clicar no boto OK o sensor deslocado para a posio escolhida pelo usurio e a partir de ento os pontos passam a ser desenhados em relao a esse novo referencial. 3- Leitura do sensor: apenas exibe o valor correspondente a distncia atual medida pelo sensor de ultrassom, serve para auxiliar no deslocamento do sensor no espao caso o usurio no disponha de algum instrumento para medir distncias. Tambm til para testar se o sensor est funcionando adequadamente. 4- Botes START/PAUSE e STOP: ao clicar em START o display comea a desenhar os pontos recebidos do hardware, com isso o rtulo do boto muda para PAUSE que ao ser clicado congela o mapeamento no ltimo ponto desenhado, o que ativa a opo START novamente retomando o mapeamento de onde parou. Caso o usurio clique em STOP o display cancela o mapeamento e apaga todos os pontos j desenhados, alm disso, quando o mapeamento recomear pelo clique em START os motores voltam para a posio angular 0. 5- Botes Salvar e Carregar mapeamento: agregam as funcionalidades essenciais de salvar e carregar mapeamentos. Clicando em salvar todos os pontos mapeados so guardados em um arquivo de texto que posteriormente pode ser carregado pelo programa. Ao carregar um mapeamento salvo anteriormente possvel continuar a plotagem de pontos normalmente, sendo que os novos pontos podem ser salvos junto com os anteriores gerando um novo mapeamento gravado em arquivo. 6- Opo Mostrar grade : Mostra ou esconde uma grade no plano XZ, essa grade serve para auxiliar na visualizao dos pontos e tambm para estimar medidas, visto que o valor do espaamento em centmetros entre uma linha e outra sempre exibido. A grade, assim como todos os elementos do programa acompanham as mudanas na escala em tempo real.

21

5 PROBLEMAS ENCONTRADOS 5.1 Posicionamento dos motores


Sem dvida o maior problema deste projeto foi o hardware, durante toda a execuo os problemas com os servomotores foram uma constante. No inicio os dois motores estavam com problemas, um deles estava com uma pea danificada e a nica soluo foi substitu-lo, o outro estava com um problema de tateio (quando o motor fica oscilando entre posies prximas). Ao trocar a fonte de alimentao, do Arduino para uma fonte CC ajustvel o problema foi parcialmente resolvido e o tateio residual pode ser causado pelo fato de o motor no ser novo. Ao utilizar um novo motor foi detectado que ele no alcanava os 180 com a biblioteca Servo.h do Arduino, aps anlises da onda PWM com o osciloscpio, foi detectado que o perodo em nvel alto da onda no chegava at os 3100 microssegundos descritos no datasheet para o servo ficar no posio de 180, por causa de uma limitao na prpria biblioteca. Para resolver o problema foi necessrio alterar o cdigo da biblioteca. Alm dos problemas mecnicos apresentados, outro desafio foi mapear a posio angular em funo do sinal de entrada como descrito na seo 3.1.3, pois cada motor (mesmo sendo da mesma marca) tem uma resposta ligeiramente diferente. Portanto foi necessrio definir os limites mnimo e mximo para o tempo em nvel lgico alto do sinal de controle de cada motor. O procedimento para resolver esse problema foi variar o sinal de entrada atravs de um potencimetro e observar a resposta do motor, sua posio angular e a corrente consumida. Quando o pulso era muito largo ou muito estreito a corrente consumida aumentava e o motor ficava travado, indicando o fim de curso do motor.

5.2 OpenGL
Apenas trabalhar com as instrues OpenGL j foi um desafio, pois este assunto no abordado no curso de Engenharia de Computao e requer conhecimento prvio de como funciona uma placa de vdeo e a sua comunicao com o processador e memria do computador. Em linhas gerais a placa de vdeo tem um processador e memria dedicados para realizar clculos de posicionamento de vrtices, renderizao de polgonos e preenchimentos de texturas, o que exige basicamente clculos envolvendo matrizes de nmeros reais. Assim as placas de

22

vdeo operam com processamento paralelo e conseguem realizar esses clculos muito mais rpido que o processador, o nico problema a troca de dados entre o processador e a placa de vdeo, que o gargalo para a velocidade de renderizao de imagens na tela do computador. O problema que ocorreu no incio do projeto foi que a cada vez que um ponto era calculado e desenhado havia uma chamada para a placa de vdeo, o processador e a placa ficavam trocando informaes a cada operao de calcular um novo ponto e para manter os pontos anteriores na tela era necessrio desenhlos novamente. Pode-se notar que com um nmero elevado de pontos h muito retrabalho desenhando os anteriores e mandando para a placa de vdeo. Assim o processador do computador ficava sobrecarregado por mandar informao para a placa de vdeo em uma frequncia muito alta. A soluo foi programar de modo mais eficiente a atualizao dos pontos atravs da criao de um buffer que vai guardando gradualmente os pontos calculados e somente quando a tela atualizada que o vetor de pontos mandado para a placa de vdeo. Dessa forma a placa j recebe um vetor com grande quantidade de pontos e os desenha de forma paralela, e s h nova comunicao entre a placa de vdeo e o processador quando a tela atualizada, operao que ocorre com muito menos frequncia que o clculo de um novo ponto.

5.3 Sensor de Ultrassom


Um problema foi ligar o sensor de ultrassom em paralelo com os motores, ou seja, usar o mesmo ponto de alimentao 5V. Isso gerou interferncias na leitura do sensor, que provavelmente ficou descalibrado devido a oscilaes nessa tenso de 5V. bem provvel que as oscilaes foram geradas pelos motores, uma vez que esses dispositivos so conhecidos por gerarem rudo no circuito enquanto esto em operao. Para resolver esse problema o sensor foi conectado diretamente a sada de 5V do Arduino, enquanto que os motores foram conectados fonte externa CC.

23

6 TESTES
Aps a implementao do hardware e o desenvolvimento do software foram realizados alguns testes para analisar se o funcionamento do dispositivo estaria de acordo com o esperado. Nesta seo descrito o procedimento de cada teste realizado, os respectivos resultados encontrados e quais as medidas tomadas para solucionar eventuais problemas.

6.1 Ambiente de tamanho pequeno


Primeiramente mapeamos pequenos objetos internamente, caixas de diversos tamanhos e um balde, para determinar se os pontos desenhados tomariam a forma dos objetos mapeados. Para caixas no obteve-se um bom resultado,

provavelmente devido ao material de papelo. Para o balde o resultado ficou bom mesmo havendo alguns pontos discrepantes, provavelmente por causa da reverberao do som dentro do balde. A
Figura 13

a seguir mostra o resultado do mapeamento.

Figura 13: Objeto a ser mapeado e o resultado visto de dois ngulos diferentes. Fonte: autoria prpria.

24

6.2 Ambiente de tamanho mdio


Agora testando o dispositivo em um ambiente um pouco maior o objetivo avaliar situaes em que podem ocorrer leituras erradas, visto que h mais possibilidades de reflexo do som emitido. No caso esse ambiente a parte inferior de uma estante, como aparece na Figura 14

Figura 14: Fotos do local de tamanho mdio a ser mapeado. Fonte: autoria prpria.

Figura 15: Resultado do mapeamento de tamanho mdio na primeira posio. Fonte: autoria prpria.

25

Figura 16: Resultado do mapeamento de tamanho mdio na segunda posio. Fonte: autoria prpria.

Figura 17: Resultado do mapeamento de tamanho mdio na terceira posio. Fonte: autoria prpria.

26

Para essa situao foi necessrio usar a funo de movimentar o sensor no espao, pois em apenas um ponto o mapeamento no era suficiente para detalhar o objeto. Nesse caso foram usados trs pontos diferentes. possvel observar na Figura 16 e na Figura 17 que alguns pontos so desenhados no software como se estivessem atravessando a parede, em locais que no deveriam estar. Isso ocorre devido s reflexes que devido ao angulo que atingem o obstculo, deveriam ser sinais perdidos, porm, acabam por atingir outro obstculo mais distante e voltar para o sonar, causando uma leitura indesejada do sensor.

6.3 Ambiente de tamanho grande


Neste ltimo teste foi realizado um mapeamento do ambiente completo, mantendo o sensor fixo, para este caso usamos a menor variao angular possvel, 1, para gerar o maior nmero de pontos Fica evidente a distoro para objetos de grandes dimenses, como a parede do quarto e o guarda roupas, observando a
Figura 20,

em perspectiva, nota-se que o mapeamento tende a formar uma esfera,

pois o sensor est analisando pontos prximos como se correspondessem a uma mesma distncia. Apesar de o mapeamento distorcer os objetos e no ser possvel detalhar muito superfcies irregulares, a disposio dos obstculos no quarto fica bem prxima do real, e, portanto esse dispositivo poderia ser integrado a um sistema de navegao onde preciso apenas saber se em determinada regio existe um obstculo. O local escolhido foi um quarto como aparece na Figura 18.

27

Figura 18: Planta do ambiente de tamanho grande. Fonte: autoria prpria.

Figura 19: Fotos do ambiente de tamanho grande a ser mapeado pelo dispositivo. Fonte: autoria prpria.

28

Figura 20: Resultado do mapeamento de um ambiente de tamanho grande. Fonte: autoria prpria.

29

6.4 Interpretao dos testes


O sensor ideal seria um que fosse muito pontual e sempre medisse a distncia exata em relao ao obstculo independente da posio do sensor, infelizmente na prtica esse tipo de sensor no existe. No caso do sensor de ultrassom a medio angular, ou seja, uma onda sonora emitida da fonte e pode atingir objetos dentro de um determinado ngulo de emisso, alm disso, o sensor tambm detecta reflexes dentro de uma determinada faixa angular. A situao ideal para esse tipo de dispositivo quando o objeto a ser medido est perpendicular com o sensor. Figura 21. Nesse caso o som refletido provm exatamente do ponto em que se deseja saber a distncia. Porm quando o mapeador se movimenta o emissor fica inclinado em relao ao obstculo e como o sensor detecta sempre a primeira onda sonora refletida a distncia medida ser diferente da desejada, como aparece na Figura 22 Portanto quando mapeador vai medir um objeto extenso esse objeto fica deformado, visto que enquanto o som refletido provm de um ponto dentro da faixa angular de emisso a distncia detectada ser sempre a mesma, no caso a menor. No caso do sensor utilizado ,conforme a descrio do fabricante, o ngulo de medio de 15 , portanto essa a preciso do sensor, ou seja, o quo pontual ele pode ser. Quanto maior a amplitude angular de emisso menos pontual o sensor e a deformao dos objetos maior, o resultado o que aparece nos mapeamentos, mostrando objetos arredondados. Conforme aparece na Figura 20 objetos mais distantes do sensor apresentam maior deformao.

Figura 21: Representao da situao ideal para a leitura do sensor. Fonte: autoria prpria.

30

Dependendo do tipo de ambiente o som pode refletir em vrios objetos antes de voltar ao sensor e a distncia medida ser maior que a desejada, pois no necessariamente as ondas refletidas provm do ponto em que o sensor est emitindo, essa situao chamada de reflexo fantasma. Outra situao quando o ngulo entre o objeto e o sensor faz com que o som refletido nunca chegue ao sensor, como aparece na Figura 22, gerando uma leitura invlida (zero ou fora de alcance).

Figura 22: Representao de uma situao ruim para a leitura do sensor. Fonte: autoria prpria.

Uma forma de tratar essas leituras incorretas e filtrar pontos discrepantes seria utilizar um algoritmo de ocupao, que cria o mapa do ambiente integrando os dados coletados ao longo do tempo (Varveropoulus).De forma bem resumida, esse algoritmo atribui uma probabilidade de existir um obstculo em cada ponto do espao compreendido no mapa considerando que a emisso da onda sonora pode ser aproximada para um formato cnico. Inicialmente todos os pontos do mapa tem a mesma probabilidade de conter objetos ou no, ento aps vrias medies ao mover o sensor no ambiente, cada ponto do mapa visto de diferentes ngulos passa a ter uma probabilidade maior ou menor de possuir algum objeto. Quanto maior o nmero de mapeamentos maior a probabilidade de o mapa gerado estar correto. Ento a equipe adicionou no software a possibilidade de mover a referncia de onde est sendo medida cada ponto. Assim, passou a ser possvel a

31

movimentao do sensor para realizar medies de diferentes ngulos, desde que o usurio indicasse no software o quanto foi movimentado em cada eixo. Porm no possvel a implementao do algoritmo de ocupao devido a sua complexidade e falta de tempo, visto que o problema foi detectado nas fases finais do projeto. Alm disso, com todo o estudo sobre os sensores percebeu-se a importncia de se escolher adequadamente um sensor que atenda as necessidades e seja vivel. Como o objetivo era criar um dispositivo de baixo custo, no chegamos a testar um mapeamento com sensores de maior preciso.

32

7 CONCLUSO
Apesar de cumprir os objetivos propostos o projeto teve um resultado abaixo do esperado, ou seja, a implementao de baixo custo, principalmente o sensor de ultrassom, comprometeu a preciso e a qualidade final do projeto, mesmo gerando uma nuvem de pontos passvel de ser utilizada em aplicaes de robtica e ainda ser possvel processar os dados para melhor-los o resultado final no ficou visualmente agradvel, ocorreu muita distoro dos objetos mapeados. Devido a imprevistos e principalmente a inexperincia com hardware a equipe demorou muito para resolver problemas relativamente simples e acabou perdendo o foco do projeto. Mesmo que o software e o hardware pudessem ser desenvolvidos em paralelo ocorreram momentos em que toda a equipe concentrou-se em um problema a ser superado, dessa forma outras partes do projeto ficaram sem evoluir enquanto aquele determinado problema era trabalhado. Por exemplo: o software de mapeamento comeou a ser desenvolvido antes da montagem do hardware, pois ainda no dispnhamos das peas, ento inicialmente o programa avanou bastante e ficou praticamente pronto, usamos pontos gerados arbitrariamente para testar o mapeamento, mas quando comeamos a montar o hardware surgiram os problemas e o software ficou parado. S voltamos a desenvolver o software na hora de integrar as partes do projeto e nesse momento no havia mais tempo para implementar todas as ideias iniciais. Independente do resultado do projeto a experincia adquirida durante o processo j valeu o esforo da equipe, pois este o primeiro momento do curso em que aplicamos conhecimentos de vrias disciplinas para integrar software e hardware com a finalidade de resolver um problema prtico, ou seja, a implementao ou pelo menos a tentativa de realizar um projeto desse carter uma amostra da realidade que enfrentaremos no restante do curso e na vida profissional, portanto esse trabalho j serve para testar nossas habilidades como engenheiros. Alm disso, o projeto, ainda que superficialmente, aborda o tema de computao grfica e serve como uma introduo a essa rea de estudo crescente. Pode-se dizer que esse trabalho no est esgotado, com algumas melhorias ele pode ser aproveitado em projetos futuros visto que se todas as ideias iniciais fossem implementadas o dispositivo se tornaria muito mais verstil e integrvel com outras pospostas de robtica ou computao. Portanto esse projeto tem pleno

33

potencial de ser utilizado em conjunto com sistemas de mapeamento e navegao em ambientes pequenos, alm de ser relativamente fcil de construir a um custo acessvel para estudantes ou entusiastas de robtica e computao.

34

8 TRABALHOS FUTUROS PARA O PROJETO


Ao longo do desenvolvimento do projeto o grupo teve diversas ideias para acrescentar. Porm devido a grande quantidade de imprevistos, no foi possvel realizar todas as ideias. A seguir h uma lista com as ideias que poderiam ser implementadas no projeto:

Utilizar mais de um sensor para aumentar o nmero de leituras por unidade de tempo; Software em Java controlar o comportamento dos motores (rotinas de mapeamento); Realizar algum tipo de processamento sobre a nuvem de pontos gerada, por exemplo: criar uma linha entre pontos que estejam a uma determinada distncia um do outro.

Estudo e escolha de um sensor mais eficiente para a aplicao Implementao do algoritmo de ocupao que utiliza probabilidade para interpretar mais eficientemente os dados recebidos pelo sensor. Integrao do projeto com um rob mvel com odometria, fazendo com que a parte de movimentao seja autnoma

35

9 REFERNCIAS BIBLIOGRFICAS
ARDUINO. (2013). Arduino UNO. Acesso em Agosto de 2013, disponvel em http://arduino.cc/en/Main/arduinoBoardUno CircuitsToday. (2013). CircuitsToday. Acesso em Agosto de 2013, disponvel em http://www.circuitstoday.com/ultrasonic-range-finder-using-8051 Lirtex. (2013). Lirtex Thecnology on the edge of time. Acesso em Agosto de 2013, disponvel control/ LWJGL. (2013). Lightweight Java Game Library. Acesso em Agosto de 2013, disponvel em http://www.lwjgl.org/ Margolis, M. (2011). Arduino Cookbook. O'Reilly media. OpenGl. (2013). OpenGl The Industry's Foundation for High Performance Graphics. Acesso em Agosto de 2013, disponvel em http://www.opengl.org/ ROSSUM. (2013). Rossum project. Acesso em Setembro de 2013, disponvel em http://rossum.sourceforge.net/ RXTX. (2013). RXTX Wiki. Acesso em Agosto de 2013, disponvel em http://rxtx.qbang.org/wiki/index.php/Main_Page SANTOS. (s.d.). Santos, R. J. (2012). Matrizes, vetorres e geometria analtica. Belo Horizonte: Imprensa Universitria. SAWICZ, D. (s.d.). Hobby Servo Fundamentals. Fonte: em http://www.lirtex.com/robotics/servo-motors-information-and-

http://www.princeton.edu/~mae412/TEXT/NTRAK2002/292-302.pdf Valkenburg, V. (1961). Sistemas sncronos e servomecanismos bsicos (2 ed.). New York: Nooger & Nevile. Varveropoulus, V. (s.d.). Robot localization and Map Construction Using Sonar Data . Acesso em Setembro de 2013, disponvel em The Rossum Project: http://rossum.sourceforge.net/ Wikipedia. (2013). Point Cloud. Acesso em 09, disponvel em Wikipedia: The Free Encyclopedia: http://en.wikipedia.org/wiki/Point_cloud

36

A. CRONOGRAMA

37

B. ORAMENTO
Tabela 1: Oramento do projeto. Fonte: Os autores

Descrio Servomotor TowerPro (MG995) Arduino UNO Sensor ultrassom (HCSR04) Outros (parafusos, suporte madeira, fios e conectores) TOTAL
* Valores baseados em <http://www.mercadolivre.com.br/> cotaes da

Quantidade utilizada 2 1 1 variada --internet no ano

Preo total (R$) 46,00 70,00 20,00 10,00 146,00


de 2013. Fonte :

38

C. CDIGO ARDUNO
#include <Servo.h> #include <NewPing.h> #define TRIGGER_PIN 5 //pino utilizado para o trigger do sensor de ultrassom #define ECHO_PIN 6 // pino utilizado para o echo do sensor de ultrassom #define MAX_DISTANCE 500 // Maximum distance we want to ping for (in centimeters). //Maximum sensor distance is rated at 400-500cm. #define VARIACAO_HORIZONTAL 2 //determina a variao de ngulo horizontal #define VARIACAO_VERTICAL 5 //determina a variao de ngulo vertical NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance. Servo servoHorizontal, servoVertical; int horizontal = 0, vertical=0; int distancia = 0; boolean aumentaAnguloHorizontal = true; void setup() { servoHorizontal.attach(9); // associa o pino 9 ao objeto do servo horizontal servoVertical.attach(10); // associa o pino 9 ao objeto do servo vertical Serial.begin(115200); // Open serial monitor at 115200 baud to see ping results. } void loop() { servoVertical.write(vertical); servoHorizontal.write(horizontal); lerSensor(horizontal,vertical); if(aumentaAnguloHorizontal == true) { horizontal += VARIACAO_HORIZONTAL; //incrementa o ngulo horizontal if(horizontal >= 180) //chegou no limite do servo horizontal { horizontal = 180; //evita valores maiores que 180 aumentaAnguloHorizontal = false; //muda o sentido do movimento if(vertical >= 180){ //chegou no limite do servo vertical vertical = 0; } else{ vertical += VARIACAO_VERTICAL; //incrementa o ngulo vertical } }

39 } else { horizontal -= VARIACAO_HORIZONTAL; //decrementa o ngulo horizontal if(horizontal <= 0) //chegou no limite do servo horizontal { horizontal = 0; //evita valores negativos aumentaAnguloHorizontal = true; //muda o sentido do movimento if(vertical >= 180){//chegou no limite do servo vertical vertical = 0; } else{ vertical += VARIACAO_VERTICAL; //incrementa o ngulo vertical } } } }

void lerSensor(int theta, int phi) { delay(30); // Wait 50ms between pings (about 20 pings/sec). 29ms should be the shortest delay between pings. unsigned int uS = sonar.ping(); // Send ping, get ping time in microseconds (uS). distancia = uS / US_ROUNDTRIP_CM; if(distancia != 0)// verifica se teve medio vlida { //envia para o computador os valores da distncia medida e ngulos dos servos por comunicao serial Serial.println(String(distancia)+"#"+String(theta)+"#"+String(phi)); } }

40

D. RELATRIO DE REUNIES
Data: 03/07/2013 Atividades Desenvolvidas: Testes com Arduino (sensor distncia). Testa da comunicao serial do Arduino para Java. Pesquisas sobre comunicao serial e desenvolvimento 3D em Java Pesquisas de preo dos componentes (servomotor e sensor ultrassom).

Prximas atividades: Testar o servo motor e o sensor de ultrassom. Programao de um ambiente 3D(testes com pontos aleatrios).

Data: 10/07/2013 Atividades Desenvolvidas: Reunio com o orientador da equipe: o Apresentao de solues para o mecanismo rotativo onde o sensor de ultrassom ser acoplado. o Sugesto de modo de calibrao utilizando um laser centralizado junto com o sensor para visualizar o local onde est ocorrendo a medio. o Discusso da possibilidade de usar formas para minimizar os erros e os buracos entre os pontos medidos, usando ferramentas matemticas como probabilidade ou se aproveitar da impreciso dos servomotores para plotar mais de um ponto na mesma posio. Testes com a distncia medida pelo sonar, sendo que este mostrou resultados bons com apenas algumas medies discrepantes. Testes do ultrassom utilizando o osciloscpio. Pesquisa sobre a ferramenta OpenGL.

Prximas atividades: Comeo da programao de um ambiente 3D utilizando OpenGL. Elaborao de uma base para o acoplamento do sensor no mecanismo rotativo.

Data: 31/07/2013 Atividades Desenvolvidas: Definio do modelo do dispositivo fsico no SketchUp. Definio das ferramentas e bibliotecas utilizadas para o desenvolvimento do software. Instalao das ferramentas e bibliotecas utilizadas para o desenvolvimento do software nos computadores da equipe. Reconhecimento das diretrizes para a confeco do relatrio de acompanhamento. Obteno dos materiais para confeco do dispositivo fsico.

Prximas atividades: Confeccionar as partes necessrias para o dispositivo fsico. Redigir o relatrio de progresso. Desenvolver mtodo para transformar coordenadas esfricas em coordenadas retangulares.

41

Data: 07/08/2013 Atividades Desenvolvidas: Testes controlando o servo motor com o Arduino Tentativa de corrigir a falha detectada no servo Elaborao da base de acoplamento do dispositivo Elaborao do relatrio de progresso

Prximas atividades: Arrumar o servo motor para que tenha condies de uso no projeto, ou comprar um novo se for o caso. Redigir o relatrio de progresso Otimizar o processo de desenho de imagens no software Testar distncia de alcance do sensor

Data: 14/08/2013 Atividades Desenvolvidas: Tentativa de corrigir a falha detectada no servo Elaborao do relatrio de progresso Verificao do raio de alcance do sensor de ultrassom

Prximas atividades: Montar o dispositivo com os novos servos Otimizar o processo de desenho de imagens no software Comear o desenvolvimento do software definitivo

Data: 28/08/2013 Atividades Desenvolvidas: Teste do dispositivo montado o Debug do software o Soluo de problemas dos servos o Soluo de problemas do sensor Discusso da ideia de fazer uma PCI para facilitar a montagem Reunio com o orientador para discusses sobre o dispositivo e relatrio

Prximas atividades: Elaborar o projeto do PCI e execut-lo Elaborao dos cabos necessrios

Data: 04/09/2013 Atividades Desenvolvidas:

42
Elaborao dos cabos Elaborao da PCI Detectado problemas com o atual esquema da PCI Discusso de ideias para resolver os problemas do sensor

Prximas atividades: Refazer o projeto da PCI Resolver os problemas detectados com os servos e o sensor

Data: 11/09/2013 Atividades Desenvolvidas: Discusso e soluo com o professor sobre o problema com os servos Descobrimento do problema com a biblioteca Servo.h do arduino

Prximas atividades: Elaborar a monografia final Testar o software junto com o dispositivo Solucionar o problema do servo

Vous aimerez peut-être aussi