• Nenhum resultado encontrado

4.3 Captura e Processamento de Imagem

4.3.1 Captura de Imagem

Para a captura das imagens vai ser necess´aria a utiliza¸c˜ao de uma biblioteca de processamento de imagem. Para isso, foi escolhida a biblioteca OpenCV, Open source Computer Vision library. O OpenCV ´e uma biblioteca implementada em C/C++ muito otimizada, que oferece interfaces para outras linguagens de programa¸c˜ao, podendo ser usado usando C++, C, Python, Java e MATLAB. ´E uma biblioteca multiplataforma que suporta Windows, Linux (incluindo vers˜oes ARM ), Mac OS,

Figura 4.9 – Modulo de Captura de Imagem

iOS e Android.

Nesta aplica¸c˜ao, vai ser usado um Raspberry Pi Zero para a captura e processamento de imagem, que usa um sistema operativo Linux ARM (RaspBian) e vai ser implementado na linguagem Java. Usando esta linguagem, vai facilitar a eventual necessidade de comunica¸c˜ao com outras partes do sistema e a possibilidade de executar o programa em diferentes plataformas, se necess´ario.

O primeiro procedimento que este subsistema vai executar ´e a captura da imagem, usando as bibliotecas OpenCV, o que vai permitir a configura¸c˜ao da resolu¸c˜ao, da recolha da imagem, podendo aumentar ou diminuir a resolu¸c˜ao, como for necess´ario para a aplica¸c˜ao. Para a aplica¸c˜ao de teste vai ser usada a resolu¸c˜ao padr˜ao de 640px ∗ 480px, podendo ser facilmente alterada para as capacidades m´aximas do sensor. A velocidade de recolha das imagens vai depender do processamento. O procedimento para a recolha das imagens ser´a iniciado com a recolha da imagem, de seguida ser´a efetuado o processamento da imagem e os c´alculos necess´arios para recolher as informa¸c˜oes necess´arias. Com este procedimento n˜ao ´e pratico fazer uma medida de velocidade da recolha da imagem em frames por segundo, pois tudo ´e

dependente do processamento efetuado sobre a imagem, j´a que a pr´oxima imagem s´o ´e recolhida depois do processamento completo da primeira.

4.3.2

Processamento de Imagem

O processamento da imagem vai ser feito em v´arias partes. Primeiro, a imagem vai ser separada nas suas matrizes componentes, vai seguidamente ser calculado o histograma para cada matriz separada da imagem. Ser´a em seguida calculada a percentagem de luminosidade para cada canal, ou matriz, da imagem e finalmente vai ser calculado o ´ındice NDVI da totalidade da imagem.

Decomposi¸c˜ao da Imagem

A imagem capturada pelo OpenCV est´a codificada no campo de cores BGR, estando as cores na matriz multidimensional da imagem, organizadas segundo o comprimento de onda das respetivas cores, sendo primeiro o azul (Blue) que tem o menor comprimento de onda, segundo pelo verde (Green), que tem um comprimento de onda superior ao azul mas inferior ao vermelho, e por fim, a cor vermelha (Red ). No sensor que ´

e sens´ıvel a infravermelho, este comprimento de onda vai estar no lugar do canal vermelho da matriz. ´E daqui que vem o posicionamento da matriz do campo de cores BGR (Blue, Green e Red). Esta matriz multidimensional vai ser separada em 3 matrizes simples, usando o Algoritmo 13

Algorithm 13 Separar canais

1: procedure separar canais(imagem) . imagem capturada

2: matrizes mB, mG, mR

3: Lista de matrizes BGR

4: Core.split(imagem, bgr) . fun¸c˜ao para separar as matrizes da imagem

5: mB = BGR.get(0) . retirar da lista auxiliar o canal azul 6: mG = BGR.get(1) . retirar da lista auxiliar o canal verde

7: mR = BGR.get(2) . retirar da lista auxiliar o canal vermelho

8: end procedure

C´alculo do histograma

