# Ardupilot

ArduPilot é um projeto de código aberto, para utilização de um conjunto de software destinado ao piloto automático em veículos não-tripulados, permitindo controlar remotamente:
* Drones Multirotor
* Asa fixa e aeronaves VTOL.
* Helicópteros
* Carros
* Embarcações
* Submarinos
* Antenas de rastreamento
O ArduPilot foi originalmente desenvolvido por hobistas para controlar modelos de aeronaves e veículos pesados e evoluiu para um piloto automático completo e confiável, utilizado pela indústria, organizações de pesquisas e amadores.

## Software e Hardware
### Conjunto de software

O conjunto de software ArduPilot consiste em software de navegação (normalmente chamado de firmware quando compilado em forma binária para de hardware de porte como os microcontroladores por exemplo) rodando em veículos (Helicóptero, Aeronaves, Carros, Antena de rastreamento e Submarino), juntamente com o software de controle da estação terrestre, incluindo o Mission Planner, APM Planner, QGroundControl, MavProxy, Tower e outros.
O código fonte do ArduPilot se encontra no GitHub, com em média um total de 400 contribuidores.
O conjunto de software é construído automaticamente na versão de testes, através da integração contínua e testes unitários fornecidos pela Travis CI, e um ambiente de construção e compilação incluindo o compilador de plataforma cruzada GNU e Waf. Possui binários pré-compilados rodando em várias plataformas de hardware estão disponíveis para download do usuário nos sub-sites do ArduPilot.

### Hardware Suportados

