Dron Autónomo: Surca los Cielos con tu ODROID-XU4

Este tutorial te enseñará a montar un dron con capacidad de autonomía guiado por Pixhawk. El proyecto consta de lo siguiente:

  • ODROID XU4 con tarjeta SD de 32GB (con Ubuntu 18.04)
  • Módulo WiFi ODROID 5
  • FCU 3DR Pixhawk
  • Módulo de potencia Pixhawk
  • Módulo USB-TTL
  • Cámara de seguimiento Intel Realsense T265
  • Estructura Q330 UAV
  • 4 Motores RS2203 2300KV
  • 4 ESCs con calificación 25A
  • Batería de 5500 mAh 3S LiPo
  • Repuesto de conector de alimentación de 2.1 mm x 5.5 mm
  • Receptor de radio FS-IA6B
  • Controlador Flysky i6
  • PDB
  • Cinta de montaje de doble cara

Cableado y ensamblaje

Figure 1 - All the materials used for this project prior to assembly
Figura 1: Todos los materiales utilizados en este proyecto antes del montaje

Lo importante de nuestra lista es que la mayoría de los materiales necesarios se pueden usar para montar un simple dron. El controlador Pixhawk está diseñado para comunicarse con cualquier ordenador compatible con Linux sin importan los periféricos conectados, por lo que podrías usar cualquier radio, batería, combinación ESC/motor y estructura que quisieses. Esta universalidad es bastante potente, de modo que no necesitas necesariamente limitarte a los materiales que he enumerado con anterioridad.

Nuestro primer paso sería ensamblar el dron. Lo ensamblaremos con una configuración "Quad X", que es la configuración de dron más simple disponible en Pixhawk. La Figura 2 muestra cómo debes configurar las conexiones del dron y dónde debes conectar las señales ESC a las salidas del Pixhawk.

Figure 2 - Quad X with associated motor directions and numbering
Figura 2 - Quad X con direcciones de motor asociadas y la numeración

Figure 3 - Pixhawk Output pins (numbered). First 4 pins are colour-coded for connecting a Quad X frame
Figura 3 - Pines de salida de Pixhawk (numerados). Los primeros 4 pines están codificados por colores para conectar una estructura Quad X

Tras ensamblar la estructura y atornillar los motores, puedes soldar los ESC al PDB (que es parte de la estructura Q330) y a los motores. La Figura 4 muestra el cableado asociado a las diferentes direcciones del sping.

Figure 4 - ESC to motor wire connections corresponding to different spin directions
FFigura 4: ESC hacia las correspondientes conexiones del cable del motor para las diferentes direcciones de giro

Ahora conecta el receptor de radio a Pixhawk. Pixhawk que interpreta las señales como SBUS, configuré mi receptor FS-IA6B para emitir a través de una única línea de datos.

Figure 5 - FS-IA6B to Pixhawk link
Figura 5 - Enlace FS-IA6B a Pixhawk

Ahora soldamos el conector jack de repuesto al módulo de alimentación Pixhawk, que tiene un 5EC 3A BEC que usaremos para alimentar el ODROID integrado. La soldadura se muestra en la Figura 6. La prueba de la salida de voltaje con el voltímetro muestra 5.28V, un voltaje seguro para alimentar nuestro ODROID.

Figure 6 - Barrel jack connector to BEC soldering
Figura 6: Conector jack para soldadura BEC

Figure 7 - Voltage output from the BEC after powering on the circuit
Figura 7 - Salida de voltaje del BEC tras encender el circuito

La última soldadura será el convertidor USB-TTL, que se usará para la comunicación entre ODROID y la FCU Pixhawk, la cual se muestra en la Figura 8. Puedes encontrar un esquema en  https://ardupilot.org/dev/_images/ODroid_Pixhawk_Wiring.jpg.

Figure 8 - USB-TTL data connection to Pixhawk
Figura 8: Conexión de datos USB-TTL a Pixhawk

Ya hemos terminado con la parte tediosa del ensamblaje, y es hora de montarlo todo. Yo usé una cinta de montaje de doble cara para que la FCU y la cámara no se vieran afectadas por las vibraciones del quadrotor. Debido a la falta de espacio, decidí montar la cámara en la Pixhawk FCU en la parte superior del ODROID. Esta no es la mejor forma, pero funciona bien, aunque el problema podría mitigarse fácilmente utilizando una FCU más pequeña (como Pixracer) o extensiones impresas en 3D.