No caso de processamento de imagem, um histograma ´e uma matriz coluna onde s˜ao guardadas as ocorrˆencias de uma determinada luminosidade para cada pixel presente na imagem.

A luminosidade nos pixeis da imagem s˜ao representa¸c˜oes num´ericas de 0 a 255, onde 0 ´e luminosidade 0% e 255 ´e luminosidade 100%. Esta utiliza¸c˜ao de percentagem para definir o valor de luminosidade do pixel ´e feita para otimiza¸c˜ao de c´odigo, pois ir˜ao ser necess´arios menos c´alculos para alcan¸car o resultado pretendido no final. No caso desta aplica¸c˜ao e da utiliza¸c˜ao da biblioteca OpenCV, ´e poss´ıvel configurar certos parˆametros para o c´alculo do histograma, o que nos v˜ao facilitar mais adiante os c´alculos.

O histograma foi calculado com a sensibilidade de 0 a 255, ou seja, vai usar para o c´alculo todos os pixeis da imagem e s˜ao guardados numa matriz coluna de 100 valores, o que vai provocar que pixeis com valores de 0 e 1 v˜ao ser classificados com o valor 0. A utiliza¸c˜ao de uma matriz coluna de 100 valores vai facilitar os c´alculos mais adiante.

O histograma ´e ent˜ao calculado com o Algoritmo14, que ´e implementado para cada um dos canais.

Algorithm 14 Calcular Histograma

1: procedure histograma(canal, componentes, valorminimo, valormaximo) .

canal - canal a calcular o histograma, componentes - numero de segmentos do histograma (colunas), valor m´ınimo e valor m´aximo - valores de sensibilidade 0 a 255

2: hist . vari´avel onde vai ser guardada o histograma

3: calcHist(canal, hist, componentes, valorminimo, valormaximo)

4: end procedure

Partindo da suposi¸c˜ao que o erro introduzido pelo ru´ıdo branco na imagem ser´a aproximadamente igual para todos os pixeis, n˜ao ser´a por isso necess´ario passar um filtro o que ir´a reduzir o peso computacional do programa.

C´alculo NDVI

Para calcular os valores NDVI s˜ao utilizados os valores da reflex˜ao de luz vis´ıvel e de luz infravermelha.

Inicialmente, v˜ao ser utilizados os histogramas de cada matriz retirada das imagens, para obter uma an´alise superficial da imagem e para ser mais leve em termos computacionais. Esta an´alise ´e tipicamente feita pixel a pixel para uma an´alise detalhada da imagem.

Para o aux´ılio do c´alculo, vai ser constru´ıda uma matriz coluna com 100 elementos, tantos como os elementos do conjunto de dados do histograma, onde esta matriz coluna vai ser povoada com os valores de 0 a 100, come¸cando em 0, com incrementos de 1, at´e povoar a matriz coluna.

Esta matriz vai ser multiplicada com a matriz dos valores do histograma, e assim vai ser criada uma nova matriz, que vai ter para cada coluna o n´umero de ocorrˆencias de uma dada luminosidade com a pr´opria luminosidade normalizada para valores de

Algorithm 15 Calculo reflex˜ao do canal

1: procedure reflex˜ao(histograma) . histograma calculado anteriormente

2: somaT otal = sumElements(histograma) . soma dos valores do histograma

3: aux.create(100, 1, 5) . cria¸c˜ao da matriz auxiliar

4: for i = 0; i < 100; i + + do

5: aux.put(i, 0, i) . povoar a matriz coluna com valores de 0 a 100 6: end for

7: multiply(histograma, aux, histograma) . multiplicar o histograma com a matriz auxiliar e guardar na matriz do histograma

8: media = mean(histograma) . calcular a media

9: ref lexao = media/somaT otal . calcular o valor da reflex˜ao do canal

10: end procedure

0 a 100.

Seguidamente, para esta an´alise inicial da imagem ´e calculada a soma total dos elementos do histograma, usando uma fun¸c˜ao no OpenCV, que implementa precisamente o c´alculo da soma de todos os elementos do histograma.

