# ArduPilot

ArduPilot es un paquete de programas de autopiloto de código abierto para vehículos no tripulados, capaz de controlar de forma autónoma:
* Drones multirrotor
* Aeronaves de ala fija y VTOL
* Helicópteros
* Vehículos terrestres
* Barcos
* Submarinos
* Rastreadores de antenas
ArduPilot fue originalmente desarrollado por aficionados con el fin de controlar aeronaves y vehículos, el cual se ha convertido en un autopiloto totalmente funcional y estable usado por la industria, organizaciones de investigación y aficionados.

## Software y Hardware
### Paquete de software

El paquete de software ArduPilot consiste en un software de navegación (normalmente denominado firmware cuando se compila en forma binaria para el microcontrolador) que se ejecuta en el vehículo (ya sea helicóptero, avión, vehículo, rastreador de antenas o submarino), junto con el software de control de la estación de tierra que incluye Mission Planner, APM Planner, QGroundControl, MavProxy, Tower entre otros.
El código fuente de ArduPilot se almacena y gestiona en GitHub, con casi un total de 400 contribuyentes.
El conjunto de software se compila automáticamente cada noche, con integración continua y pruebas unitarias proporcionadas por Travis CI, y un entorno de compilación que incluye el compilador GNU multiplataforma y Waf. Los binarios precompilados que se ejecutan en varias plataformas de hardware están disponibles para su descarga por parte del usuario en los sub-sitios web de ArduPilot.

### Hardware respaldado

El software para los helicópteros, aviones, vehículos, rastreadores de antenas o submarinos se ejecuta en una amplia variedad de hardware embebido (incluyendo ordenadores Linux completos), que suele consistir en uno o más microcontroladores o microprocesadores conectados a sensores periféricos utilizados para la navegación. Estos sensores incluyen giroscopios y acelerómetros MEMS como mínimo, necesarios para el vuelo de los multirrotores y la estabilización del avión. Los sensores suelen incluir, además, una o más brújulas, altímetros (barométricos) y GPS, junto con sensores adicionales opcionales como sensores de flujo óptico, indicadores de velocidad del aire, altímetros o telémetros láser o sonar, cámaras monoculares, estereoscópicas o RGB-D. Los sensores pueden estar en la misma placa electrónica o ser externos.
El software Ground Station, utilizado para programar o supervisar el funcionamiento del vehículo, está disponible para Windows, Linux, macOS, iOS y Android.
ArduPilot se ejecuta en una amplia variedad de plataformas de hardware, incluyendo las siguientes, enumeradas en orden alfabético:
* APM 2.X (microcontroladot base Arduino Atmel Mega Microcontroller), diseñado por Jordi Munoz en 2010. APM viene de ArduPilotMega, solo puede ejecutarse con versiones antiguas de ArduPilot.
* BeagleBone Azul y PXF Mini (variante BeagleBone Black).
* Edge Archivado el 3 de abril de 2019 en Wayback Machine., controlador de drone con sistema de transmisión de vídeo, diseñado por Emlid.
* Erle-Brain, (base Linux) diseñado por Erle Robotics.
* Intel Aero (Linux o base STM32)
* Intel Minnowboard (base Linux).
* Navio2 (enlace roto disponible en Internet Archive; véase el historial, la primera versión y la última). y Navio+ (basado en Linux de Raspberry Pi), diseñado por Emlid.
* Parrot Bebop, y Parrot C.H.U.C.K., diseñado por Parrot, S.A.
* Pixhawk, (microcontrolador base ARM Cortex), originalmente diseñado por Lorenz Meier y ETH Zurich, imejorado y lanzado en 2013 por PX4, 3DRobotics, y el equipo de desarrollo de ArduPilot.
* PixRacer, (microcontrolador base ARM Cortex) diseñado por AUAV.
* Qualcomm SnapDragon (base Linux).
* SoC Zynq de Xilinx (base Linux, ARM y módulo FPGA).
* The Cube, formalmente llamado Pixhawk 2, (microcontrolador base ARM Cortex), diseñado por ProfiCNC en 2015.
* Virtual Robotics VRBrain (microcontrolador base ARM Cortex).
Además de las plataformas de navegación básicas mencionadas anteriormente, ArduPilot también admite la integración y la comunicación con ordenadores de acompañamiento o auxiliares para la navegación avanzada que requiere un procesamiento más potente. Estos incluyen NVidia TX1 y TX2 (arquitectura NVidia Jetson), Intel Edison e Intel Joule, HardKernel Odroid y ordenadores Raspberry PI.

