En esta publicación vamos a hablar un poco acerca de las herramientas disponibles "Gracias a las comunidades" con las cuales podremos llegar a estructurar un proyecto de basado en tecnologías UAV, ejecutarlo e implementarlo en producción.
Para llevar a acabo la ejecución de un proyecto, es necesario tener una estructura consistente de la idea que se quiere implementar, contar con las herramientas necesarias para crear un "modelo estructural" del proyecto, que sera capaz de presentarnos un resumen de todo los procesos ejecutados sobre el trayecto de este, exponiendo la evolución del proyecto sobre el tiempo.
"La finalidad de todas estas herramientas es brindarnos un espacio de trabajo cómodo."

Las herramientas que compilaremos, serán algunas de las aplicaciones que utilizamos en nuestro espacio para el diseño de UAVs.

son necesarias algunas herramientas físicas tales como Hardware y otras lógicas como Software para estas implementaciones.

Para sumergirnos en estas ciencias, es necesario tener claros muchos conceptos técnicos de Computación, Redes, Electrónica (Análoga/Digital) y sistemas en general, también es necesario una noción o idea del funcionamiento de estas plataformas.

Dispositivos de computo

Hardware(CPUs)


Necesitaremos un dispositivo que sea capaz de ejecutar un sistema operativo, no importa los recursos disponibles para la máquina, lo que importa es que funcione. los dispositivos deben de basar sus tecnologías en la filosofía Open Source o por lo menos soportarlo, para que sean capaces de adaptarse al entorno, a esto lo llamaremos "sistemas modulares", este dispositivo puede variar desde un dispositivo móvil, sistema embebido, computador de escritorio o Laptop.

Existen Sistemas Operativos que no son capaces de
adaptarse a un entorno de hardware, un ejemplo de esto es el uso de las tecnologías o plataformas basadas en sistemas operativos del desarrollador Microsoft con respecto a los dispositivos de bajos recursos o obsoletos, ya que no es posible correr sus sistemas en equipos anticuados solo por consumos de recursos de hardware requeridos por el fabricante del Sistema Operativo, obligando al usuario o consumidor a COMPRAR un nuevo dispositivo para seguir implementando su sistema, este proceso se conoce como la degradación que sufren los dispositivos hardware solo por el echo de salir uno nuevo sistema operativo más avanzado, tambien llamada Obsolescencia programada.

Existen sistemas operativos tan modulares que son capaces de adaptarse a cualquier entorno sin importar que tan bajos puedan llegar a ser los recursos disponibles

Sistemas Operativos Modulares.


Como controlador de Hardware, usaremos algo más conocido como un Sistema Operativo, si estas leyendo esta guía lo mas probable es que estés utilizando uno :) estos sistemas operativos son herramientas de trabajo con adicciones de software el cual ejecutan acciones especificas o tareas programadas sobre el hardware en el que corre.

Existen en el mercado mucha variedad de sistemas operativos para diferentes plataformas de hardware, pero nosotros vamos a implementar algunos sistemas especiales como es el caso de GNU con Kernel Linux.

GNU/Linux como plataforma


GNU/Linux se puede definir como la unión de dos componentes.

  • linux:


    Kernel o núcleo controlador de hardware, es una estructura de código escrita normalmente en el lenguaje C o variaciones de este, el cual es capas de controlar toda la composición o interacción que existe entre un usuario y el hardware base (CPU,MEMORIAS,Unidades E/S)
    Definamos linux como el intermediario o interprete entre la comunicación Humano/Máquina

  • GNU: "GNU's Not Unix"


    Es un proyecto muy aparte del proyecto Linux, pero que al unirse con este diseña un sistema operativo con paquetes y herramientas básicas que permitan la comunicación y la ejecución de muchas acciones,GNU implementa aplicaciones, paquetes y herramientas software que al unirse con un Kernel, son capaces de implementar interfaces de interacción entre el usuario y el computador.

Uniendo el termino creamos el acrónimo "GNU/Linux" el cual, implementa un completo y moderno Sistema Operativo Open Source de ultima generación, que ha sido liberado al publico para que sea este quien lo desarrolle y lo sostenga, la comunidad GNU/Linux a nivel mundial se encuentra en expansión y es hora de ser uno más que se agregue al proyecto.
Estos sistemas operativos, son herramientas que están diseñadas para que puedan ser implementados sobre cualquier plataforma, ya sea desde un dispositivo móvil "Celulares", Router, sistemas SOC, computadores de escritorio y hasta la ultima supercomputadora para implementaciones de servidores en la nube.

Android es un gran ejemplo de estos sistemas operativos, ya que Android es una variación del Kernel Linux que ha sido adaptado para que sea ejecutado sobre arquitecturas de hardware basadas en el chip ARM con aplicaciones desarrolladas en este caso por Google.

Lenguajes de programación


