Maverick, es un Sistema Operativo creado bajo la arquitectura del kernel Linux sobre el cual se automatizaron y se instalaron muchas librerias/modulos para el control de vehículos autónomos o Dron/UAVs.

El nombre Maverick surge del complemento de utilizar Hardware de tipo SoC, el protocolo Mavlink y controladores de vuelo, mas específicamente para Ardupilot.

Esperamos que bajo el próximo lanzamiento del SO (ver 2.0) sea extendido el soporte a la arquitectura de PX4 como indican sus desarrolladores.  

Por qué Maverick?

Los UAV/Drones, como vehículos de vuelo que comparten y ocupan un espacio aéreo son autónomos en diversos grados, se están volviendo más regulados y autorizados a nivel mundial, como tal, requieren una ingeniería mejor y más exhaustiva. Los Companion Computers a menudo se utilizan junto con controladores de vuelo dedicados para influir parcial o totalmente en las características del vuelo, y deben estar sujetas a los mismos rigores de ingeniería y desarrollo que cualquier sistema complejo en un entorno crítico.

Maverick lleva a Automatizar, Configurar y  Mantener el problema de construir Companion Computers, aprovechando décadas de experiencia en ingeniería para brindar mayor confiabilidad y reducir los riesgos de esta importante tecnología. La gestión de la configuración es un proceso de ingeniería comprobado y es omnipresente en la ingeniería aeroespacial y militar.

Los Companion Computers también adolecen de una falta de desarrollo colaborativo, a diferencia del desarrollo de controladores de vuelo. El Software para Computadoras Companion usualmente se distribuye en forma de imágenes de SO del vendedor modificadas o Scripts. Estos son simples de descargar e instalar, pero son difíciles o torpes para crear y colaborar en el desarrollo, y no son actualizables. Si se desarrollan nuevas características, se debe publicar una nueva imagen y los usuarios finales deben descargar toda la nueva imagen y volver a instalarla desde cero. Cada tipo de hardware o sistema operativo generalmente requiere un nuevo esfuerzo para producir lógica e imágenes para esa plataforma.

En lugar de crear, distribuir y mantener una lógica separada y grandes repositorios completos de paquetes y sistemas para cada tipo de computadora y SO, Maverick permite el desarrollo ágil y colaborativo de Companion Computers a través de una codificación más familiar y flujo de trabajo en github, es independiente del hardware y el sistema operativo. El mismo entorno se crea en cualquier computadora compatible, en cualquier sistema operativo compatible, por lo que la plataforma subyacente se vuelve en gran medida irrelevante.

Maverick proporciona imágenes del sistema operativo fáciles de instalar por conveniencia, pero puede instalarse por completo a partir de unos pocos Kbytes de código github. Cuando se desarrollan nuevas funciones usando Maverick, las instalaciones existentes se pueden actualizar de forma rápida y segura con un solo comando sin interrupción de los datos o servicios en ejecución.

Se espera que al automatizar y reducir la compleja instalación y configuración de sistemas a una simple instalación, ayudará a reducir las barreras de entrada para futuros desarrolladores de UAV, que pueden comenzar rápidamente con una pila de desarrollo completa a su disposición.

Caracteristicas:


Maverick, tiene implementadas ya algunas configuraciones y pretende agregar muchas mas a su lista.

  • Configura el hardware y los periféricos de la computadora
  • Configura las interfaces de red, direcciones, servicios, configuración inalámbrica
  • Mejora la seguridad, configura firewall, antivirus, detección de intrusos, defensas reactivas de fuerza bruta
  • Configura el proxy del controlador de vuelo (MAVProxy, mavlink-router, cmavnode), Dronekit y el entorno MAVROS
  • Compila / instala el software Gstreamer y OpenCV, el software marcador fiducial Aruco, el daemon de visión inteligente FPV, ROS, Cloud9 IDE
  • El entorno Dev instala y configura el navegador IDE (Cloud9), Ardupilot SITL, proxy, entorno dronekit
Arquitectura Maverick

A pesar de que Maverick permite una gran cantidad de funcionalidades desde el primer momento, el objetivo principal del proyecto es proporcionar un marco para la configuración automatizada del sistema, en lugar de las características mismas. La funcionalidad real de la plataforma recién está comenzando, y está en una etapa muy temprana.

Como trabaja Maverick?