## Características
### Común a todos los vehículos

ArduPilot ofrece un amplio conjunto de funciones, entre las que se encuentran las siguientes, comunes a todos los vehículos:
* Modos de vuelo totalmente autónomo, semiautónomo y totalmente manual, misiones programables con puntos objetivo en 3D, posibilidad de añadir geovallas.
* Opciones de estabilización para evitar la necesidad de un copiloto externo.
* Simulación con diversos simuladores, incluido ArduPilot SITL.
* Gran número de sensores de navegación compatibles, incluidos varios modelos de GPS RTK, GPS L1 tradicionales, barómetros, magnetómetros, telémetros láser y sonar, flujo óptico, transpondedor ADS-B, infrarrojos, velocidad del aire, sensores y dispositivos de visión por ordenador/captura de movimiento.
* Comunicación con sensores mediante SPI, I²C, bus CAN, Serial communication, SMBus.
* Detección y gestión de fallos como pérdida de contacto por radio, GPS y superación de un límite predefinido, nivel mínimo de energía de la batería.
* Soporte para la navegación en entornos sin GPS, con posicionamiento basado en la visión, flujo óptico, SLAM, posicionamiento de banda ultra ancha.
* Soporte para actuadores como paracaídas y pinzas magnéticas.
* Soporte para motores sin escobillas y con escobillas.
* Soporte e integración de gimbal fotográfico y de vídeo.
* Integración y comunicación con potentes ordenadores secundarios o coprocesadores.
* Amplia documentación a través de la wiki de ArduPilot.
* Soporte y discusión a través del foro de discusión de ArduPilot, canales de chat Gitter, GitHub, Facebook.

### Específico de helicópteros

* Modos de vuelo: estabilizado, retención de altitud, loiter, RTL (Return-to-Launch), auto, acro, auto ajuste, frenado, círculo, deriva, guiado, (y guiado sin GPS), aterrizaje, retención de posición, deporte, lanzar, seguimiento, simple, super simple, evitar ADS-B.
* Auto ajuste de parámetros.
* Amplia variedad de tipos de chasis, incluidos tricópteros, cuadricópteros, hexacópteros, octocópteros planos y coaxiales, y configuraciones de motor personalizadas.
* Soporte para helicópteros eléctricos y de combustión tradicionales, monocópteros y helicópteros en tándem.

### Específico de aviones

* Modos "Fly By Wire", loiter, auto y acrobático.
* Opciones de despegue: Despegue manual, cuerda elástica (bungee), catapulta, transición vertical (para aviones VTOL).
* Opciones de aterrizaje: Pendiente de planeo ajustable, helicoidal, empuje inverso, red, transición vertical (para aviones VTOL).
* Ajuste automático, simulación con los simuladores JSBSIM, X-Plane y RealFlight.
* Soporte para una gran variedad de arquitecturas VTOL: Aviones cuadricópteros, alas basculantes, rotores basculantes, asientos de cola, ornitópteros.
* Optimización de aviones de 3 o 4 canales.

### Específico para vehículos terrestres

* Modos de funcionamiento manual, aprendizaje, auto, dirección, retención y guiado.
* Apoyo a las arquitecturas de ruedas y orugas.

### Específico para submarinos

* Mantenimiento de la profundidad: Gracias a los sensores de profundidad basados en la presión, los submarinos pueden mantener la profundidad en unos pocos centímetros.
* Control de la luz: Control de la iluminación submarina a través del controlador.
ArduPilot está completamente documentado dentro de su wiki, con un total equivalente a unas 700 páginas y dividido en seis secciones principales: Las subsecciones relacionadas con los helicópteros, aviones, vehículos terrestres y submarinos están dirigidas a los usuarios. Una subsección de desarrolladores para usos avanzados está dirigida principalmente a los ingenieros de software y hardware, y una sección común que reagrupa la información común a todos los tipos de vehículos y que se comparte dentro de las cuatro primeras secciones.

