dimanche 28 février 2016

Analyse de logs mavlink

A partir du logiciel qgroundcontrol il est possible de faire l'enregistrement des trames mavlink reçues depuis le "kitedrone".
Les trames sont enregistrées de manière brute dans un "bag".
Les versions précédentes du logiciel permettaient de rejouer ces enregistrements, puis de les convertir dans un fichier CSV (mais cette fois encore une ligne par message reçu). Je n'ai pas retrouvé cette fonctionnalité dans la version actuelle du logiciel.

Il est par contre de faire ce même postraitement avec le script mavlogdump de pymavlink.

Je suis parti d'enregistrements réalisés sur le terrain de rugby de l'ECN (et téléchargeable ici)
Une fois pymavlink installé, mavlogdump se trouve dans le répertoire mavlink/pymavlink/tools

python mavlogdump.py ~/kites/robokite/robokite/FlightData/ECN_2202_1.mavlink -o ECN_2202_1.txt




Le fichier texte résultant peut facilement être ouvert. Pas facile cependant de faire un tracé.

Une autre alternative est d'utilisé mavtomfile.py qui génère un fichier .m (ensemble de commande matlab) permettant de recréer le jeu de données, cette fois sous la forme de matrices.

python mavtomfile.py ~/kites/robokite/robokite/FlightData/ECN_2202_1.mavlink

Le fichier de sortie est généré dans le répertoire du fichier d'entrée avec l'extension .m au lieu de .mavlink.

Il peut-être ouvert en lançant octave, puis en exécutant

run ECN_2002_2.m

Les données présentes peuvent-être listées en tappant

octave:8> who
Variables in the current scope:

ATTITUDE          HEARTBEAT         SCALED_PRESSURE2


Il est ensuite possible de voir les champs correspondants à chaque trame

octave:9> SCALED_PRESSURE2
SCALED_PRESSURE2 =


ATTITUDE          HEARTBEAT         SCALED_PRESSURE2



  scalar structure containing the fields:

    columns =
    {
      [1,1] = timestamp
      [1,2] = time_boot_ms
      [1,3] = press_abs
      [1,4] = press_diff
      [1,5] = temperature
    }
    data =

       1.4561e+09   1.8920e+06   8.1669e+06   7.0620e+01   0.0000e+00
       1.4561e+09   1.8920e+06   8.1681e+06   6.2570e+01   0.0000e+00


Il est ensuite possible de faire des tracés par exemple l'angle d'élévation (pitch) en fonction de la tension dans la ligne (rangé dans SCALED_PRESSURE2)

plot(ATTITUDE.data(:,2), ATTITUDE.data(:,4)*180/3.1415,SCALED_PRESSURE2.data(:,2), SCALED_PRESSURE2.data(:,4))


Aucun commentaire:

Enregistrer un commentaire