Você está na página 1de 16

Instituto Federal Fluminense

Engenharia de Controle e Automao

CONTROLE DOS MOVIMENTOS DE UM DRONE


POR MEIO DE RECONHECIMENTO DE ID

Stphany Barreto Batista Issa

Yago Pacheco Teixeira

Campos dos Goytacazes

Abril 2017
Sumrio

1. Objetivo...................................................................................... 1

2. Introduo .................................................................................. 2

3. Desenvolvimento ....................................................................... 3

3.1. Processamento de Imagem .................................................. 3

3.2. Controle do Drone ................................................................ 7

4. Resultados ................................................................................. 9

5. Concluso ................................................................................ 10

6. Anexos ..................................................................................... 11

6.1. Cdigo do MATLAB ............................................................ 11

6.2. Modelo do Simulink ............................................................ 14


1. Objetivo

O principal objetivo deste trabalho desenvolver um sistema capaz de identificar


figuras, aqui chamadas de IDs, e a partir dessas figuras determinar o movimento
que o drone deve realizar. O processo de identificao do ID ser feito atravs
de um algoritmo desenvolvido no MATLAB, em seguida esse mesmo algoritmo
far uma comparao com os IDs j cadastrados e determinar a movimentao
do Drone.

1
2. Introduo

O drone ou Aeronave Remotamente Pilotada (RPA) uma das tecnologias que


mais tem chamado a ateno nos ltimos tempos. Os drones possuem diversas
utilidades, e so empregados principalmente em aplicaes militares, sistemas
de vigilncia, fotografia, etc. Aliar essa tecnologia com sistemas de viso
computacional e tratamento de imagens pode resultar em solues de
problemas prticos reais nas mais diversas reas.

Sendo assim, o presente trabalho se prope a desenvolver um sistema cujo


objetivo principal controlar os movimentos de um drone a partir do tratamento
e reconhecimento de imagens. Dessa forma, a webcam de um computador ser
usada para a captao da imagem, que ser tratada no MATLAB atravs de um
algoritmo desenvolvido. Cada ID cadastrado representar um movimento que o
drone dever executar, como subir, descer, girar para direita ou esquerda, etc.
Para fins de simplificao e objetivando apenas fazer a demonstrao da
funcionalidade, sero usados dois IDs, um para indicar rotao para a direita e
outro para indicar rotao para esquerda. Aps tratada e reconhecida, a imagem
vai resultar em um padro, como uma matriz de zeros e uns, que representam
os blocos brancos e pretos da figura. Sendo assim, esse padro ser comparado
com os padres previamente salvos no algoritmo, se o padro for reconhecido,
ser enviado um sinal para o drone, para que ele realize o respectivo movimento
associado quele ID.

Os componentes utilizados sero: um webcam para a captao da imagem, um


Arduino Mega 256 e uma placa de circuito do joystick para envio dos comandos
para o drone, e o prprio drone modelo Air Parrot 2.0. Os softwares utilizados
sero: o MATLAB/Simulink para o processamento do algoritmo desenvolvido, e
o software AutoFlight responsvel pela comunicao com o drone.

2
3. Desenvolvimento

O controle dos movimentos do drone pode ser dividido em duas partes: o de


captura e processamento da imagem e o de definio e envio do sinal de
controle. Essas duas fases se dividem nas seguintes etapas:

Transmisso Envio do
Captura da Comparao do Sinal Sinal para o
Envio do
Imagem Tratamento com os IDs para o Drone
Sinal para o
pelo da Imagem Cadastrados Joystick Atravs do
Simulink
MATLAB Atravs do Software
Arduino Autoflight

Figura 1 - Diagrama do Sistema

3.1. Processamento de Imagem

Primeiramente foi desenvolvido o padro das imagens, ou IDs, a serem usados,


como pode ser visto nas figuras abaixo:

Figura 2 - IDs

3
Eles foram elaborados com uma borda vermelha para facilitar que o algoritmo de
tratamento da imagem encontre o contorno da figura. Esse padro de IDs foi
desenvolvido para formar 9 blocos internos, como se ele fosse dividido em trs
linhas e trs colunas. Dessa forma, cada bloco poderia ser visto como elemento
de uma matriz, que iria conter valores binrios, ou seja, os blocos brancos e
pretos seriam representados por zeros e uns. Sendo assim, foi definido que o
bloco branco tem valor lgico 0 e o preto tem valor lgico 1. Cada ID foi associado
a um tipo de movimento que o drone deve executar.

O processo se inicia com a captura da imagem do webcam. A imagem


capturada diretamente pelo MATLAB, travs do uso do USB Webcam Support
Package, disponvel no site da MathWorks. Assim, o comando snapshot salva
na respectiva varivel a imagem capturada no momento em que o comando
executado.