## Casos de uso de ArduPilot
### Aficionados

* Carreras de drones.
* Construcción y manejo de modelos de radiocontrol para el ocio.

### Profesional

* Fotogrametría aérea.
* Fotogrametría aérea y grabación de películas.
* Teledetección.
* Búsqueda y rescate.
* Aplicaciones en robótica.
* Investigación.
* Logística.

## Historia
### Primeros años, 2007-2012

Los primeros inicios del proyecto ArduPilot comienzan a finales de 2007 cuando Jordi Munoz, quien posteriormente cofundó 3DRobotics con Chris Anderson, implementó un programa Arduino (al cual llamó "ArduCopter") para estabilizar un helicóptero radiocontrol. En 2009, Munoz y Anderson lanzaron Ardupilot 1.0 (el software de la controladora de vuelo) que junto con una placa hardware este podía ejecutarse. Ese mismo año Munoz, quien había construido un helicóptero radiocontrol tradicional capaz de volar de forma autónoma, ganó la primera competición Sparkfun AVC. El proyecto creció aun más gracias a muchos miembros de la comunidad de drones DIY, incluyendo a Chris Anderson quien defendió el proyecto y fundó la comunidad basada en el foro a principios de 2007.
La primera versión de ArduPilot únicamente soportaba aeronaves de ala fija y se basaba en un sensor termopila que determinaba la localización del horizonte relativo al aeronave midiendo la diferencia de temperatura entre el cielo y la tierra. Posteriormente, el sistema fue mejorado reemplazando las termopilas con un unidad de medición inercial (IMU) usando una combinación de acelerómetros, giróscopos y magnetómetros. El soporte a diferentes vehículos se añadió posteriormente lo que llevó a subproyectos para los helicópteros en general, aviones, vehículos terrestres y submarinos.
Entre los años 2011 y 2012 hubo un gran crecimiento en las funcionalidades de ArduPilot y el tamaño del código base, gracias en gran medida a nuevos contribuidores como Andrew "Tridge" Tridgell y el autor de HAL, Pat Hickey. Lao contribuciones de Tridge incluyen la comprobación automática y la posibilidad de simulación para Ardupilot, junto con PyMavlink and Mavproxy. Hickey fue quien trajo la biblioteca AP_ HAL al código base: HAL (Hardware Abstraction Layer) simplificó en gran medida y modularizó el código base introduciendo y confinando aspectos específicos de bajo nivel para la implementación en hardware en una biblioteca hardware separada. En el año 2012, Randy Mackay tomó el papel de líder en el mantenimiento de la parte de cópteros, después de una petición por parte de Jason Short, y Tridge tomó el papel de líder en el mantenimiento de la parte de aviación, después de que Doug Weibel relevara el cargo, quien fue a obtener un doctorado en ingeniería aeroespacial. Tanto Randy como Tridgeson los actuales líderes en el mantenimiento.
ArduPilot como software libre es similar a la forma de trabajar del sistema operativo Linux y al proyecto GNU, y al PX4/Pixhawk y proyecto paparazzi, donde el bajo coste y la disponibilidad permitió a los aficionados construir pequeñas y autónomas aeronaves pilotadas remotamente, como los micro drones y pequeños UAVs. La industria de los drones, de forma similar, progresivamente han tomado prestado el código de ArduPilot para construir vehículos autónomos profesionales de gama alta.

### Madurez, 2013-2016

