dimanche 23 novembre 2014

Tests mavlink

Afin de vérifier la qualité de la communication radio, j'ai essayé d'utiliser mavlink.

Voici l'idée : un programme tourne sur la carte arduino et envoie un bit de vie sur le port série.
Ce message est transmis en radio vers mon pc équipé de la carte RF sol. Je vérifie la validité des messages reçus.

J'ai essayé de suivre http://qgroundcontrol.org/dev/mavlink_arduino_integration_tutorial

Malheureusement, cette documentation n'est pas à jour, et des liens sont morts.

D'autres que moi ont déjà eu les mêmes problèmes, et j'ai essayé de suivre leurs conseils

http://diydrones.com/forum/topics/beginning-tests-using-mavlink

Après avoir appliqué ces conseils, j'avais ensuite de nouvelles erreurs à la compilation :
avr-gcc: error: unrecognized command line option ‘-assembler-with-cpp’

Cela vient de la nouvelle version du compilateur (dans ubuntu 14.04) qui n'est plus compatible avec les anciennes versions d'arduino.
Le problème a été résolu dans la version de développement d'arduino.

Malheureusement, d'autres erreurs arrivaient de nouveau.

J'ai finalement simplement enlevé la dépendence à FastSerial qui n'est pas indispensable.
J'ai également mis le chemin en dur vers mavlink.h

J'ai alors pu compiler, et voir passer les messages (codés) du bit de vie dans le "serialmonitor".

Afin de vérifier l'intégrité de ces messages, j'ai installé GGroundControlStation (installation très simple à partir des binaires).

QGroundControl a automatiquement détecté les messages arrivant sur le port série. Malheureusement la version du protocole Mavlink, ne correspondait pas, un message d'erreur fut affiché.

Finalement, j'ai repris le script de test et téléchargé le code source plus récent généré en C

L'include suivant était suffisant pour utiliser la bibliothèque.
#include "/home/bat/sketchbook/libraries/mavlink/ardupilotmega/mavlink.h"

J'arrivais ensuite bien à voir les messages dans QGroundControl (il faut pour cela aller dans Communication, ajouter la liaison série si elle n'est pas connectée automatiquement, et ouvrir la connexion).

Malheureusement, les messages s'arrêtaient systématiquement au bout d'un certain temps. Mais cette fois c'était ma faute, car je stockais le temps en ms dans un int (allant jusqu'à 32 767 ). Au bout de 32s, le programme se retrouvait donc bloqué...

J'ai également ajouté des messages fictifs d'attitude et de position. J'ai ainsi pu tester les outils de logs et de graphique en temps réels, ainsi que les possibilités de rejeu.

Le code pour l'arduino est là.

Attitude et trajectoire simulées et envoyées à partir d'une carte arduino connectée en série

Graphiques temps réels et inspecteur mavlink.



Aucun commentaire:

Enregistrer un commentaire