O software utilizado no Helicóptero, Aeronave, Carro, ou no Submarino é executado em uma ampla variedade de hardware incorporado (incluindo computadores Linux totalmente soprados), normalmente consistindo de um ou mais microcontroladores ou microprocessadores conectados a sensores periféricos usados para navegação. Estes sensores incluem giroscópios MEMS e acelerômetros a um mínimo, necessários para o voo multirotor e estabilização de aviões. Os sensores geralmente incluem, além disso, uma ou mais bússolas, altímetros (barométricos) e GPS, juntamente com sensores adicionais opcionais, tais como sensores de fluxo óptico, indicadores de velocidade, altímetros laser ou sonar ou telêmetros, câmeras monoculares, estereoscópicas ou RGB-D. Os sensores podem estar na mesma placa eletrônica, ou externos.
O software Ground Station, utilizado para programação ou monitoramento da operação de veículos, está disponível para Windows, Linux, MacOS, iOS e Android.
O ArduPilot funciona em uma grande variedade de plataformas de hardware, incluindo as seguintes, listadas em ordem alfabética:
* Intel Aero (Linux ou baseado no STM32)
* APM 2.X (Atmel Mega baseado no Microcontrolador Arduino), desenvolvido por Jordi Munoz em 2010. APM, para ArduPilotMega, funciona somente nas antigas versões do ArduPilot).
* BeagleBone Blue e PXF Mini (BeagleBone Black cape).
* The Cube, formalmente chamado de Pixhawk 2, (ARM Cortex), desenvolvido por ProfiCNC em 2015.
* Edge, controlador de drone com sistema de streaming de vídeo, projetado pela Emlid.
* Erle-Brain, (baseado no Linux) desenvolvido por Erle Robotics.
* Intel Minnowboard (baseado no Linux).
* Navio2 and Navio+ (Raspberry Pi Linux based), designed by Emlid.
* Parrot Bebop, and Parrot C.H.U.C.K., designed by Parrot, S.A.
* Pixhawk, (base do microcontrolador ARM Cortex), originalmente projetado por Lorenz Meier e ETH Zurich, melhorado e lançado em 2013 por PX4, 3DRobotics, e a equipe de desenvolvimento do ArduPilot.
* PixRacer, (baseado no ARM Cortex) desenvolvido por AUAV.
* Qualcomm SnapDragon (Linux).
* Virtual Robotics VRBrain (ARM Cortex).
* Xilinx Processador SoC Zynq (baseado no Linux, utilizando um processador ARM e FPGA).
Além das plataformas de navegação básica acima, o ArduPilot suporta integração e comunicação com o acompanhante no veículo, ou computadores auxiliares para navegação avançada que requerem processamento mais poderoso. Estes incluem computadores NVidia TX1 e TX2 (arquitetura NVidia Jetson, Intel Edison e Intel Joule, HardKernel Odroid, e Raspberry PI.

## Recursos
### Comum a todos os veículos

O ArduPilot oferece um grande conjunto de características, incluindo as seguintes comuns a todos os veículos:
* Modo de voo totalmente autônomo, semi-autônomo e totalmente manual, tarefas programáveis com mapeamento geográfico em 3D, opcional.
* Opções de estabilização para negar a necessidade de um co-piloto de terceiros.
* Simulação com uma variedade de simuladores, incluindo ArduPilot SITL.
* Grande número de sensores de navegação suportados, incluindo vários modelos de GPS RTK, GPS tradicionais L1, barômetros, magnetômetros, telêmetros a laser e sonar, fluxo óptico, transponder ADS-B, infravermelho, velocidade do ar, sensores e dispositivos de captura de visão/moção por computador.
* Sensor de comunicação via SPI, I²C, CAN Bus, Comunicação Serial, SMBus.
* Inspeções de falhas por perda de contato de rádio, GPS e violação de um limite pré-definido, nível mínimo de energia da bateria.
* Suporte para navegação em ambientes que não possuem GPS, com posicionamento baseado em visão, fluxo óptico, SLAM, posicionamento Ultra Wide Band.
* Suporte para atuadores tais como paraquedas e garras magnéticas.
* Suporte para motores brushless e brushed.
* Suporte a fotografia e gravação de vídeo com integração de gimbal.
* Integração e comunicação com computadores secundários poderosos, ou " companheiros".
* Rica documentação através do ArduPilot wiki.
* Assistência e discussão através do fórum ArduPilot Discourse, canais de bate-papo Gitter, Slack, Discord e Facebook.

### Específico para Helicóptero

* Modos de voo: Estabilizar, alternar, manter, soltar, RTL (retorno ao lançamento), automático, aceleração, sintonia automática, freio, círculo, derivação, guiado, (e guiado_NoGPS), aterrissar, sustentação, esporte, arremessar, seguir-me, simples, super simples, evitar_ADSB.
* Sintonia automática
* Grande variedade de tipos de estruturas suportadas, incluindo tricópteros, quadricópteros, hexacópteros, octocopiadoras planas e co-axiais, e configurações personalizadas de motores
* Suporte para helicópteros elétricos e a gás tradicionais, helicópteros mono, helicópteros trandem.

### Específico para Aeronaves

* Fly By Wire modes, loiter, auto, modos acrobáticos.
* Opções de decolagem: Lançamento manual, bungee, catapulta, transição vertical (para aeronaves VTOL).
* Opções de pouso: Inclinação ajustável de deslizamento, helicoidal, impulso inverso, rede, transição vertical (para aeronaves VTOL).
* Calibração automática, simulações com simuladores JSBSIM, X-Plane e RealFlight.
* Suporte para uma grande variedade de arquiteturas VTOL: Quadplanos, asas de inclinação, rotores de inclinação, assentos de cauda, ornithopters.
* Otimização de aeronaves de 3 ou 4 canais.

### Específico para Carros

* Manual, Aprendizagem, Automático, Direção, Retenção e modos operacionais guiados.
* Suporte para arquiteturas de rodas e esteiras.

### Específico para Submarino

* Elevação de profundidade: Usando sensores de profundidade baseados em pressão, os submarinos podem manter a profundidade dentro de poucos centímetros.
* Controle de luz: Controle da iluminação submarina através do controlador.
O ArduPilot está totalmente documentado dentro de seu wiki, totalizando o equivalente a cerca de 700 páginas impressas e dividido em seis seções superiores: As subseções relacionadas a aviões, helicópteros, carros e submarinos são direcionadas aos usuários. Uma subseção de desenvolvedores para usos avançados é destinada principalmente a engenheiros de software e hardware, e uma seção comum que reagrupa informações comuns a todos os tipos de veículos é compartilhada dentro das primeiras quatro seções.

## Casos de uso do ArduPilot
### Hobistas e amadores

* Corrida de drones.
* Construção e operação de modelos de controle de rádio para entretenimento.

### Profissional

* Aéreo fotogrametria
* Fotografia aérea e produção de filmes.
* Sensor remoto
* Buscas e resgates
* Aplicações para Robótica
* Pesquisas acadêmicas
* Entrega de pacotes

## História
### Primeiros anos, 2007-2012

O projeto ArduPilot surgiu no final de 2007 quando Jordi Munoz, que depois se tornou co-fundador 3DRobotics juntamente com Chris Anderson, escreveu um programa para o Arduino (no qual chamou de "ArduCopter") para estabilizar um RC Helicopter. Em 2009 Munoz e Anderson lançou o Ardupilot 1.0 (software controlador de voo) junto com uma placa de hardware em que poderia funcionar. Nesse mesmo ano, a Munoz, que tinha construído um helicóptero RC tradicional UAV capaz de voar autonomamente, venceu a primeira competição da Sparkfun AVC. O projeto cresceu ainda mais graças a muitos membros da comunidade de DIY Drones, incluindo Chris Anderson que defendeu o projeto e tinha fundado a comunidade baseada no fórum no início de 2007.
A primeira versão do ArduPilot suportava apenas aeronaves de asa fixa e era baseada em um sensor thermopile, que depende da determinada localização do horizonte em relação à aeronave, medindo a diferença de temperatura entre o céu e o solo. Mais tarde, o sistema foi melhorado para substituir as termopiles por um Inertial Measurement Unit (IMU) usando a combinação de acelerômetros, giroscópios e magnetômetros. O suporte de veículos foi posteriormente expandido para outros tipos de veículos que levaram aos subprojetos como Helicopteros, Aviões, Carros pesados e Submarinos.
Os anos de 2011 e 2012 testemunharam um crescimento explosivo da funcionalidade do piloto automático e do tamanho da base de código, graças em grande parte à nova participação de Andrew "Tridge" Tridgell e Pat Hickey autor do HAL (Hardware Abstraction Layer). As contribuições do Tridge incluíram testes automáticos e capacidades de simulação para Ardupilot, juntamente com PyMavlink e Mavproxy. Hickey foi fundamental para trazer a biblioteca AP_ HAL para a base de códigos: HAL (Hardware Abstraction Layer) simplificou e modularizou muito a base de código, introduzindo e confinando implementações específicas de hardware de baixo nível a uma biblioteca de hardware separada. O ano 2012 também viu Randy Mackay assumir o papel de principal mantenedor da Copter, após um pedido do antigo mantenedor Jason Short, e Tridge assumir o papel de principal mantenedor do Avião, após Doug Weibel, que passou a ganhar um Ph.D. em Engenharia Aeroespacial. Tanto Randy como Tridge são os atuais responsáveis pela manutenção da direção até o momento.
O software-livre A abordagem ao desenvolvimento do código ArduPilot é similar à do Linux. O sistema operacional e o Projeto GNU, e o PX4/Pixhawk e Paparazzi Project, onde o baixo custo e a disponibilidade permitiram aos hobbistas construir pequenos aeronaves pilotadas remotamente, como micro air vehicles e miniature UAVs. A indústria de drones, da mesma forma, alavancou progressivamente o código ArduPilot para construir veículos profissionais autônomos de alto nível.

### Maturidade, 2013-2016

Enquanto as primeiras versões do ArduPilot usavam o controlador de voo APM, uma CPU AVR rodando o Arduino, uma linguagem de programação de código aberto (que explica a parte "Ardu" do nome do projeto), anos posteriores testemunharam uma reescrita significativa da base de código em C++ com muitos utilitários de apoio escritos em Python.
Entre 2013 e 2014 o ArduPilot evoluiu para rodar em uma gama de plataformas de hardware e sistema operacional além do Arduino original. Atmel baseado na arquitetura do microcontrolador, primeiro com a introdução comercial do controlador de voo de hardware Pixhawk, um esforço colaborativo entre PX4, 3DRobotics e a equipe de desenvolvimento do ArduPilot, e depois para o Bebop2 da Parrot e os controladores de voo baseados em Linux como o NAVIO2 da Raspberry Pi e o ErleBrain da BeagleBone. Um evento chave dentro deste período de tempo incluiu o primeiro voo de um avião sob Linux em meados de 2014.
O final de 2014 surgiu a formação do DroneCode, formado para reunir os principais projetos de software UAV de código aberto, e principalmente para solidificar o relacionamento e a colaboração do ArduPilot e dos projetos PX4. O envolvimento do ArduPilot com o DroneCode terminou em setembro de 2016. Em 2015 também foi um ano marcante para a 3DRobotics, um forte patrocinador do desenvolvimento do ArduPilot, que introduziu o quadcopter Solo, um quadcopter que funcionava com o ArduPilot. No entanto, o sucesso comercial do Solo acabou não sendo alcançado.
No outono de 2015 viu-se novamente em um evento decisivo na história do piloto automático, com um enxame de 50 aviões operando simultaneamente o ArduPilot no Laboratório Avançado de Engenharia de Sistemas Robóticos (ARSENL) da equipe do Naval Postgraduate School.
Dentro deste período de tempo, a base de código do ArduPilot foi significativamente refactorado, ao ponto de deixar de suportar qualquer semelhança com seus primeiros anos Arduino.

### Desde 2018 até os dias atuais

A evolução do código ArduPilot continua com suporte para integração e comunicação com computadores de companhia poderosas para navegação autônoma, suporte plano para arquiteturas VTOL adicionais, integração com ROS, support for gliders, and tighter integration for submarinos. O projeto evolui sob o ámbito do ArduPilot.org, um projeto dentro da organização sem fins lucrativos Software in the Public Interest (spi-inc.org). A ArduPilot é patrocinada em parte por uma crescente lista de parceiros corporativos.

### UAV Outback Challenge

Em 2012, a equipe de UAV de Camberra ocupou com sucesso o primeiro lugar no prestigioso UAV Outback Challenge. A equipe CanberraUAV incluiu a ArduPlane Developers e o avião pilotado foi controlado por um piloto automático APM 2. Em 2014, a equipe CanberraUAV e o ArduPilot ocuparam novamente o primeiro lugar, entregando com sucesso uma garrafa ao excursionista "perdido". Em 2016, o ArduPilot ficou em primeiro lugar na competição tecnicamente mais desafiadora, à frente da forte competição das equipes internacionais.

## Comunidade

O ArduPilot é gerenciado conjuntamente por um grupo de voluntários localizados ao redor do mundo, utilizando a Internet (discourse através de forum, canal no gitter) a fim de se comunicar, planejar, oferecer suporte ao desenvolvimento do projeto. A equipe de desenvolvimento se reúne semanalmente em uma reunião de bate-papo, aberta a todos, usando Mumble. Além disso, centenas de usuários contribuem com ideias, códigos e documentação para o projeto. O ArduPilot é licenciado sob a GPL versão 3 sendo gratuito para baixar e utilizar.

## Personalização

A flexibilidade do ArduPilot o torna muito popular no campo do trabalho manual (faça-você-mesmo), mas também ganhou popularidade junto a usuários profissionais e empresas. A 3DRobotics' Solo quadcopter, por exemplo, utiliza o ArduPilot, assim como um grande número de empresas aeroespaciais profissionais, como a Boeing. A flexibilidade permite o suporte de uma grande variedade de tipos e tamanhos de quadros, sensores diferentes, transmissores RC e gimbals de câmera, dependendo das preferências do operador.
O ArduPilot foi integrado com sucesso em muitos aviões, como o Bixler 2.0. A personalização e a facilidade de instalação permitiram que a plataforma ArduPilot fosse integrada para uma variedade de missões. A estação de controle terrestre do Mission Planner (Windows) permite ao usuário configurar, programar, usar ou simular facilmente uma placa ArduPilot para fins como mapeamento, busca e resgate, e áreas de levantamento.