Vai ent˜ao ser calculado o valor m´edio da matriz, tamb´em com o aux´ılio das fun¸c˜oes matem´aticas dispon´ıveis na biblioteca OpenCV.

Esta m´edia calculada vai ser ent˜ao dividida pelo valor total somado anteriormente e o resultado vai ser a reflex˜ao do canal em percentagem como mostra o Algoritmo

15.

Algorithm 16 Calculo NDVI

1: procedure ndvi(reflex˜aoIR , reflex˜aoVis) . reflex˜ao IR , reflex˜ao luz vis´ıvel

2: ndvi = (ref lexaoIR − ref lexaoV is)/(ref lexaoIR + ref lexaoV is)

3: end procedure

Para facilitar estes c´alculos, os valores do histograma foram calculados para um campo de resultados de 100 valores, para que este c´alculo fosse feito mais facilmente e poupando instru¸c˜oes e recursos.

´

E ent˜ao calculado o indicador NDVI com estes valores de reflex˜ao de cada canal, onde este indicador ´e a diferen¸ca do valor de reflex˜ao do canal infravermelho, com o canal verde a dividir pela soma dos valores de reflex˜ao do canal de infravermelho com o canal verde como mostra o Algoritmo 16.

4.4

Modelos 3D

Para desenhar o modelo foi utilizado o programa FreeCad, que ´e um programa de desenho 3D param´etrico, com as caracter´ısticas ideais para o desenho de pe¸cas para impress˜ao 3D. Permite exportar a pe¸ca desenhada em formatos imediatamente reconhecidos pelo software de impress˜ao 3D. Estes programas, chamados slicer, dividem o modelo em camadas, e traduzem o modelo em coordenadas para a impressora seguir e imprimir a pe¸ca.

O primeiro modelo s˜ao pequenas asas que s˜ao colocadas nas pontas das asas do VANT. Estas asas s˜ao muito importantes para a performance aerodinˆamica do ve´ıculo, j´a que nesta zona, ponta da asa, ´e onde o ar de alta press˜ao na parte inferior da asa e o ar de baixa press˜ao na parte superior da asa se tendem a juntar, Figura 4.10.

Este fen´omeno tem a tendˆencia de criar elevada turbulˆencia e reduz a performance aerodinˆamica da asa, da´ı estas asas adicionais serem muito importantes. Estas v˜ao tamb´em auxiliar o VANT durante a execu¸c˜ao de curvas, podendo este executar curvas com um ˆangulo mais agressivo. Para fixar esta pe¸ca, ´e usada uma placa como no modelo da Figura 4.11.

A segunda pe¸ca a ser desenhada ´e um conjunto de simples retˆangulos que v˜ao ter a fun¸c˜ao de fechar a asa. Estas pequenas pe¸cas v˜ao permitir que n˜ao seja necess´ario

Figura 4.10 – Modelo da Ponta da Asa

que a asa seja fechada de um modo mais permanente.

Estas pe¸cas facilitam assim o acesso ao interior da asa, como se vˆe nos modelos das Figuras 4.12 e 4.13.

4.4.1

Conclus˜ao

Neste cap´ıtulo, foi abordada a implementa¸c˜ao dos sistemas componentes do VANT, come¸cando pela aplica¸c˜ao web, a intera¸c˜ao com o utilizador e a apresenta¸c˜ao dos dados recebidos pelo utilizador, tanto por motivos de planeamento de a¸c˜oes como para nesta fase de testes facilitar a apresenta¸c˜ao de dados de comunica¸c˜ao entre o VANT e o servidor. Na segunda parte deste cap´ıtulo foram abordados os sistemas presentes no VANT. Aqui, foram expl´ıcitos os processos e algoritmos de implementa¸c˜ao do controlo de alto n´ıvel do VANT, o sistema de baixo n´ıvel e o sistema de captura e an´alise de imagens. Por fim, foram abordados os modelos e pe¸cas imprimidas

