O objetivo inicial do projeto é desenvolver uma forma de controlar um Parrot AR Drone 2.0 através de qualquer interface Wifi, utilizaremos a do Raspberry Pi 3. O projeto utiliza as bibliotecas pygame, requests-futures e pyardrone.
O Projeto cria uma instância da classe ARDrone proveniente da biblioteca pyardrone. Esta instanciação só funciona se o ambiente onde o programa está rodando estiver conectado à rede Wifi do drone. A biblioteca já faz a configuração básica de IP, protocolos e portas para a comunicação com o drone.
O Programa principal foi contruído de forma que qualquer erro que passe, pare o funcionamento do Drone, através da estrutura try-except-finally, para evitar transtornos.
A Classe DronePyGame incializa parâmetros básicos do drone e configura seus controles de acordo com o descrito no último tópico deste documento. Esta classe também possuí o método captureInput() que captura os comandos enviados ao pygame pelo teclado, os redireciona ao drone e envia os dados coletados pelo drone ao node-red para visualização.
O Fluxo do programa pode ser observado pelo diagrama a seguir.
- O Raspberry irá se conectar na rede hosteada pelo drone, no nosso caso ardrone2_326331, configurá-lo enviando comandos AT via UDP em sua porta 5556.
- Gráficos irão exibir a leitura dos dados realizados pelos sensores do drone recebidos pela rede via UDP em sua porta 5554.
- O vídeo gravado pela câmera do drone que é recebido pela rede via UDP em sua porta 5555 será exibido em tempo real. (Não acessado neste projeto)
Os gráficos de navdata em tempo real coletados pelo drone são enviados para uma API hospedada no Node-RED exibidos em uma das rotas da API hosteada pelo Raspberry Pi 3.
- Rode o comando
npm install -g node-red
(adicione sudo caso seja linux) - Rode com o comando
node-red
- Tente com o comando do npx abaixo para uma solução mais rápida.
- Para solucionar o problema, procure a instalação do node-red (windows)
- Procure em sua instalação local do npm
- Busque no
%appdata%/npm
- Adicione o caminho ao node-red no PATH
- Rode o comando
npx node-red
Ao iniciar o Node-RED seu log será parecido com o abaixo:
Verifique onde o servidor está rodando e acesse o endereço via browser (no nosso caso é http://127.0.0.1:1880
)
Selecione Manage Palete e instale o node-red-dashboard.
Após a instalação, clique 2 vezes sobre a aba "Flow 1" e o renomeie para evitar confusões posteriores.
Selecione a opção import para utilizar o flow do projeto.
Selecione o arquivo flows
deste projeto em /nodeRed
Ao importar o novo fluxo, apague o anterior (clique 2 vezes sobre a aba e selecione Delete) e faça o deploy (botão vermelho no canto superior direito).
Acesse o recurso no seu endereço em /ui
, no nosso caso http://127.0.0.1:1880/ui
e verifique se o dashboard aparece como na imagem abaixo.
Pré-requisito:
- Possuir os arquivos do projeto
Processo:
- (Opcional) Acesse o venv, disponível para linux no projeto, crie um novo para windows, para acessar o do projeto, rode
source activate
emProjetoDroneRaspberryPi3\app\venv\bin
. - Abra um terminal em
\ProjetoDroneRaspberryPi3\app
- Rode o comando
pip install -r requirements.txt
- Após instalar as dependências, vá para o local
\ProjetoDroneRaspberryPi3\app\src
- Conecte-se com a rede Wifi do drone e verifique se você recebeu o IP 192.168.0.2
- Rode o programa com
python main.py
.
- W - drone se desloca para a frente de onde ele está direcionado
- S - drone se desloca para trás de onde ele está direcionado
- A - drone se desloca lateralmente para a esquerda de onde ele está direcionado
- D - drone se desloca lateralmente para a direita de onde ele está direcionado
- I - drone sobe
- K - drone desce
- Q - drone gira no sentido anti-horário
- E - drone gira no sentido horário
- RETURN (ENTER) - decolagem do drone (Takeoff)
- SPACE - pouso do drone (Land)
- Raphael Marchetti Calciolari - RA: 19.00828-7
- Martin Ropke - RA: 19.01592-5
- Guilherme Costa e Souza - RA: 19.00065-0
- Bruno Vilardi Bueno - RA: 19.00331-5