Drone: Beaglebone

Este é um dos meus projetos pessoais, que tem por finalidade implementar um Drone usando uma BeableboneBlack (BBB) e outras ferramentas de hardware e software opensource.

Playlist dos experimentos com o Beaglebone Drone

Playlist testando 15 modelos de hélices no Beaglebone Drone e medindo o consumo de corrente
(http://dronespersonalizados.blogspot.com.br/2014/12/consumo-de-corrente-em-15-modelos-de.html)



1) Introdução

Porque desenvolver um Drone / UAV / VANT do zero, se já existem vários prontos como o Ardrone?
Pelo fato que entre a teoria e a prática existe um enorme diferença.
Qualquer um pode verificar este fato com o mínimo de pesquisa.
Basta tentar seguir um modelo teórico para iniciar um experimento prático para verificar que faltam tantos detalhes que seria necessário escrever outra teoria.

Porque usar a Beaglebone para desenvolver um Drone / UAV / VANT?
Por ser uma plataforma aberta e 100% customizável.
Outra vantagem é o hardware, a Beaglebone possui 2 coprocessadores de tempo-real (PRU) que executam instruções com tempo fixo de 5 ns por instrução, isto permitir criar funcionalidades que só seriam possíveis com um FPGA.

2) Modelo teórico

Uma IMU é usada para obter a posição, orientação e velocidade (feedbacks).
O joystick é usado para configurar a posição, orientação e altitude (targets).
São usados 4 controladores PID para regular as velocidades.
São usados 3 controladores PID para regular os ângulos.
Um controlador PID para controlar altitude.
Dois controladores PID para controlar a posição.
Os motores são ajustados pelos PIDs (actuators).
Se todos os sensores e PIDs estiverem calibrados corretamente o drone irá voar estável.


Diagrama em blocos do Beaglebone Drone


3) Modelo prático

3.1) Lista de material
  • Uma placa BeagleBoneBlack de preferência revisão C
  • Um placa GY-86: IMU 10DOF via I2C (inclui os sensores MPU6050,HMC5883,MS5611)
  • Um GPS para localização global, no caso usei o Ublox Neo6M
  • Um WiFi USB - para se comunicar com PC/Notebook/Android.
  • Um quadro/frame, no caso usei o Turnigy Talon v1 (feito de fibra de carbono).
  • 4 x ESCs, no caso usei o modelo Hobbywing FlyFun 30A
  • 4 x Motores brushless, no caso usei o mdelo A2212/13T 1000Kv
  • 2 hélices CW e 2 hélices CCW - o usei os tamanhos: 8x4.5 (boa), 9x5 (boa), 10x4.5 (ótimo).
  • Bateria de Lipo - usei uma ZOP Power 2200mah 30C 
  • Um PCB universal, fios, parafusos e solda para fazer as conexões
  • Conectores banana, XT60, T-Deans e outros para fazer conexões elétricas 
  • Um Bluetooth USB - para controlar o drone diretamente com joystick do PS3 sem PC ou notebok até 10 metros.
  • Rádio CC1101 433MHz / 915MHz para telemetria até 400 metros
  • Rádio Xbee 2.4 GHz para telemetria até 2 Km
3.2) Esquemático elétrico / manual de montagem

Ordem das conexões:
0) ligar fonte chaveada (LM2596S) DC-DC no 5V TPS-IN
1) ligar o barramento GND e 5V TPS-OUT dos sensors/gps/bluetooth/xbee/cc1101
2) ligar o GY-86 no i2c-2
3) ligar o HC-06 no J1
4) ligar o GPS na uart4
5) ligar os ESCs na PRU0
6) ligar o divisor de tensão 1K/10K no ADC (para medir no máximo 18V)
7) ligar dongle bluetooth no USB Host, e parear com joystick do Playstation 3 ou
7) ligar dongle wifi no USB Host, e usar aplicativo enviador de controle de Xbox.
8) ligar CC1101 na SPI0
9) ligar XBee na USART1 ou USART5




3.3) Resultado da montagem

Drone pesando 983 gramas no total (incluindo a bateria)
3.4) Software

Página de suporte ao Debian na Beaglebone Black
http://elinux.org/Beagleboard:BeagleBoneBlack_Debian