En el corazón de Maverick se encuentra el probado sistema de gestión de configuración Puppet. Puppet es un sistema que abstrae la configuración de un sistema en código declarativo, y se usa ampliamente en entornos informáticos complejos para automatizar la configuración de la computadora de una manera segura y repetible que reduce el riesgo y aumenta la confiabilidad. Maverick se puede usar para crear e instalar sistemas complementarios, pero también se puede usar para actualizar un sistema existente. Maverick se puede volver a ejecutar cualquier cantidad de veces y solo hará cambios cuando sea necesario para llevar el sistema al estado configurado.

Los archivos de código declarativo se llaman manifiestos y se organizan en módulos. Forman efectivamente bloques de construcción que se pueden juntar para crear planos del sistema. Cada módulo y manifiesto puede tener parámetros aplicados a través de archivos de configuración que se adaptan a la forma en que se aplica el código declarativo. Esto constituye un método muy flexible y eficiente para describir y construir sistemas. Los 'planos' ensamblados se pueden guardar simplemente como un único archivo de configuración y volver a aplicarlo varias veces para producir clones perfectos.

Soporte al Hardware

Maverick está diseñado para ser multiplataforma y agnóstico de hardware. Inicialmente se está desarrollando y probando en las siguientes plataformas:

  • Raspberry Pi (3, 2 Modelo B, A +, Raspbian y Ubuntu)
  • ODROID (XU3 / XU4, Ubuntu)
  • Intel Joule
  • Beaglebone Black (Debian y Ubuntu)
  • Nvidia TX1 / TX2
  • Intel Edison
  • Up Board / Squared

Maverick detectará la plataforma de hardware base y los periféricos conectados y aplicará el software y la configuración predeterminada según sea necesario. Más configuraciones base y periférica está disponible especificando los parámetros de configuración e incluyendo nuevos módulos.

Soporte a Sistemas Operativos

Al igual que el soporte de hardware, Maverick está diseñado para ser independiente del software. Actualmente, la mayor parte del soporte está basado en Debian / Ubuntu, pero el sistema de gestión de configuración (Puppet) subyacente que hace la mayor parte del trabajo pesado es completamente multiplataforma y tiene proveedores para casi todos los sistemas operativos. Actualmente es compatible con:

  • Raspbian (sistema operativo Debian oficial de Raspberry Pi)
  • Odroid Ubuntu (SO oficial ubuntu para Odroid XU3 / 4) + kernel experimental 4.9
  • Beaglebone Black Ubuntu
  • Ubuntu para Joule
  • Ubuntu para Raspberry

Entornos o Ambientes...

Maverick permite configurar el sistema con varios entornos o ambientes ya predefinidos por el actual desarrollador.

Bootstrap: el entorno inicial que configura el hardware central y el sistema operativo, incluida la ampliación del sistema de archivos para llenar el espacio disponible que a menudo es necesario para completar la configuración de otros entornos.

Flight: es el entorno más seguro y rápido para implementar. Tiene menos software de desarrollo / innecesario instalado y en ejecución que podría interferir con los servicios críticos de vuelo.

Dev: agrega software y servicios útiles para el desarrollo, incluyendo un virtualenv python / dronekit separado, IDE basado en navegador (Cloud9) con acceso de edición a todos los códigos y software Maverick, compilación Ardupilot SITL completa, proxy separado de mavlink y instancias ROS.

Soporte a Módulos por entorno.

Los Modulos de Maverick.

Maverick está diseñado para ser lo más modular posible,  consta de módulos, parámetros y recursos que se pueden interconectar como bloques de construcción para crear planos. Cada entorno (bootstrap, flight, development) está compuesto por una combinación diferente de módulos, recursos y parámetros. Todos los parámetros se pueden configurar en cualquiera de las configuraciones de Maverick (localconf.json, nodos locales, nodos de muestra, etc.) e influyen en cómo se configura el sistema. Cada módulo a continuación está vinculado a documentos que explican el módulo, cómo funcionan los componentes y los parámetros que se pueden establecer.

  • Base
  • Analysis
  • Cloud9
  • Desktop
  • Development
  • Flight Controller
  • Hardware
  • Intelligence
  • Mavlink
  • Network
  • ROS
  • Security
  • Vision
  • Web

Modulo Base

El módulo base contiene recursos que configuran el propio sistema de compilación y la configuración del sistema operativo principal. Siempre se ejecuta en todos los entornos. Además de realizar una configuración básica en el sistema, también configura la estructura de Maverick y define etapas (ordenamiento) en las que se aplican ciertos recursos. Esto es particularmente importante en el arranque inicial de Maverick,  la mayoría de estas configuraciones están preestablecidas en Maverick y no se pueden / no se deben cambiar.

  • Configura el núcleo del entorno Maverick
  • Configua el entorno central de Puppet
  • Configuración regional del sistema (zona horaria, idioma)
  • Software / paquetes del sistema central
  • Servicios del sistema central
  • Configuración de la consola (banners, prompts)

