El desarrollador PX4, creador de uno de los proyectos mas grandes OpenSource para el diseño de Vehiculos autonomos, VANT, UAVs o Drones como los conocemos hoy en dia, viene desarrollando constantemente una capa de Firmware y de Herramientas que actualmente son compatibles con las arquitecturas GNU/Linux, en este caso Ubuntu 16.04LTS estas herramientas constan de un Entorno de Desarrollo mas llamadado "Development Environment", este KIT o Entorno permite Construir todos los Firmwares para los direfentes desarrolladores de hardware que actualmente soportan el Stack de este proyecto (hardware basado en NuttX, hardware Qualcomm Snapdragon Flight, hardware basado en Linux, simulaciones de tipo SITL,y control a Robots desde la plataforma ROS).

Tecnologias Soportadas.

Actualmente, es posible compilar el Firmware del proyecto para diferentes arquitecturas de hardware; como podemos observar sobre la siguiente imagen el Sistema Operativo que mas soporte tiene para este momento es Ubuntu (GNU/Linux), el mismo desarrollador no recomienda o no da soporte a la integracion de todas estas tecnologias con las plataformas Microsoft Windows.
targets

Scripts de conveniencia en BASH

Los desarrolladores, han creado varios Scripts Bash que se pueden usar para instalar los simuladores y la cadena de herramientas NuttX. Todos los scripts instalan el IDE de Qt Creator, el sistema Ninja Build System, las dependencias comunes, FastRTPS y también descargan la ultima version del codigo fuente de PX4 desde su master en github al computador local sobre el directorio (~ / src / Firmware).

Idea: Queremos Compilar el Firmware de PX4 para proximamente instalarlo sobre una PX4 Pixhawk 1 "FMUV2".
Aclaramos que una vez compilado el codigo fuente, podremos instalar el Firmware sobre cualquiera de los Pilotos Automaticos Soportados

Orden de instalacion para los scripts.

Si la distribucion Linux utilizada, es diferente a Ubuntu 16.04 LTS, la instalacion de las ToolsChain se debe de realizar manualmente, para proceder con esta instalacion utilizar la GUIA DEL DESARROLLADOR

Clonando el Firmware.

$ sudo apt-get install git

Instalamos el software GIT sobre nuestro pc antes de clonar el proyecto.

$ mkdir src && cd src && git clone --recursive https://github.com/PX4/Firmware.git