Figura 4.11 – Modelo da Ponta da Asa

Figura 4.12 – Modelo do Fixador Inferior da Asa

usando a impressora 3D. Estas pe¸cas fabricadas vieram aumentar a praticabilidade da utiliza¸c˜ao do sistema e uma maior variedade de solu¸c˜oes para a constru¸c˜ao do VANT.

5

Testes

Neste cap´ıtulo ser˜ao apresentados os testes efetuados ao VANT, bem como os resultados obtidos. A primeira parte deste cap´ıtulo vai abordar os testes relativos ao sistema de aquisi¸c˜ao de imagem. A segunda parte vai ser dedicada aos testes efetuados aos sistemas de comunica¸c˜ao e aquisi¸c˜ao de dados do VANT. Por fim, v˜ao ser apresentados testes de voo ao VANT.

5.1

Aquisi¸c˜ao de Imagens

Os testes foram realizados sobre o software desenvolvido, usando-o para fazer a aquisi¸c˜ao e processamento de imagem. A imagem adquirida pelo sistema na Figura

5.1 n˜ao est´a processada e pode observar-se um cato verde.

Em contraste, temos uma imagem do mesmo cato com recurso uma cˆamara sens´ıvel ao infravermelho (comprimento de onda de 880nm). A parte da imagem que apresenta o cato, ou seja, a que tem clorofila presente, fica vermelha, como ´e mostrado na

Figura 5.1 – Imagem n˜ao Processada com T´ıpica RGB

Figura 5.2.

Figura 5.2 – Imagem N˜ao Processada com uma Cˆamara Sens´ıvel a Infravermelho

Aqui est˜ao tamb´em representadas duas imagens (nas Figuras 5.3e5.4), retiradas da matriz multidimensional da imagem completa, utilizando o software desenvolvido em Java com o aux´ılio das bibliotecas OpenCV.

Figura 5.3 – Imagem Isolada Espetro Verde

Figura 5.4 – Imagem Isolada Espetro Infravermelho

Estas imagens, que s˜ao retiradas dos v´arios canais da matriz, podem dar uma maior compreens˜ao a um objeto de estudo. No entanto, neste tipo de recolha de imagens as condi¸c˜oes de luminosidade tˆem muita influˆencia no resultado final devido ao facto destes serem sensores passivos, ou seja, dependem de luz (ou radia¸c˜ao eletromagn´etica) externa para as leituras do sensor.

Se a fonte luminosa n˜ao tiver o espetro luminoso completo da sensibilidade da cˆamara, como pode ser o caso quando ´e utilizada luz artificial, os resultados podem ser distorcidos da realidade espetral do objeto.

Este tipo de problemas tamb´em afeta a recolha de dados quando esta ´e feita por sat´elite, pois ´e sempre necess´ario muitas passagens pela mesma zona para obter uma an´alise completa da zona de estudo [96].

Nos resultados obtidos pela execu¸c˜ao do software, o tamanho da imagem, neste caso de teste ´e reduzido para 640px por 480px, que ´e o tamanho de captura de uma imagem standard na biblioteca OpenCV, usando a fun¸c˜ao videoCapture.

Os resultados na forma de percentagem da luminosidade do canal verde (17%) e do canal infravermelho (12%), e por fim, o c´alculo do ´ındice NDVI, que neste caso deu um resultado negativo, significa uma falta de vegeta¸c˜ao neste caso de teste.

Tamb´em foram retiradas imagens de teste com luz natural, usando o sistema que usa um Raspberry Pi A+ e uma cˆamara com o filtro azul.