Modulo Analysis

El módulo de análisis presenta una serie de herramientas para ayudar a visualizar y analizar datos.

  • InfluxDB: base de datos de series temporales de resolución de nanosegundos para almacenar todos los datos de sistema y vuelo
  • Collectd: Daemon de recolección de métricas del sistema eficiente y extenso
  • Grafana: rico sistema automatizado de tablero de gráficos
  • Mavlogd: proceso personalizado para traducir los registros de DataFlash a la base de datos de tiempo InfluxDB

Modulo Cloud9

Maverick incluye el brillante IDE Cloud9  como una manera fácil de explorar y editar archivos en su Companion Computer. Es muy útil para alterar los archivos de configuración, así como la codificación completa, tambien es posible acceder al SHELL del sistema desde el mismo IDE.

Modulo Desktop

Todas las imágenes del sistema operativo que están distribuidas hasta ahora para Maverick contienen un entorno de escritorio completo (excepto la imagen raspberrylite), pero el entorno está desactivado de manera predeterminada.

Plataformas que soportan Dekstop

  • Joule (Ubuntu Desktop)
  • Odroid (Ubuntu Desktop)
  • Raspberry (Pixel Desktop)

Modulo Development

El módulo de desarrollo es principalmente responsable de configurar el entorno de desarrollo Maverick (como era de esperar). Hay varios componentes que componen el entorno de desarrollo:

  • Cloud9 basado en el Entorno de Desarrollo Integrado (IDE)
  • Árbol de fuentes de ArduPilot, compilado para el vehículo elegido
  • SITL, configurado automáticamente para ejecutarse desde el firmware ArduPilot compilado
  • Proxy Mavlink adjunto a SITL, para multiplexar mavlink SITL a través de conexiones TCP y UDP
  • Separa la instancia Dev ROSmaster
  • Separa la instancia de Dev MAVROS
  • Entorno dedicado 'SITL' python...

Modulo Flight Controller

El módulo fc (Flight Controller) es muy similar al módulo Dev. Proporciona la misma arquitectura de Mavlink proxy, ROS master y MAVROS que proporciona el módulo dev, excepto que en lugar del entorno SITL se conecta al hardware del controlador de vuelo, generalmente a través de una conexión serie o USB.

  • FC Mavlink Proxy
  • ROS
  • ROS master
  • MAVROS
  • Python and Dronekit

Modulo Hardware

Casi todos los códigos / diseños de Maverick son independientes de la plataforma, es decir, no se preocupan por el hardware subyacente. Sin embargo, todas las plataformas tienen diferencias que deben solucionarse, y también hay varias configuraciones  que se pueden automatizar para que sea más fácil para el usuario final.

Se requiere el módulo de hardware para cada ejecución de configuración de maverick. Detecta automáticamente la plataforma de hardware subyacente e instala cualquier software relevante y realiza cualquier configuración y configuración relevante. Esto incluye cualquier periférico (por ejemplo, cámaras) que estén enchufados y sean reconocidos.
También es posible configurar los parámetros de localconf para forzar el soporte de hardware para cada plataforma / periférico. Esto es útil para los creadores de plataformas que desean incluir soporte para plataformas / periféricos sin necesidad de tenerlos todos presentes en tiempo de compilación.

Hardware soportado actualmente

  • Intel Joule
  • Aaeon Up
  • Intel RealSense
  • Odroid XU3/XU4
  • Odroid oCam
  • Raspberry Pi
  • BeagleBone Black
  • Seek Thermal cameras

Modulo Intelligence

El módulo de Inteligencia abarca cualquier tipo de aprendizaje automático, aprendizaje profundo, redes neuronales o inteligencia artificial, en el que la investigación y el software han avanzado mucho en los últimos tiempos.

  • Tensorflow: Una biblioteca de gran importancia de Google para inteligencia artificial.

Maverick utiliza Proxies Mavlink para permitir conexiones múltiples desde la fuente de mavlink (SITL/Autopilot) . Existen múltiples proveedores o tipos de proxy, Maverick genera automáticamente la configuración y el control del servicio. El tipo de proxy puede cambiarse configurando un solo parámetro localconf, p. Ej. para hacer que mavlink-router sea el proxy activo para los datos de mavlink de Controlador de Vuelo.

Proxy Mavlink (MavProxy, Mavlink-Router, cmavnode)

Maverick establece dos entornos de proxy por defecto, uno para FC (Flight Controller) y otro para Ardupilot SITL, y un tercer entorno opcional PX4 SITL. Hay un conjunto predeterminado de puertos finales, algunos de los cuales están reservados o recomendados para un uso particular:

Modulo Network

La creación de redes es un tema complejo y la configuración  es particularmente compleja tambien debido a las variedades en el hardware y tipos de redes. Hay muchas formas de configurar las redes, pero para un Companion Computer para el control de Drones/UAV (sin pantalla ni teclado), la confiabilidad y la conectividad son primordiales. Por lo tanto, Maverick usa una configuración de red deliberadamente simple. Los gestores de uso del SO Debian/Ubuntu modernos como Connection Manager o Network Manager tienden a ser de naturaleza compleja y realmente destinados al uso humano donde se requieren múltiples conexiones transitorias (como redes wifi múltiples).

Maverick, de forma predeterminada, desactiva estos administradores y utiliza el modelo de red Debian/Ubuntu muy simple pero confiable de configurar, esto consiste en un solo archivo  "/ etc/network/interfaces". Esto ha demostrado ser más simple y más confiable de administrar, particularmente de los manifiestos automatizados que utiliza Maverick.

Modulo ROS

Al igual que el módulo mavlink, otros módulos utilizan el módulo ROS para crear instancias de ROS y MAVROS. Sin embargo, tiene una lógica central para instalar el software ROS y MAVROS subyacente. ROS proporciona paquetes binarios extensos que se actualizan con frecuencia, se combinan para una versión de sistema operativo.

Modulo Security

Aunque los Drones/UAVs se utilizan principalmente para pasatiempos o trabajo comercial simple, en el futuro serán cada vez más una tecnología integral. Debido al peligro potencial de los drones, debe haber al menos algún esfuerzo para minimizar la posibilidad de piratear o interferir con ellos.

Maverick contiene varias medidas de seguridad básicas, la mayoría de las cuales no están habilitadas por defecto:

  • Firewall
  • Protección de ataque de fuerza bruta
  • Detección de Rootkit
  • Anti-virus

Modulo Vision

La visión es una parte importante (y divertida) de los UAV. Maverick proporciona componentes preinstalados y preconfigurados para admitir elementos estándar de la funcionalidad de visión artificial y video, y se están agregando más elementos todo el tiempo:

  • Gstreamer: software estándar de la industria para capturar, transcodificar y transmitir video
  • OpenCV: software estándar de la industria para Computer Vision
  • Aruco: biblioteca Fiducial Tag, para reconocer etiquetas / marcadores en video
  • Visiond: un servicio dinámico que detecta la cámara y el hardware de codificación, y genera automáticamente una tubería gstreamer para transmitir el video a través de la red, por ejemplo. Wifi. Muy útil para FPV, en el futuro será útil para transmitir CV y otros videos
  • Vision_seek: Similar a visiond, un daemon para la transmisión / grabación de secuencias de video desde un dispositivo de imagen Seek Thermal.
  • Flir One: Soporte para la cámara de imagen térmica Flir One
  • Vision_landing: software que usa etiquetas / marcadores (Aruco) como patrones de aterrizaje y controles Precision Landing en ArduCopter
  • Camera-streaming-daemon: servidor de video RTSP con publicación de descubrimiento de servicios.
  • Wifibroadcast: software innovador que utiliza el modo de monitor / inyección de adaptadores wifi compatibles para proporcionar video wifi sin conexión con una degradación elegante, similar al FPV análogo tradicional.
  • Biblioteca de prevención de colisiones: Intel RealSense Collision Avoidance Library es una biblioteca / herramienta para investigar estrategias para evitar colisiones. Utiliza cámaras Intel RealSense para la percepción de profundidad y permite diferentes métodos de detección y estrategias de evitación.
  • Orb_Slam2: biblioteca rápida para realizar SLAM monocular y estéreoRTAB-Map: SLAM basado en gráficos RGB-D

Modulo WEB

El módulo web agrega una interfaz web y servicios web a Maverick. Actualmente se encuentra en etapas muy tempranas y existe un índice de página temporal (¡no muy bonito!). Sin embargo, existe una estructura emergente y grandes cosas planificadas para el futuro, incluida una interfaz de configuración web para Maverick y una rica interfaz gráfica de video basada en web y en tiempo real.

Agradecimientos:

Damos muchas gracias a Fnoop en Github por este desarrollo y la liberación de su código fuente, da alegría ver desarrollos de esta magnitud llevado a cabo por pocos!!

Referencias:

Documentacion Maverick
https://goodrobots.github.io/maverick/current/#/
https://goodrobots.github.io/maverick/current/#/about
Repositorio Maverick
https://github.com/goodrobots/maverick