Para poder diseñar estos sistemas operativos, son necesarias implementaciones de software el cual los llamamos "Lenguajes de programación" que al ser modelados y estructurados lógicamente con una base de reglas ya definidas "por un compilador o interprete", son capaces de modelar aplicaciones tal cual como las vemos hoy en día sobre nuestros dispositivos, estos lenguajes tienen diferentes categorías.

  • Lenguajes de alto nivel: Utilizados para la construcción de aplicaciones el cual interactúan con los usuarios por medio de frontends o GUIs, tambien permiten la implementacion de aplicaciones enlazadas a lenguajes de bajo nivel o mezclas de estos.

  • Python

  • Perl

  • Ruby

  • PHP

  • MATLAB y la lista se extiende...

  • Lenguajes de bajo nivel: lenguajes que se enfocan al control de periféricos de E/S, control de librerías y paquetería de sistemas, a diferencia de muchos lenguajes de alto nivel, los lenguajes de bajo nivel normalmente se conocen como "Compilados" y los de alto nivel suelen ser "interpretados".

  • Lenguajes ensambladores

Existen lenguajes intermedios que son aquellos que son capaces de correr bajo los dos niveles.

Entornos de Desarrollo Integrados "IDE"


Los Entornos de Desarrollo Integrados, se pueden determinar como aplicaciones que nos permiten a nosotros los desarrolladores tener un entorno completo con todas las herramientas necesarias para la construcción de una aplicación o el análisis de esta, estos entornos implementan sistemas de control de proyectos, control de versiones, técnicas avanzadas que nos ayudan a realizar un debugging mucho más rápido sobre nuestro desarrollo.

Algunos IDE.

También contamos con herramientas de simulación en hardware o herramientas de prototipado rápido, estas herramientas son utilizadas para la invención o desarrollo de prototipos físicos.
es posible "Inventar" un nuevo dispositivo con un poco de imaginación y un Entorno Desarrollo Integrado.

Entornos simulados.

Herramientas de virtualización

Máquinas virtuales

Arquitectura de una máquina virtual
Las máquinas virtuales, son entornos de simulación que nos permiten ejecutar sistemas operativos (simulado) sobre otro sistema operativo (anfitrión); es decir, tenemos dos niveles de software sobre un solo dispositivo, esto es una ventaja ya que me permite crear laboratorios de pruebas con los mismos recursos del computador principal logrando dividirlos entre los dos sistemas e implementar las pruebas necesarias.

Elementos de Hardware:

Micro controladores


sistemas integrados bajo un solo chip el cual son capaces de procesar información de entrada, decodificarla, realizar un proceso de análisis sobre estos datos, tomar decisiones y presentar flujos de información sobre sus salidas.

Sistemas en un solo chip "SoC"


los sistemas en un solo chip son módulos de hardware y software integrados normalmente sobre una sola board, implementan internamente todos los controladores físicos para conformar un computador, logrando una manipulación de todas las interfaces de E/S disponibles, hasta implementacion de nuevos dispositivos.

Kits de desarrollo



Los kits de desarrollo son elementos constituidos por hardware y software que implementan muchas librerías para el control total del hardware.
Existen plataformas de prototipado rápido el cual nos permiten construir rápida y eficientemente desarrollos de hardware en mucho menos tiempo.

  • Kit Pinguino: Board de desarrollo basada en la familia de los 18fXXXX, IDE para su programación compuesto de librerías, algún lenguaje de programación y compilador.
  • Kit Arduino: Desarrollado bajo arquitectura Atmel, tambien tiene su IDE, estructura de programación muy simple.
  • Kit Raspberry pi: Bajo arquitectura ARM, este kit de desarrollo cuenta con muchas herramientas tales como lenguajes de programación, software de modelado y herramientas.
  • Drone Kit: Integración de diferentes arquitecturas de hardware y software para la construcción de UAVs.

Herramientas para la gestión de proyectos


Existen actualmente muchas herramientas en la nube o de escritorio que nos pueden servir al momento de realizar una implementacion, para este caso vamos a nombrar algunas de las herramientas que utilizamos sobre nuestro HackLab.

Canales de comunicación

Las listas de correo:

Canales de distribución de correo maviso/simultaneo hacia los integrantes de la lista o pertenecientes al proyecto.

Salas de chat:

Son herramientas que nos permiten a nosotros tener una comunicación más centralizada y directa con el resto de personas pertenecientes al proyecto, logrando una interacción directa con los integrantes del desarrollo, pudiendo compartir información, enlazar documentos y llevar un control de los hilos tratados, permiten la creación de canales, edición de integrantes e integración con muchas herramientas.

Video Conferencias

Contamos con herramientas o canales de comunicación directos como Streamings en Internet,
Servicios de comunicación en tiempo real que permiten realizar salas de vídeo chat.

Control de versiones

Son aplicaciones que nos permiten llevar un control de versiones y evolución del proyecto, cambios presentados durante el desarrollo del sistema.

Seguimientos a proyectos, gestión de tareas

Son aplicaciones que ayudan a organizar y planear la ejecución de tareas en la construcción de un proyecto, con estas herramientas logramos una planificación correcta del desarrollo y un control del tiempo sobre este.

Logrando unir e implementar todas estas herramientas, construimos una estructura muy fuerte y consistente para llevar a cabo una implementacion, nosotros en UAVLabs Colombia estamos utilizando estas y muchas herramientas mas para nuestros proyectos de desarrollo basado en Tecnologías Libres para la construcción de UAVs, esperamos que esta información pueda servirles para la gestión de sus proyectos.

Saludos....