Figura 3 - ID de teste

Um filtro desenvolvido localiza a borda vermelha e cria uma nova figura


representando essa borda e o que est contido em seu interior:

4
Figura 4 - Identificao da Borda

Ento, aplica-se um filtro para eliminar os rudos da imagem gerada:

Figura 5 - Remoo do Rudo da Imagem

Em seguida, identifica-se o formato quadrado da imagem.

Figura 6 - Identificao do Quadrado Principal

Tendo o contorno da figura definido, extrado apenas a parte interna desse


contorno, que a parte que contm a informao til. O restante da figura
descartado.

5
Figura 7 Identificao da Figura Completa

Para finalizar, a imagem convertida para preto e branco.

Figura 8 - Resultado do Tratamento da Imagem

Com a imagem final obtida, o cdigo divide a figura em 9 blocos e determina a


cor majoritria em cada bloco, gerando a matriz binria correspondente

Figura 9 - Matriz Resultante

6
3.2. Controle do Drone

Tendo a matriz correspondente que foi gerada atravs do tratamento da imagem,


o algoritmo compara essa matriz com as matrizes j cadastradas, onde cada
uma delas est relacionada a um ID e representa um movimento que o drone
deve executar. Para fins de simplificao, foram cadastradas apenas duas
matrizes, A e B, que representam o os movimentos de giro para esquerda e para
a direita, e esto associadas ao ID 1 e ao ID 2 respectivamente.

Figura 10 - ID 1 e Matriz A

Figura 11 - ID 2 e Matriz B

Portanto, se for exibido o ID 1 para a cmera, ou seja, se T for igual a A, significa


que o drone deve girar para esquerda. Sendo assim enviado um sinal binrio
para o modelo do Simulink, que encaminha esse sinal para uma sada digital do
Arduino
7
Figura 12 - Modelo do Simulink

O Arduino por sua vez ativa um pino da placa do joystick. Tendo previamente
configurado o joystick no software AutoFlight, o software envia o comando para
o drone atravs de sua conexo sem fio, e este realiza o respectivo movimento
de giro para a esquerda.

Neste exemplo, tendo T = A, seria enviado o valor lgico 1 para o bloco TL. Isso
ativaria o pino 19 do Arduino, que mandaria um sinal para a o pino do joystick
previamente configurado no software AutoFlight para enviar o comando de giro
para esquerda. Enquanto o ID 1 estiver sendo exibido para a cmera, o drone
vai se manter realizando o movimento determinado.

O mesmo processo aconteceria caso fosse usado o ID 2. Nesse caso a matriz T


seria igual a B e consequentemente a lgica do sistema iria gerar o sinal de
comando de giro para direita.

Caso no esteja sendo apresentado nenhum ID para a webcam, ou caso o ID


no seja cadastrado, nenhum comando enviado para o drone e este apenas
permanece parado na posio em que se encontra.

Todo esse processo, que inclui a etapa de tratamento da imagem e da gerao


e envio do sinal de controle acontecem de forma cclica e contnua, ou seja,
enquanto o algoritmo estiver rodando no MATLAB.

8
4. Resultados

Foram realizados testes para verificar o funcionamento do sistema onde quatro


condies foram testadas, obtendo as seguintes respostas:

Uso do ID 1 e consequente giro para esquerda


Uso do ID 2 e consequente giro para direita
Uso de um ID no cadastrado, onde o drone se manteve parado
No exibio de ID para a cmera, onde o drone tambm se manteve
parado

Durante os testes algumas deficincias foram observadas: primeiramente, o filtro


apresenta limitaes para identificar as bordas da figura (para cada novo
ambiente e nova iluminao necessrio que seja feito o ajuste dos seus
parmetros para que ele funcione corretamente); em segundo lugar, quando o
ID exibido para a cmera preciso que ele se encontre em um ngulo favorvel
para que o sistema o identifique, caso contrrio o tratamento da imagem no
funciona corretamente.

Apesar das limitaes, o objetivo geral do projeto foi alcanado, uma vez que
conseguimos desenvolver um algoritmo que tratasse a imagem exibida no
webcam e que controlasse o movimento do drone a partir dessa imagem.

9
5. Concluso

O uso de viso computacional aliado a tecnologia de drones pode ser a base


para se desenvolver solues nas mais diversas reas. A proposta no presente
trabalho foi fazer com que o drone se movimentasse baseado no ID que
estivesse sendo exibido para a webcam do computador. Esse objetivo foi
alcanado atravs da juno de softwares e hardwares que unidos permitiram
realizar o controle dos movimentos do drone.

O uso de apenas dois IDs cadastrados se deu apenas para fins de