#Salida del sistema
Cloning into 'Firmware'...
remote: Counting objects: 254923, done.
remote: Compressing objects: 100% (47/47), done.
Receiving objects: 100% (254923/254923), 97.98 MiB | 375.00 KiB/s, done.
remote: Total 254923 (delta 26), reused 9 (delta 9), pack-reused 254867
Resolving deltas: 100% (191850/191850), done.
Checking connectivity... done.
Submodule 'Tools/jMAVSim' (https://github.com/PX4/jMAVSim.git) registered for path 'Tools/jMAVSim'
Submodule 'Tools/sitl_gazebo' (https://github.com/PX4/sitl_gazebo.git) registered for path 'Tools/sitl_gazebo'
Submodule 'cmake/cmake_hexagon' (https://github.com/ATLFlight/cmake_hexagon.git) registered for path 'cmake/cmake_hexagon'
Submodule 'cmake/configs/uavcan_board_ident' (https://github.com/PX4/uavcan_board_ident.git) registered for path 'cmake/configs/uavcan_board_ident'
Submodule 'mavlink/include/mavlink/v2.0' (https://github.com/mavlink/c_library_v2.git) registered for path 'mavlink/include/mavlink/v2.0'
Submodule 'msg/tools/gencpp' (https://github.com/ros/gencpp.git) registered for path 'msg/tools/gencpp'
Submodule 'msg/tools/genmsg' (https://github.com/ros/genmsg.git) registered for path 'msg/tools/genmsg'
Submodule 'platforms/nuttx/NuttX/apps' (https://github.com/PX4-NuttX/apps.git) registered for path 'platforms/nuttx/NuttX/apps'
Submodule 'platforms/nuttx/NuttX/nuttx' (https://github.com/PX4-NuttX/nuttx.git) registered for path 'platforms/nuttx/NuttX/nuttx'
Submodule 'src/drivers/gps/devices' (https://github.com/PX4/GpsDrivers.git) registered for path 'src/drivers/gps/devices'
Submodule 'src/lib/DriverFramework' (https://github.com/PX4/DriverFramework.git) registered for path 'src/lib/DriverFramework'
Submodule 'src/lib/ecl' (https://github.com/PX4/ecl.git) registered for path 'src/lib/ecl'
Submodule 'src/lib/matrix' (https://github.com/PX4/Matrix.git) registered for path 'src/lib/matrix'
Submodule 'src/modules/micrortps_bridge/micro-CDR' (https://github.com/eProsima/micro-CDR.git) registered for path 'src/modules/micrortps_bridge/micro-CDR'
Submodule 'src/modules/uavcan/libuavcan' (https://github.com/UAVCAN/libuavcan.git) registered for path 'src/modules/uavcan/libuavcan'
Cloning into 'Tools/jMAVSim'...
remote: Counting objects: 2799, done.
remote: Compressing objects: 100% (8/8), done.
remote: Total 2799 (delta 9), reused 10 (delta 7), pack-reused 2784
Receiving objects: 100% (2799/2799), 53.10 MiB | 569.00 KiB/s, done.

Para clonar el proyecto, vamos a bajarlo con todos sus submodulos; procedemos a crear un directorio llamado "src" sobre el HOME de nuestro usuario y a clonar el proyecto dentro.

Instalando Ubuntu Sim + NuttX Tools.

sudo usermod -a -G dialout $USER

Hacemos que el usuario haga parte del grupo "dialout"

$ wget -c https://raw.githubusercontent.com/PX4/Devguide/master/build_scripts/ubuntu_sim_nuttx.sh

#Salida del sistema
--2018-07-15 13:39:55--  https://raw.githubusercontent.com/PX4/Devguide/master/build_scripts/ubuntu_sim_nuttx.sh
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 151.101.4.133
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|151.101.4.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2060 (2,0K) [text/plain]
Saving to: ‘ubuntu_sim_nuttx.sh’

ubuntu_sim_nuttx.sh                                                 100%[==================================================================================================================================================================>]   2,01K  --.-KB/s    in 0s      

2018-07-15 13:39:55 (8,58 MB/s) - ‘ubuntu_sim_nuttx.sh’ saved [2060/2060]

Para instalar el script "ubuntu_sim_nuttx.sh", lo primero que haremos es descargarlo sobre el directorio actual para nuestro usuario.

$ chmod +x ubuntu_sim_nuttx.sh

Damos los permisos necesarios para ejecutar el Script

Internamente el Script clona el Firmware del proyecto pero no recursivamente, nosotros previamente ya los clonamos sobre este punto, por lo tanco el Script omitira ese paso.

source ubuntu_sim_nuttx.sh


#Salida del sistema
$ source ubuntu_sim_nuttx.sh 
Downloading dependent script 'ubuntu_sim.sh'
--2018-07-15 14:13:03--  https://raw.githubusercontent.com/PX4/Devguide/master/build_scripts/ubuntu_sim.sh
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 151.101.4.133
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|151.101.4.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1576 (1,5K) [text/plain]
Saving to: ‘STDOUT’

-                                                                   100%[==================================================================================================================================================================>]   1,54K  --.-KB/s    in 0s      

2018-07-15 14:13:04 (68,3 MB/s) - written to stdout [1576/1576]

Downloading dependent script 'ubuntu_sim_common_deps.sh'
--2018-07-15 14:13:04--  https://raw.githubusercontent.com/PX4/Devguide/master/build_scripts/ubuntu_sim_common_deps.sh
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 151.101.4.133
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|151.101.4.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2609 (2,5K) [text/plain]
Saving to: ‘STDOUT’

-                                                                   100%[==================================================================================================================================================================>]   2,55K  --.-KB/s    in 0s      

2018-07-15 14:13:05 (6,17 MB/s) - written to stdout [2609/2609]

[sudo] password for heberth: 
We must first remove modemmanager
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be REMOVED:
  modemmanager
...

...
RESTART YOUR COMPUTER to complete installation of PX4 development toolchain

$ sudo reboot

Si todo hasta este punto ha salido correcto y el script no ha arrojado ningun error, tendremos instalado el Firmware listo para compilar hacia la arquitectura que deseemos, antes de esto debemos REINICIAR el Sistema Operativo.

ssh heberth@192.168.2.102

Reiniciado el sitema, nos conectamos de nuevo al shell de forma remota

Accedemos al directorio y compilamos el Firmware para nuestro piloto PIXHAWK V1 "FMUV2"

$ cd src/Firmware/
$ make px4fmu-v2_default


#Salida del sistema
-- PX4 VERSION: v1.8.0-224-geffeae9
-- CONFIG: nuttx_px4fmu-v2_default
-- Build Type: MinSizeRel
-- The ASM compiler identification is GNU
-- Found assembler: /home/heberth/gcc-arm-none-eabi-7-2017-q4-major/bin/arm-none-eabi-gcc
-- Found PythonInterp: /usr/bin/python (found version "2.7.12") 
-- Found PY_jinja2: /usr/local/lib/python2.7/dist-packages/jinja2  
-- C compiler: arm-none-eabi-gcc (GNU Tools for Arm Embedded Processors 7-2017-q4-major) 7.2.1 20170904 (release) [ARM/embedded-7-branch revision 255204]
-- C++ compiler: arm-none-eabi-g++ (GNU Tools for Arm Embedded Processors 7-2017-q4-major) 7.2.1 20170904 (release) [ARM/embedded-7-branch revision 255204]
-- PX4 ECL: Very lightweight Estimation & Control Library v0.9.0-564-g41953ab
-- Building and including px4io-v2
-- NuttX: px4fmu-v2 nsh cortex-m4
-- ROMFS: px4fmu_common
-- Configuring done
-- Generating done
-- Build files have been written to: /home/heberth/src/Firmware/build/nuttx_px4fmu-v2_default
ninja: Entering directory `/home/heberth/src/Firmware/build/nuttx_px4fmu-v2_default'
[9/630] Building px4io-v2
-- PX4 VERSION: v1.8.0-224-geffeae9
-- CONFIG: nuttx_px4io-v2_default
-- Build Type: MinSizeRel
-- The ASM compiler identification is GNU
-- Found assembler: /home/heberth/gcc-arm-none-eabi-7-2017-q4-major/bin/arm-none-eabi-gcc
-- Found PythonInterp: /usr/bin/python (found version "2.7.12") 
-- Found PY_jinja2: /usr/local/lib/python2.7/dist-packages/jinja2  
-- C compiler: arm-none-eabi-gcc (GNU Tools for Arm Embedded Processors 7-2017-q4-major) 7.2.1 20170904 (release) [ARM/embedded-7-branch revision 255204]
-- C++ compiler: arm-none-eabi-g++ (GNU Tools for Arm Embedded Processors 7-2017-q4-major) 7.2.1 20170904 (release) [ARM/embedded-7-branch revision 255204]
-- PX4 ECL: Very lightweight Estimation & Control Library v0.9.0-564-g41953ab
-- NuttX: px4io-v2 nsh cortex-m3
-- Configuring done
-- Generating done
-- Build files have been written to: /home/heberth/src/Firmware/build/nuttx_px4io-v2_default
ninja: Entering directory `/home/heberth/src/Firmware/build/nuttx_px4io-v2_default'
[195/195] Creating /home/heberth/src/Firmware/build/nuttx_px4io-v2_default/px4io-v2_default.px4
[630/630] Creating /home/heberth/src/Firmware/build/nuttx_px4fmu-v2_default/px4fmu-v2_default.px4

Si compila correctamente, podremos subir el Firmware al piloto automatico.

Referencias:
https://dev.px4.io/en/
https://dev.px4.io/en/setup/dev_env.html
https://dev.px4.io/en/setup/dev_env_linux.html
https://dev.px4.io/en/setup/dev_env_linux_ubuntu.html
https://github.com/PX4/Firmware
https://github.com/PX4/Devguide
https://github.com/PX4/Devguide/tree/master/build_scripts