Si bien las primeras versiones de ArduPilot usaban el controlador de vuelo APM, una CPU AVR que ejecutaba el lenguaje de programación de código abierto Arduino (que explica la parte "Ardu" del nombre del proyecto), años posteriores fueron testigos de una importante reescritura del código base en C++. con muchas utilidades de apoyo escritas en Python.
Entre 2013 y 2014 ArduPilot evolucionó para ejecutarse en una serie de plataformas hardware y sistema operativo más allá de la arquitectura original de microcontroladores basada en Arduino Atmel, primero con la introducción comercial del controlador de vuelo de hardware Pixhawk, un esfuerzo de colaboración entre PX4, 3DRobotics y el equipo de desarrollo de ArduPilot, y más tarde con el Bebop2 de Parrot y los controladores de vuelo basados en Linux como NAVIO2 basado en Raspberry Pi y ErleBrain basado en BeagleBone. Un acontecimiento clave en este periodo fue el primer vuelo de un avión con Linux a mediados de 2014.
A finales de 2014 comenzó la formación de DroneCode, la cual se formó para reunir los principales proyectos de software de código abierto para vehículos aéreos no tripulados, y sobre todo para solidificar la relación y la colaboración de los proyectos ArduPilot y PX4. La participación de ArduPilot en DroneCode finalizó en septiembre de 2016. 2015 también fue un año destacado para 3DRobotics, uno de los principales patrocinadores del desarrollo de ArduPilot, con la presentación del cuadricóptero Solo, un cuadricóptero estándar con ArduPilot. Sin embargo, Solo no tuvo éxito comercial.
El otoño de 2015 volvió a ser un acontecimiento clave en la historia de ArduPilot, con un enjambre de 50 aviones que ejecutaban ArduPilot de forma simultánea en el equipo del Laboratorio de Ingeniería de Sistemas Robóticos Avanzados (ARSENL) de la Escuela Naval de Postgrado.
En este período de tiempo, la base de código de ArduPilot fue significativamente refactorizada, hasta el punto de que dejó de tener cualquier similitud con sus primeros años de Arduino.

### Actualmente, 2018-

La evolución del código de ArduPilot continúa con el soporte para la integración y comunicación con potentes ordenadores como coprocesadores para la navegación autónoma, el soporte de aviones para arquitecturas VTOL adicionales, la integración con ROS, el soporte para planeadores y una mayor integración para submarinos. El proyecto evoluciona bajo el paraguas de ArduPilot.org, un proyecto dentro de la organización sin ánimo de lucro Software in the Public Interest (spi-inc.org). ArduPilot está patrocinado en parte por una lista creciente de socios corporativos.

### Competición UAV Outback

En 2012, el equipo Canberra UAV consiguió el primer puesto en la prestigiosa competición UAV Outback. El equipo CanberraUAV incluía a los desarrolladores de ArduPlane y el avión estaba controlado por un piloto automático APM 2. En 2014, el equipo CanberraUAV y ArduPilot volvieron a obtener el primer puesto, al entregar con éxito una botella al excursionista "perdido". En 2016, ArduPilot quedó primero en la competición técnicamente más exigente, por delante de una fuerte competencia de equipos internacionales.

## Comunidad

ArduPilot está gestionado conjuntamente por un grupo de voluntarios situados en todo el mundo, que utilizan Internet (foro tipo Discourse, canal de Gitter) para comunicarse, planificar, desarrollar y dar soporte. El equipo de desarrollo se reúne semanalmente en un chat, abierto a todos, utilizando Mumble. Además, cientos de usuarios aportan ideas, código y documentación al proyecto. ArduPilot está licenciado bajo la GPL versión 3 y es de libre descarga y uso.

## Personalización

La flexibilidad de ArduPilot lo hace muy popular en el ámbito del DIY, pero también ha ganado popularidad entre los usuarios profesionales y las empresas. El cuadricóptero Solo de 3DRobotics, por ejemplo, utiliza ArduPilot, al igual que un gran número de empresas aeroespaciales profesionales como Boeing. La flexibilidad permite admitir una gran variedad de tipos y tamaños de chasis, diferentes sensores, cardanes de cámara y transmisores RC en función de las preferencias del operador.
ArduPilot se ha integrado con éxito en muchos aviones, como el Bixler 2.0. La personalización y la facilidad de instalación han permitido integrar la plataforma ArduPilot para una gran variedad de misiones. La estación de control en tierra Mission Planner permite al usuario configurar, programar, utilizar o simular fácilmente una placa ArduPilot para fines como la cartografía, la búsqueda y el rescate, y la inspección de zonas.