linux-image-3.8.13-bone70  => ok capemgr
linux-image-3.13.11-bone12 =>
linux-image-3.14.17-bone8
linux-image-3.15.10-bone8
linux-image-3.16.3-bone6
linux-image-3.17.2-bone5
linux-image-3.18.5-bone1
linux-image-3.19.0-bone3  => sem capemgr


# 2014-12-19
* Debian 7.7
* atualizado com kernel 3.8.3 bone 68
* GCC 4.6.3

https://rcn-ee.net/rootfs/bb.org/testing/2014-12-19/lxde/BBB-eMMC-flasher-debian-7.7-lxde-armhf-2014-12-19-2gb.img.xz

# 2014-05-14
* Primeira imagem oficial do Debian 7.5 para Beaglebone

https://rcn-ee.net/deb/testing/2014-05-14/BBB-eMMC-flasher-debian-7.5-2014-05-14-2gb.img.xz
https://rcn-ee.net/deb/testing/2014-05-14/bone-debian-7.5-2014-05-14-2gb.img.xz

Toolchain Linaro - http://www.linaro.org/downloads/
Testado a versão 14.09
http://releases.linaro.org/14.09/components/toolchain/binaries/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09-20140911_win32.exe

O software de controle para Desktop
1) Plot dos sensores
2) Plot 3d da orientação calculada pela IMU
3) Envio do controle de Xbox em formato JSON
4) Recebimento de telemetria JSON

O software de controle para Beaglebone é composto de 8 threads:
1) Os quatros PWM de 400 Hz são gerados na PRU da Beaglebone com steps de 5ns.
2) IMU GY-86 10 DOF com filtro completar ( MPU6050 , HMC5883L, MS5611 )
3) Ethernet e WiFi para telemetria JSON e joystick de Xbox JSON
4) Bluetooth usando dongle USB e joystick de PS3
5) Radio CC1101 433 MHz  com interface TAP
6) GPS Ublox Neo-6M funcionando com o daemon gpsd
7) Monitor de bateria usando ADC
8) Piloto automático usando PIDs, limitador de motor baseado em uso da bateria

Uma parte do código está no meu Github
Aplicativo desktop de para enviar o JSON do joystick e receber o JSON da telemetria

Debug remoto do piloto automático da Beaglebone usando Eclipse CDT  com  GDB via SSH 


Uso da CPU em cada thread do piloto
3.5) Resultados do experimento de consumo de energia

Fontes de corrente:
  • BBB 3V3: 250mA
  • BBB 5V_SYS: 250mA 
  • BBB 5V_VDD: 1000mA (Trilha que passa direto do AC para os pinos das CAPES)
  • Bateria Lipo 3S1P 2200mAh 30C: 12V @ 66A =  792W
  • Fonte de PC: 12V @ 8A = 96W

Consumidores de corrente:
  • Ublox Neo-6M GPS: 67mA @ 3.3V
  • Motor A2212/13T 1000Kv: 12A por motor, 48A @ 12V = 576W (máximo teórico)
  • BBB+sensores+motores parados: 260mA @ 12V = 3W
  • BBB+sensores+motores com hélices 10x4,5 no máximo = 32A @ 12V = 384W

Consumo de corrente por tamanho de hélice em cada motor A2212/13T 1000kv:
  • 5x5e: pico em 2,36A - estável em 2,33A - empuxo fraco
  • 6x3e: pico em 2,65A - estável em 2,55A - empuxo fraco
  • 6x4: pico em 2,96A - estável em 2,80A - empuxo fraco
  • 7x4hy: estável em 4,04A - empuxo fraco
  • 7x4.5e: pico em 5,78A - estável em 5,06A - empuxo fraco
  • 7x5: pico 5.02A - estável em 4,74A - empuxo fraco
  • 8x4 slow: pico em 5,11 - estável em 4,80A - empuxo fraco
  • 8x4 hy: estável em 4,81A - empuxo fraco
  • 8x4.5: pico em 6,15A - estável em 4,90A - empuxo fraco
  • 8x6 gemfan: pico em 5,86A - estável em 5,05A - empuxo fraco
  • 9x3.8sf: pico em 5,66A - estável em 5,07A - empuxo fraco
  • 9x5: pico em 5,75A - estável em 4,60A - empuxo fraco
  • 9x5 gemfan: pico em 6,15A - estável em 5,10A - empuxo fraco
  • 10x4.5: pico em 7,58A - estável em 5,24A - empuxo suficiente para levantar o drone
  • 10x6 gemfan: 8,38A - estável em 7,36A - empuxo fraco