Nota-se na imagem da Figura 5.5 que a imagem produzida com este filtro com exposi¸c˜ao `a luz natural s˜ao muito diferentes do que as produzidas anteriormente com luz artificial.

´

E tamb´em a esta imagem feita uma r´apida an´alise ao sistema com a cria¸c˜ao de um histograma apresentado na Figura 5.6, com o programa GIMP, que pode ajudar a prever o resultado do c´alculo pelo programa desenvolvido.

Figura 5.5 – Imagem com Luz Natural

Figura 5.6 – Histograma da Imagem

5.2

Testes ao VANT

Os primeiros testes de voo foram realizados com o propulsor desligado. Nestes, detetou-se a necessidade de altera¸c˜ao do centro de massa do VANT, Figura 5.7, pois o mesmo estava situado atr´as do centro de for¸cas aerodinˆamicas das asas que proporcionam o voo.

Figura 5.7 – Fotografia do VANT Desenvolvido

Quando os centros de for¸cas est˜ao desalinhados desta maneira, torna o VANT ou qualquer outro ve´ıculo a´ereo, inst´avel e mais dif´ıcil de controlar, pois a rela¸c˜ao de for¸cas ir´a fazer com que o VANT tenha mais for¸ca aerodinˆamica `a frente, o que ir´a provocar o levantar da parte frontal, levando a que o ˆangulo de ataque seja demasiado elevado e altere a aerodinˆamica da asa, deixando de funcionar, provocando a queda do VANT.

Para resolver esta situa¸c˜ao, a bateria e o router que foram colocados no VANT para permitir comunica¸c˜ao atrav´es da rede sem fios, foram colocados o mais `a frente poss´ıvel na plataforma, colocando assim, o centro de massa mais `a frente e resolvendo assim o problema de estabilidade.

Com pe¸cas constru´ıdas com o aux´ılio de uma impressora 3D, Figura 5.8, as pontas das asas apresentadas na Figura 5.9 s˜ao importantes para melhorar a performance aerodinˆamica das asas e aumentar a sua eficiˆencia, como dito no cap´ıtulo anterior, aumentando a estabilidade e autonomia do sistema.

Figura 5.8 – impressora 3d

Foram, para isso, imprimidas as duas pe¸cas apresentadas na Figura 5.10e5.11, que tornam mais r´apido o acesso ao interior da asa onde est´a alojada parte da eletr´onica do VANT.

Figura 5.10 – Fecho da Asa Superior

Figura 5.11 – Fecho da Asa Inferior

Com estas altera¸c˜oes, estes problemas foram resolvidos e o balan¸co do centro de massa e o centro da for¸ca aerodinˆamica estavam em posi¸c˜oes que facilitam o voo do VANT.

poss´ıvel identificar os problemas iniciais de balan¸co entre o centro de lift e o centro de massa para o voo est´avel do VANT.

A segunda parte de teste consistiu em pequenos voos curtos e de baixa altitude para testar os atuadores das asas e o propulsor.

A ´ultima parte de testes constituiria testes completos de voo a uma maior altitude mas n˜ao foram efetuados devido `a eventual perda do VANT.

6

Conclus˜ao e Trabalho Futuro

6.1

Conclus˜ao

O principal objetivo deste trabalho foi a constru¸c˜ao de um VANT.

Para isso necess´ario proceder `a constru¸c˜ao da parte mecˆanica e da parte de controlo (eletr´onica + software). O controlo remoto do VANT foi obtido atrav´es do desenvolvimento de uma aplica¸c˜ao contruida com as mesmas tecnologias que s˜ao usadas para a web. Tanto a aplica¸c˜ao web, o servidor, o m´odulo de recolha de imagens e a plataforma remota foram implementados usando Java se bem que o VANT usa tamb´em um Arduino Due programado com o ambiente integrado de desenvolvimento deste. Para o desenvolvimento deste VANT foi tamb´em constru´ıda uma impressora 3D, que teve a fun¸c˜ao de imprimir as pe¸cas do VANT.

O servidor para a aplica¸c˜ao web foi implementado no sistema de alto n´ıvel a correr num Raspberry Pi.

O posicionamento do servidor integrado no VANT veio adicionar a necessidade de colocar um router no VANT, o que acabou por ter a vantagem de ser poss´ıvel mais

facilmente a altera¸c˜ao do centro de massa do VANT para resolver alguns problemas de estabilidade.

Documentos relacionados