jueves, 29 de septiembre de 2022

Mi experiencia a la hora de adaptar MAVLink para proyectos Arduino

Figura 1. Arduino Due conectada vía Serial1 a Pixhawk 4
Podemos encontrar la última versión de MAVLink en su repositorio oficial de GitHub, sin embargo, usemos la versión ya generada en C o generemos la nuestra propia, hay un par de problemas que resolver de cara a la importación de la librería y del uso de memoria.

Por una parte, la librería en C de MAVLink v2.0 no cuenta con una cabecera principal la cual importar en nuestro proyecto, como sí sucede en una muy usada adaptación de MAVLink v1.0 para Arduino disponible en el servidor de discusión de ArduPilot.

Para poder importar MAVLink v2.0 en C en nuestro proyecto usando directamente su cabecera principal (#include "mavlink.h"), y consecuentemente nuestro dialecto deseado, necesitamos incluir el siguiente archivo en la raíz de nuestra librería:

No basta con copiar y pegar la cabecera de la versión adaptada v1.0 en la v2.0, debido a que el macro MAVLINK_STX toma el valor 254, que corresponde con el marcador 0xFE que indica el comienzo de un paquete MAVLink v1.0. Por su parte, MAVLink v2.0, cuenta con el marcador 0xFD, que corresponde con el número 253. Más detalles en la documentación oficial.

Figura 2. Estructura de un paquete en MAVLink v2.0

Por último, es posible que tengamos problemas con el uso de la memoria, al menos si usamos una versión clon de Arduino Uno como lo es la Adeept Uno, o placas no muy capaces. La mejor solución es comprar una con más memoria o seguir usando la versión adaptada v1.0 que no genera este problema (al menos en mi caso).

Pasando de la Adeept Uno a los modelos Uno, Mega o Due (que son muchísimo más versátiles) no he tenido inconvenientes.

No hay comentarios:

Publicar un comentario