Los simuladores que actualmente tienen soporte bajo Pixhawk permiten que el código de vuelo PX4 controle un vehículo modelado por computadora en un "mundo" simulado. Se puede interactuar con este vehículo como se haria con un vehículo real, usando QGroundControl, una API fuera de la red o un JoyStick/GamePad.

PX4 admite la simulación Software In The Loop (SITL), donde el Firmware Stack de vuelo se ejecuta en la computadora (la misma computadora u otra computadora en la misma red), existe otro tipo de simulaciones llamadas Hardware In The Loop (HITL) el cual utiliza un firmware de simulación instalado sobre la controladora real.

API MAVLInk para el SImulador.

Todos los simuladores se comunican con PX4 utilizando la API MAVLink del simulador. Esta API define un conjunto de mensajes MAVLink que suministran datos de sensores del mundo simulado a PX4 y devuelven los valores del motor y del actuador del código de vuelo que se aplicará al vehículo simulado. La imagen a continuación muestra el flujo de mensajes.
px4_simulator_messages

Entorno de Simulacion

la simulacion SITL, ejecuta el sistema completo en la máquina host y simula el piloto automático. Se conecta a través de la red local al simulador, el desarrollador describre la arquitectura de la siguiente manera
arquitecturabase

El siguiente diagrama muestra un entorno de simulación SITL típico para cualquiera de los simuladores compatibles. Las diferentes partes del sistema se conectan a través de UDP y se pueden ejecutar en la misma computadora u otra computadora en la misma red.
px4_sitl_overview

PX4 usa un módulo específico de simulación para escuchar en el puerto UDP 14560. Los simuladores se conectan a este puerto, luego intercambian información usando la API MAVLink del simulador descrita anteriormente. PX4 en SITL y el simulador pueden ejecutarse en la misma computadora o en diferentes computadoras en la misma red.
PX4 utiliza el módulo MAVLink normal para conectarse al GCS, en este caso QGroundControl (Este normalmente escucha en el puerto 14550) y API de desarrolladores externos como DroneCore o ROS (que escuchan en el puerto 14540).
Se usa una conexión via USB serial para conectar el hardware Joystick / Gamepad a través de QGroundControl y controlar nuestro Dron Simulado.

Existen diferentes entornos al dia de hoy que soportal el firmware del proyecto, estos son:

  • Gazebo
  • jMAVSim
  • AirSim
  • XPlane (HITL solamente)

Para nuestro caso de estudio actual, procederemos con la compilacion del codigo para jMAVSim, simulando simplemente un QuadCopter al cual podremos acceder via NSH.

jMAVSim

jMAVSim es un simple simulador multirotor /QuadCopter que permite volar vehículos tipo helicóptero con PX4 en un mundo simulado. Es fácil de configurar y se puede usar para probar que su vehículo puede despegar, volar, aterrizar y responder adecuadamente a varias condiciones de falla (por ejemplo, fallas del GPS).

Compilando y Ejecutando jMAVSim

Si es la primera vez que lo vamos a ejecutar, "make" compilara el proyecto para despues ejecutarlo.

Accedemos al directorio del PC de Desarrollo y no via SSH, esto por que vamos a necesitar el X para ejecutar la aplicacion, en este punto introduccimos un teclado y mouse sober el Host DeVPX4 o iniciamos el procedimiento de compilacion.

Ejecutando la Consola por defecto para Ubuntu, nos dirigimos al directorio actual para el firmware y compilamos el codigo fuente.

$ cd src/Firmware/
$ make posix_sitl_default jmavsim

Si en este punto todo ha sido correcto, podremos ver el SHELL de NSH sobre nuestro PC de desarrollo y JMAVSim, podremos interactuar por medio de los comandos compilados con el Firmware y hacer pruebas SITL, viendo la interaccion desde la interfaz escrita en JAVA.

Demostracion.

Sobre este video, podremos analizar la salida del sistema y la ejecucion de la simulacion SITL cuando ejecutamos el comando.

PD: Poner en HD para visualizar correctamente

Referencias:
https://dev.px4.io/en/simulation/
https://dev.px4.io/en/simulation/jmavsim.html