Figure 9 - Double sided mounting underneath the ODROID-XU4
Figura 9 - Montaje de la cinta de doble cara por debajo del ODROID-XU4

Figure 10 - The ODROID mounted on the Q330 frame
Figura 10 - El ODROID montado en la estructura Q330

Figure 11 - The Pixhawk FCU mounted on top of ODROID. Note that the Pixhawk FCU was leveled W.R.T. the Q330 frame
Figura 11 - La FCU Pixhawk montada sobre ODROID. Ten en cuenta que el FCU Pixhawk fue nivelado W.R.T. para la estructura Q330

Figure 12 - Receiver, barrel jack, USB-TTL, WiFi adapter, and ESC outputs connected
Figura 12 - Receptor, conector, USB-TTL, adaptador WiFi y salidas ESC conectadas

Figure 13 - Realsense T265 camera mounted on top of the Pixhawk FCU and connected to ODROID
Figura 13: Cámara Realsense T265 montada en la parte superior de Pixhawk FCU y conectada al ODROID

Configuración del software ODROID

Nuestro ensamblaje ya está completo, es hora de configurar el software. Afortunadamente, es muy simple y se reduce a instalar paquetes y verificar nuestros dispositivos/conexiones:

1. Instalar ROS Melodic desde http://wiki.ros.org/melodic/Installation/Ubuntu 2. Instalar [librealsense desde https://github.com/IntelRealSense/librealsense/blob/master/doc/installation.md. (asegúrate de seguir el paso 5) 3. instalar ros-melodic-ddynamic-reconfigure a través de apt 4. Instalar realsense-ros desde https://github.com/IntelRealSense/realsense-ros 5. Instalar mavros y mavlink:

$ sudo apt-get install ros-kinetic-mavros ros-kinetic-mavros-extras
$ wget https://raw.githubusercontent.com/mavlink/mavros/master/mavros/scripts/install_geographiclib_datasets.sh && ./install_geographiclib_datasets.sh
6. Prueba que la cámara T265 funciona (conecta ODROID a una pantalla y ejecuta `realsense-viewer` desde el terminal) 7. Comprueba que la cámara T265 también funcione en ROS:
$ roslaunch realsense2_camera rs_t265.launch
Debería ver mensajes de odometría entrantes a una velocidad de ~200 Hz
$ rostopic hz /camera/odom/sample
subscribed to [/camera/odom/sample]
average rate: 199.868
min: 0.001s max: 0.012s std dev: 0.00130s window: 189
average rate: 199.845
min: 0.000s max: 0.044s std dev: 0.00947s window: 389
average rate: 199.574
min: 0.000s max: 0.044s std dev: 0.01103s window: 585
8. Instala un paquete de conversión desde https://github.com/thien94/vision_to_mavros para que las coordenadas de la cámara a la FCU sean correctas.

9. Crea un punto de acceso desde el módulo WiFi de ODROID y reinicia para habilitarlo:

$ git clone https://github.com/oblique/create_ap
$ cd create_ap
$ sudo make install
$ systemctl start create_ap
$ systemctl enable create_ap
$ create_ap wlan0 eth0 odroid_drone --mkconfig /etc/create_ap.conf

Configurar FCU Pixhawk

Llegados a este punto, nuestra configuración de ODROID está completa y necesitamos configurar la FCU Pixhawk con QGroundControl. Puede descargar AppImage en tu propio ordenador y tras conectarte a la FCU, sigue estos pasos para configurar correctamente Pixhawk para aceptar datos de posicionamiento de visión:

1. Instalar el último firmware 2. Elegir el tipo de estructura (en mi caso, elegiré Quadrotor X - DJI Flame Wheel F330 ya que es la más similar al Q330) 3. Calibrar los sensores FCU 4. Calibrar tu controlador de radio después de conectarlo al receptor 5. Calibrar la batería de LiPo y los ESC. Fijar los valores correctos en Número de celdas 6. Asignar canales de radio en modos de vuelo. Configuré el mío como en la Figura 14 7. Ahora vamos a la sección de Parámetros:

  • Cambié `CBRK_IO_SAFETY` para deshabilitar la verificación de seguridad, aunque esto es opcional
  • Cambié `PWM_MIN` por un valor razonable (lo configuré en 1050 us)
  • Ajusta `MAV_0_CONFIG` en" TELEM 2 ",` MAV_0_MODE` en "Onboard"
  • Desmarca "use GPS" en `EKF2_AID_MASK` y marca "vision position fusion" y "vision yaw fusion"
  • Cambia `EKF2_HGT_MODE` a" Vision "
  • Ajusta los parámetros `EKF2_EV_POS_X`,` EKF2_EV_POS_Y`, `EKF2_EV_POS_Z` en consecuencia
  • Por seguridad, cambia `COM_OBL_ACT` a "Terminate" y `COM_OBL_RC_ACT` a "Terminate" en caso de que haya algún tipo de error en el enlace de datos ODROID-Pixhawk

Figure 14: My radio controller channel configuration
Figura 14: Configuración del canal de mi controlador de radio

También asigné un interruptor manual para emergencias. Los interruptores de modo Manual, Position y Offboard han sido asignados para una transición más suave en la autonomía.

Cogiendo altura

Ahora echaremos nuestros propios datos a volar. Clonamos un paquete personalizado llamado my_autonomous_drone de https://github.com/yehonathanlitman/my_autonomous_drone y recompilamos nuestro espacio ROS. Deberás ejecutar lo siguiente para localizar tu convertidor USB-TTL:

$ ls /dev/tty* | grep USB
Luego, cambia launch/px4.launch para seguir este formato:
<!--?xml version="1.0"?-->

<span style="font-weight: 400;">    </span> 

<span style="font-weight: 400;">    </span> 

<span style="font-weight: 400;">    </span> 

<span style="font-weight: 400;">    </span> 

<span style="font-weight: 400;">    </span> 

<span style="font-weight: 400;">            </span> 

<span style="font-weight: 400;">            </span> 

<span style="font-weight: 400;">            </span> 

<span style="font-weight: 400;">            </span> 

<span style="font-weight: 400;">            </span> 

<span style="font-weight: 400;">            </span> 

<span style="font-weight: 400;">            </span> 

<span style="font-weight: 400;">    </span> 

Ahora crea un directorio src en el paquete my_autonomous_drone y agrega un offb_node.cpp (https://dev.px4.io/v1.9.0/en/ros/mavros_offboard.html). Asegúrate de añadir el archivo a la compilación del paquete para que pueda compilarse. Después de encender el dron desde la batería, conéctate por SSH al punto de acceso que creaste y sigue estos pasos:

1. Ejecuta "roslaunch my_autonomous_drone px4.launch" para empezar la transmisión de datos 2. Verifica que la FCU esté conectada con " rostopic echo /mavros/state " 3. Inicia el nodo Realsense con "roslaunch realsense2_camera rs_t265.launch" 4. Ejecuta "roslaunch vision_to_mavros t265_tf_to_mavros.launch" para la conversión del marco de coordenadas 5. El último paso es ejecutar "rosrun my_autonomous_drone offb_node" para comenzar a enviar el waypoint de posición a Pixhawk. Las moscas del dron se muestran en la Figura 15.

Figure 15 - Our ODROID drone hovering at 1 meter above the ground!
Figura 15: ¡Nuestro dron ODROID suspendido a 1 metro del suelo!

Si quieres que el dron haga algo más impresionante, puedes jugar con las coordenadas x e y en offb_node.cpp. Por ejemplo, se puede hacer una figura de ocho usando ecuaciones paramétricas (https://mathworld.wolfram.com/EightCurve.html). Dentro del ciclo while podemos hacer esto, donde la variable "i" se inicializa a 0 antes de que comience el ciclo:

double t = i * 0.02;
x = a * sin(t);
y = a * sin(t) * cos(t);
i++;

Conclusión

En esta guía, te he mostrado cómo ensamblar un dron, conectar tu controlador de vuelo a ODROID y enviarle simples comandos de guía en ROS. Esto es solo la punta del iceberg de un campo súper interesante, pero con un poco de trabajo duro puedes comenzar a hacer cosas realmente increíbles. Si desea más, puede consultar mi canal de YouTube (youtube.com/c/SimpleKernel) donde he subido algunos videos de instrucción más detallados sobre autonomía usando Pixhawk y sobre como configurar su propia guía visual desde cero.

Be the first to comment

Leave a Reply