exemplificao, mostrando a funcionalidade do sistema como um todo. Para
futuros trabalhos sugere-se que novos IDs sejam cadastrados. Dessa forma
novos movimentos podero ser controlados. Alm disso, sugere-se que seja feito
um aprimoramento no filtro que trata a imagem, para que este possa responder
corretamente em diversos ambientes e sob diferentes condies de iluminao.

10
6. Anexos

6.1. Cdigo do MATLAB

Controle_Drone.m

%% Inicializao

clear
clc
close all

cam = webcam(); %Inicia a webcam

sim('drone'); %Inicia a simulao do modelo do simulink


drone.slx

%% LOOP

Start = 1;

while Start == 1

%% Captura de Imagem da Webcam

Fig = snapshot(cam); %Captura a imagem da webcam

%% FILTRO

s = size(Fig);
linhas_Fig = s(1,1);
colunas_Fig = s(1,2);

N = zeros(linhas_Fig, colunas_Fig); % Cria uma matriz N com a


mesma dimenso de Fig - figuras de fundo PRETO

% Varre a matriz Fig


% Onde os valores de vermelho forem >= 100, verde <= 70 e azul <= 90
% O valor de vermelho da matriz Fig salvo na matriz N
for i = 1:linhas_Fig
for j = 1:colunas_Fig

if Fig(i,j,1) >= 100 & Fig(i,j,2) <= 70 & Fig(i,j,3) <= 90 %


filtro para novo vermelho
N(i,j) = Fig(i,j,1);

end

11
end
end

%imshow(N)

se = strel('disk', 5) ; %cria um disco de raio 5


N2 = imopen(N, se) ; %Resulta removendo os ruidos externos
atraves de dilatao e eroso da foto
% figure
% imshow(N2)

M2 = imfill(N2); %Preenche furos na imagem 'em escala de


cinza' N2. O furo definido como uma
% area de pixels escuros rodeados de pixels mais claros
%figure
%imshow(M2)

tam = size(M2);
linhas_M2 = tam(1,1);
colunas_M2 = tam(1,2);

metade_l = ceil(linhas_M2/2); %Encontra o centro da figura em y


metade_c = ceil(colunas_M2/2); %Encontra o centro da figura em x

met1 = ceil(metade_l/2);
met2 = ceil(metade_c/2);

%% Encontrar as bordas da figura

box = regionprops(M2,'BoundingBox');
comprim = length(box);

min_b1 = 1000;
min_b2 = 1000;
max_b3 = 0;
max_b4 = 0;

for i = 1:comprim

a = box(i).BoundingBox;

if (a(3) > max_b3 & a(4) > max_b4)

min_b1 = ceil(a(1));
min_b2 = ceil(a(2));
max_b3 = a(3);
max_b4 = a(4);

end

end

%% Separando o quadrado da imagem

shape = insertShape(M2, 'rectangle', [min_b1 min_b2 max_b3 max_b4],


'lineWidth', 5);

12
%figure
%imshow(shape)
I2 = imcrop(Fig,[min_b1 min_b2 max_b3 max_b4]);
%figure
%imshow(I2)

%% Separando a imagem em blocos


I3 = im2bw(I2);
k = size(I3);
q1 = ceil(k(1,1)/3); %Divide a imagem em 9 blocos
q2 = ceil(k(1,2)/3);

T = zeros(3,3);
w = 0;
v = 0;

for i = ceil(q1*0.6):q1:k(1,1) %Pega so uma parte dos blocos


for j = ceil(q2*0.6):q2:k(1,2)

if I3(i,j,:) < 1

linha = ceil(i/q1);
coluna = ceil(j/q2);

T(linha, coluna) = 1;

end

end
end

%figure
%imshow(I3)

%% Classificao e teste da matriz encontrada

% Comandos do drone

% T - Take Off / Land

% J - Rotate Left
% L - Rotate Right

% A = [ 1 0 1 ] Roda para Esquerda


% [ 1 1 1 ]
% [ 1 0 1 ]

% B = [ 0 1 0 ] Roda para Direita


% [ 1 1 0 ]
% [ 0 1 1 ]

13
% T determina qual matriz encontrada anteriormente pelo processamento
de imagens
% matrix classifica essa matriz para determinar a direo em que o
drone
% deve seguir

A = [1 0 1; 1 1 1; 1 0 1];
B = [0 1 0; 1 1 0; 0 1 1];

if T == A
disp ('Giro para Esquerda');
set_param('drone/TL', 'Value', '1');
set_param('drone/TR', 'Value', '0');
elseif T == B
disp('Giro para Direita');
set_param('drone/TL', 'Value', '0');
set_param('drone/TR', 'Value', '1');
else
disp('Matriz no encontrada no banco de dados!')
set_param('drone/TL', 'Value', '0');
set_param('drone/TR', 'Value', '0');
end

pause (2);

end

clear cam;

6.2. Modelo do Simulink

drone.slx

14